diff options
Diffstat (limited to 'src/bullet.c')
| -rw-r--r-- | src/bullet.c | 79 |
1 files changed, 30 insertions, 49 deletions
diff --git a/src/bullet.c b/src/bullet.c index c1a3f36..fdd4b3a 100644 --- a/src/bullet.c +++ b/src/bullet.c @@ -7,14 +7,16 @@ static rodeo_gfx_texture_2d_t bullet_texture; static rodeo_audio_sound_t pop_sound; -//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 rodeo_collision_2d_collection_t bullet_collision_world; +static rodeo_collision_2d_collection_t player_bullet_collision_world = {0}; +static rodeo_collision_2d_collection_t enemy_bullet_collision_world = {0}; static cvec_bullet_t bullets = {0}; void init_bullets(void) { + player_bullet_collision_world = rodeo_collision_2d_collection_create(); + enemy_bullet_collision_world = rodeo_collision_2d_collection_create(); bullet_texture = rodeo_gfx_texture_2d_create_from_path(cstr_lit("assets/bullet.png")); pop_sound = rodeo_audio_sound_create_from_path(cstr_lit("assets/pop.wav")); } @@ -24,8 +26,8 @@ deinit_bullets(void) { rodeo_gfx_texture_2d_destroy(bullet_texture); rodeo_audio_sound_destroy(pop_sound); - rodeo_collision_2d_world_destroy(&player_bullet_collision_world); - rodeo_collision_2d_world_destroy(&enemy_bullet_collision_world); + rodeo_collision_2d_collection_destroy(player_bullet_collision_world); + rodeo_collision_2d_collection_destroy(enemy_bullet_collision_world); cvec_bullet_t_drop(&bullets); } @@ -44,16 +46,16 @@ spawn_bullet( float y, float dx, float dy, - rodeo_collision_2d_world_t *bullet_world, + rodeo_collision_2d_collection_t bullet_world, rodeo_color_RGBAFloat_t color ) { bullet_t bullet = { .color = color }; - bullet.id = rodeo_collision_2d_world_item_create( + bullet.item = rodeo_collision_2d_item_create( bullet_world, - (rodeo_collision_2d_world_item_t){ + (rodeo_collision_2d_item_data_t){ .rect = { .x = x, .y = y, @@ -63,7 +65,7 @@ spawn_bullet( .dx = dx, .dy = dy, } - )->id; + ); return cvec_bullet_t_push( &bullets, bullet @@ -73,26 +75,20 @@ spawn_bullet( void move_bullets(void) { - c_foreach(i, cvec_collision_2d_world_item, player_bullet_collision_world) { - cvec_collision_2d_world_item_value *bullet = i.ref; - bullet->rect.x += bullet->dx; - bullet->rect.y += bullet->dy; - } - c_foreach(i, cvec_collision_2d_world_item, enemy_bullet_collision_world) { - cvec_collision_2d_world_item_value *bullet = i.ref; + c_foreach(i, cvec_bullet_t, bullets) { + rodeo_collision_2d_item_data_t *bullet = *(i.ref->item.data_handle); bullet->rect.x += bullet->dx; bullet->rect.y += bullet->dy; } - } bullet_t* get_bullet_by_id( - world_id id + rodeo_collision_2d_item_id_t id ) { c_foreach(i, cvec_bullet_t, bullets) { - if (i.ref->id.id == id.id) { + if (i.ref->item.data_handle == id.self_handle) { return i.ref; } } @@ -102,24 +98,9 @@ get_bullet_by_id( 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_gfx_texture_2d_draw( - bullet->rect, - (rodeo_rectangle_t){ - .x = 0, - .y = 0, - .width = 25, - .height = 25 - }, - 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); + c_foreach(i, cvec_bullet_t, bullets) + { + rodeo_collision_2d_item_data_t *bullet = *(i.ref->item.data_handle); rodeo_gfx_texture_2d_draw( bullet->rect, (rodeo_rectangle_t){ @@ -128,23 +109,23 @@ draw_bullets(void) .width = 25, .height = 25 }, - bullet_obj->color, + i.ref->color, bullet_texture ); } } -rodeo_collision_2d_world_t * +rodeo_collision_2d_collection_t get_enemy_bullet_world(void) { - return &enemy_bullet_collision_world; + return enemy_bullet_collision_world; } -rodeo_collision_2d_world_t * +rodeo_collision_2d_collection_t get_player_bullet_world(void) { - return &player_bullet_collision_world; + return player_bullet_collision_world; } void @@ -155,21 +136,21 @@ bullet_destroy( bool player_is_moving = (*(float*)units_move_right_input(NULL, NULL) + *(float*)units_move_left_input(NULL, NULL)) != 0 || (*(float*)units_move_down_input(NULL, NULL) + *(float*)units_move_up_input(NULL, NULL)) != 0; - if (bullet->id.world == &player_bullet_collision_world || !player_is_moving || get_player_hp() <= 0) + if ((*bullet->item.data_handle)->id.collection.data == player_bullet_collision_world.data || !player_is_moving || get_player_hp() <= 0) { rodeo_audio_sound_play(pop_sound); } - rodeo_collision_2d_world_item_destroy_by_id(bullet->id); + rodeo_collision_2d_item_destroy(bullet->item); *bullet = *cvec_bullet_t_back(&bullets); cvec_bullet_t_pop(&bullets); } void bullet_wall_resolver( - rodeo_collision_2d_world_item_t *bullet_collision, - rodeo_collision_2d_world_item_t *wall_collision + rodeo_collision_2d_item_data_t *bullet_collision, + rodeo_collision_2d_item_data_t *wall_collision ) { - bullet_t *bullet= get_bullet_by_id(bullet_collision->id); + bullet_t *bullet = get_bullet_by_id(bullet_collision->id); if (bullet == NULL) { return; } bullet_destroy(bullet); } @@ -177,7 +158,7 @@ void bullet_wall_resolver( void detect_bullet_wall_collisions(void) { - rodeo_collision_2d_world_compare_other(&player_bullet_collision_world, get_wall_world(), bullet_wall_resolver); - rodeo_collision_2d_world_compare_other(&enemy_bullet_collision_world, get_wall_world(), bullet_wall_resolver); + rodeo_collision_2d_collection_compare_other(player_bullet_collision_world, get_wall_world(), bullet_wall_resolver); + rodeo_collision_2d_collection_compare_other(enemy_bullet_collision_world, get_wall_world(), bullet_wall_resolver); } |
