/* ** obs.c - <+DESC+> ** ** 2014 - Frank Villaro-Dixon */ #include #include #include "game.h" #include "col.h" #include void init_ob(struct s_obstacle *obs) { //{{{ obs->used = 0; } //}}} void init_obs(struct s_game *g) { //{{{ int i; for(i = 0; i < g->num_obs; i++) { init_ob(&g->obs[i]); } } //}}} void add_obstacle(struct s_game *g, struct s_obstacle o) { //{{{ int i; for(i = 0; i < g->num_obs; i++) { if(!g->obs[i].used) { g->obs[i] = o; break; } } } //}}} struct s_obstacle create_obstacle(int thick, int face, int speed, int dist) { //{{{ struct s_obstacle o; o.used = 1; o.original_thick = thick; o.thick = o.original_thick; o.face = face; if(dist != -1) o.distance = dist; else o.distance = SCREEN_DIAGONAL; o.speed = speed; return o; } //}}} void delete_obstacle(struct s_game *g, int obs) { //{{{ g->obs[obs].used = 0; } //}}} void draw_obstacles(struct s_game *g) { //{{{ int i; void(*drawer)(struct s_game *, int faceno, int dist, int thick, int col); drawer = get_polygon_drawer(g); for(i = 0; i < g->num_obs; i++) { if(g->obs[i].used) { struct s_obstacle o = g->obs[i]; drawer(g, o.face, o.distance, o.thick, g->color); } } } //}}} void update_obstacles(struct s_game *g) { //{{{ int i; for(i = 0; i < g->num_obs; i++) { if(g->obs[i].used) { g->obs[i].distance -= DFT_OBS_SPEED*g->obs[i].speed; g->obs[i].thick = 1 * g->sexual_pulsation + g->obs[i].original_thick; if(g->obs[i].distance <= 0) g->obs[i].used = 0; } } } //}}} void add_random_obstacle(struct s_game *g) { struct s_obstacle o; o = create_obstacle(SHAPE_THICK, rand()%g->polygon_type, 1, -1); add_obstacle(g, o); } int get_max_obs_dist(struct s_game *g) { int i; int d_max = 0; for(i = 0; i < g->num_obs; i++) { if(g->obs[i].used) { d_max = MAX(d_max, g->obs[i].distance); } } return d_max; } int check_collisions(struct s_game *g) { int i; for(i = 0; i < g->num_obs; i++) { if(g->obs[i].used) { if(has_collision(g, g->obs[i])) return 1; } } return 0; }