diff options
Diffstat (limited to 'src/bullet.c')
| -rw-r--r-- | src/bullet.c | 58 |
1 files changed, 53 insertions, 5 deletions
diff --git a/src/bullet.c b/src/bullet.c index 4fe6433..8fca4af 100644 --- a/src/bullet.c +++ b/src/bullet.c @@ -1,12 +1,14 @@ #include "rodeo.h" #include "input.h" #include "player.h" +#include "bullet.h" #include "rodeo/collision.h" static rodeo_texture_2d_t bullet_texture; -static rodeo_collision_2d_world_t bullet_collision_world; -static rodeo_collision_2d_world_t player_bullet_collision_world; -static rodeo_collision_2d_world_t enemy_bullet_collision_world; +//static rodeo_collision_2d_world_t bullet_collision_world; +static rodeo_collision_2d_world_t player_bullet_collision_world = {0}; +static rodeo_collision_2d_world_t enemy_bullet_collision_world = {0}; +static cvec_bullet_t bullets = {0}; void init_bullets(void) @@ -20,6 +22,36 @@ deinit_bullets(void) rodeo_texture_2d_destroy(&bullet_texture); } +bullet_t * +spawn_bullet( + float x, + float y, + float dx, + float dy, + rodeo_collision_2d_world_t *bullet_world, + rodeo_color_RGBAFloat_t color +) +{ + bullet_t bullet = { + .color = color + }; + bullet.id = rodeo_collision_2d_world_item_create( + bullet_world, + (rodeo_collision_2d_world_item_t){ + .x = x, + .y = y, + .dx = dx, + .dy = dy, + .width = 25.0f, + .height = 25.0f + } + )->id; + return cvec_bullet_t_push( + &bullets, + bullet + ); +} + void move_bullets(void) { @@ -36,11 +68,25 @@ move_bullets(void) } +bullet_t* +get_bullet_by_id( + world_id id +) +{ + c_foreach(i, cvec_bullet_t, bullets) { + if (i.ref->id.id == id.id) { + return i.ref; + } + } + return NULL; +} + void draw_bullets(void) { c_foreach(i, cvec_collision_2d_world_item, player_bullet_collision_world) { cvec_collision_2d_world_item_value *bullet = i.ref; + bullet_t *bullet_obj = get_bullet_by_id(i.ref->id); rodeo_texture_2d_draw( &(rodeo_rectangle_t){ .x = bullet->x, @@ -54,12 +100,13 @@ draw_bullets(void) .width = 25, .height = 25 }, - NULL, + &bullet_obj->color, &bullet_texture ); } c_foreach(i, cvec_collision_2d_world_item, enemy_bullet_collision_world) { cvec_collision_2d_world_item_value *bullet = i.ref; + bullet_t *bullet_obj = get_bullet_by_id(i.ref->id); rodeo_texture_2d_draw( &(rodeo_rectangle_t){ .x = bullet->x, @@ -73,12 +120,13 @@ draw_bullets(void) .width = 25, .height = 25 }, - NULL, + &bullet_obj->color, &bullet_texture ); } } + rodeo_collision_2d_world_t * get_enemy_bullet_world(void) { |
