#include "ennemi.h" #include "mario.h" #include "box.h" #include "tile.h" #include "world.h" #include "score.h" #include void display_ennemi(ennemi_t * e) { if (e->life==DEAD) return; if (e->b.x<=world_get_real_x0(0)-e->b.w || e->b.x>=world_get_real_x0(0)+127) return; else e->discovered=1; if (e->type==GOOMBA) { extern image_t img_goomba; tileset_t goomba={&img_goomba, 8, 8, 1}; if (e->life==1) draw_tile(e->b.x-world_get_real_x0(0), e->b.y-world_get_real_y0(mario.p.y), &goomba, 1+(time_id/10)%2, 0); if (e->life==0) draw_tile(e->b.x-world_get_real_x0(0), e->b.y-world_get_real_y0(mario.p.y), &goomba, 0, 0); } } bool ennemi_check_collision(ennemi_t *e) { if (mario_immunity) { return false; } else { bool x_collide= (mario.p.x<=e->b.x && e->b.xb.x+e->b.w-1 && e->b.x+e->b.wb.y && e->b.yb.y+e->b.h-1 && e->b.y+e->b.hb.x-e->b.w>world_get_real_x0() && e->b.xdiscovered=1; if (e->b.x+e->b.w<=world_get_real_x0()) e->type=NONE; if (e->discovered==0) return; if (e->life==DEAD) e->type=NONE; if (e->type==NONE) return; for (int i=0; idiscovered && t->type!=NONE) { bool x_collide= (t->b.x<=e->b.x+e->b.vx && e->b.x+e->b.vxb.x+t->b.w) || (t->b.x<=e->b.x+e->b.w-1+e->b.vx && e->b.x+e->b.w+e->b.vxb.x+t->b.w); bool y_collide= (t->b.y<=e->b.y+e->b.vy && e->b.y+e->b.vyb.y+t->b.h) || (t->b.y<=e->b.y+e->b.h-1+e->b.vy && e->b.y+e->b.h+e->b.vyb.y+t->b.h); if (x_collide&&y_collide) { e->b.vx=0; e->b.vy=0; } } } if (e->type==GOOMBA) { if (e->life==1) { int old_vx=e->b.vx; if (time_id%2) e->b.vx=0; box_move(&e->b); if (time_id%2) e->b.vx=old_vx; if (e->b.vx==0) { if (e->p1==0) { e->b.vx=-1; e->p1=-1; } else { e->p1*=-1; e->b.vx=e->p1; } } if (e->b.y<0) e->type=NONE; if (ennemi_check_collision(e)) { if (mario.p.vy<0) { e->life=0; e->p1=time_id; score_add(100); mario.p.vy=4; } else hurt_mario(); } } else { if (e->p1>=time_id+10 || e->p1life=DEAD; } } display_ennemi(e); } ennemi_t * ennemis_global=0; int ennemis_global_size=0; void display_ennemi_table() { for (int i=0; i