2015-01-01 04:32:07 +00:00
|
|
|
/*
|
|
|
|
** obs.c - <+DESC+>
|
|
|
|
**
|
|
|
|
** 2014 - Frank Villaro-Dixon <Frank@Villaro-Dixon.eu>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "game.h"
|
2015-01-01 04:57:59 +00:00
|
|
|
#include "col.h"
|
2015-01-01 04:32:07 +00:00
|
|
|
#include <math.h>
|
|
|
|
|
|
|
|
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) { //{{{
|
|
|
|
struct s_obstacle o;
|
|
|
|
|
|
|
|
o.used = 1;
|
|
|
|
o.thick = thick;
|
|
|
|
o.face = face;
|
2015-01-01 05:19:10 +00:00
|
|
|
o.distance = SCREEN_DIAGONAL;
|
2015-01-01 04:32:07 +00:00
|
|
|
o.speed = speed;
|
|
|
|
|
|
|
|
return o;
|
|
|
|
} //}}}
|
|
|
|
|
|
|
|
void
|
|
|
|
delete_obstacle(struct s_game *g, int obs) { //{{{
|
|
|
|
g->obs[obs].used = 0;
|
|
|
|
} //}}}
|
|
|
|
|
|
|
|
void
|
2015-01-01 05:19:10 +00:00
|
|
|
draw_obstacles(struct s_game *g) { //{{{
|
|
|
|
|
2015-01-01 04:32:07 +00:00
|
|
|
int i;
|
2015-01-01 05:19:10 +00:00
|
|
|
|
|
|
|
void(*drawer)(struct s_game *, int faceno, int dist, int thick, int col);
|
|
|
|
drawer = get_polygon_drawer(g);
|
|
|
|
|
2015-01-01 04:32:07 +00:00
|
|
|
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 -= g->obs[i].speed;
|
|
|
|
|
|
|
|
if(g->obs[i].distance <= POLYGON_SIZE)
|
|
|
|
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);
|
|
|
|
add_obstacle(g, o);
|
|
|
|
}
|
2015-01-01 04:57:59 +00:00
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|