diff options
| m--------- | external/RodeoKit | 0 | ||||
| -rw-r--r-- | src/bullet.c | 79 | ||||
| -rw-r--r-- | src/bullet.h | 10 | ||||
| -rw-r--r-- | src/enemies.c | 117 | ||||
| -rw-r--r-- | src/enemies.h | 10 | ||||
| -rw-r--r-- | src/main.c | 6 | ||||
| -rw-r--r-- | src/menu.c | 2 | ||||
| -rw-r--r-- | src/player.c | 52 | ||||
| -rw-r--r-- | src/player.h | 4 | ||||
| -rw-r--r-- | src/wall.c | 29 | ||||
| -rw-r--r-- | src/wall.h | 8 |
11 files changed, 157 insertions, 160 deletions
diff --git a/external/RodeoKit b/external/RodeoKit -Subproject 06a3fc95288b8301a3b872ec5b4e906240f76fe +Subproject 6c2fb4e1cf6866fb1a21fc2f940af5722abdeac 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); } diff --git a/src/bullet.h b/src/bullet.h index bf34af6..50b18b8 100644 --- a/src/bullet.h +++ b/src/bullet.h @@ -5,7 +5,7 @@ typedef struct { - world_id id; + rodeo_collision_2d_item_t item; rodeo_color_RGBAFloat_t color; } bullet_t; @@ -35,7 +35,7 @@ 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 ); @@ -44,16 +44,16 @@ move_bullets(void); bullet_t* get_bullet_by_id( - world_id id + rodeo_collision_2d_item_id_t id ); void draw_bullets(void); -rodeo_collision_2d_world_t * +rodeo_collision_2d_collection_t get_enemy_bullet_world(void); -rodeo_collision_2d_world_t * +rodeo_collision_2d_collection_t get_player_bullet_world(void); void diff --git a/src/enemies.c b/src/enemies.c index 69e23a8..4ba5d28 100644 --- a/src/enemies.c +++ b/src/enemies.c @@ -5,12 +5,12 @@ #include "bullet.h" #include "wall.h" -static rodeo_collision_2d_world_t collision_enemies_world = {0}; -static rodeo_collision_2d_world_t collision_ghosts_world = {0}; +static rodeo_collision_2d_collection_t collision_enemies_collection = {0}; +static rodeo_collision_2d_collection_t collision_ghosts_collection = {0}; //static rodeo_gfx_texture_2d_t hinotamatchi_texture; //static rodeo_gfx_texture_2d_t amonghost_texture; //static rodeo_gfx_texture_2d_t squid_texture; -static rodeo_gfx_texture_2d_t enemy_texture; +static rodeo_gfx_texture_2d_t enemy_texture = {0}; static cvec_enemy_t enemies = {0}; static cvec_enemy_t ghosts = {0}; static float spawn_cooldown = 0; @@ -20,7 +20,8 @@ static uint32_t ghost_count = 0; void init_enemies(void) { - //collision_enemies_world = rodeo_collision_2d_world_create(); + collision_enemies_collection = rodeo_collision_2d_collection_create(); + collision_ghosts_collection = rodeo_collision_2d_collection_create(); //enemies = cvec_enemy_t_init(); //squid_texture = rodeo_gfx_texture_2d_create_from_path(cstr_lit("assets/squid.png")); //hinotamatchi_texture = rodeo_gfx_texture_2d_create_from_path(cstr_lit("assets/hinotamatchi.png")); @@ -31,8 +32,8 @@ init_enemies(void) void deinit_enemies(void) { - rodeo_collision_2d_world_destroy(&collision_enemies_world); - rodeo_collision_2d_world_destroy(&collision_ghosts_world); + rodeo_collision_2d_collection_destroy(collision_enemies_collection); + rodeo_collision_2d_collection_destroy(collision_ghosts_collection); cvec_enemy_t_drop(&enemies); cvec_enemy_t_drop(&ghosts); //rodeo_gfx_texture_2d_destroy(&hinotamatchi_texture); @@ -71,7 +72,7 @@ spawn_enemy(float x, float y) { uint64_t rng = rodeo_random_uint64_get(); cvec_enemy_t *obj_world = &enemies; - rodeo_collision_2d_world_t *collision_world = &collision_enemies_world; + rodeo_collision_2d_collection_t collision_world = collision_enemies_collection; // debug to force specific enemies to spawn //rng = (rng % 2) ? enemy_weapon_fourcross : enemy_weapon_none; @@ -80,7 +81,7 @@ spawn_enemy(float x, float y) if(rng % 3 == enemy_weapon_basic) { obj_world = &ghosts; - collision_world = &collision_ghosts_world; + collision_world = collision_ghosts_collection; ghost_count++; } else @@ -88,11 +89,16 @@ spawn_enemy(float x, float y) enemy_count++; } - rodeo_collision_2d_world_item_t collision = (rodeo_collision_2d_world_item_t) + rodeo_collision_2d_item_data_t collision = (rodeo_collision_2d_item_data_t) { - .rect = { .x = x, .y = y, .width = 40, .height = 40 } + .rect = { + .x = x, + .y = y, + .width = 40, + .height = 40 + } }; - world_id id = rodeo_collision_2d_world_item_create(collision_world, collision)->id; + rodeo_collision_2d_item_t item = rodeo_collision_2d_item_create(collision_world, collision); return cvec_enemy_t_push( obj_world, @@ -105,7 +111,7 @@ spawn_enemy(float x, float y) .type = rng % 3, .cooldown = 0, }, - .id = id + .item = item }); } @@ -114,14 +120,14 @@ spawn_ghost(float x, float y) { uint64_t rng = rodeo_random_uint64_get(); cvec_enemy_t *obj_world = &enemies; - rodeo_collision_2d_world_t *collision_world = &collision_enemies_world; + rodeo_collision_2d_collection_t collision_world = collision_enemies_collection; rng = enemy_weapon_basic; if(rng % 3 == enemy_weapon_basic) { obj_world = &ghosts; - collision_world = &collision_ghosts_world; + collision_world = collision_ghosts_collection; ghost_count++; } else @@ -129,11 +135,11 @@ spawn_ghost(float x, float y) enemy_count++; } - rodeo_collision_2d_world_item_t collision = (rodeo_collision_2d_world_item_t) + rodeo_collision_2d_item_data_t collision = (rodeo_collision_2d_item_data_t) { .rect = { .x = x, .y = y, .width = 40, .height = 40 } }; - world_id id = rodeo_collision_2d_world_item_create(collision_world, collision)->id; + rodeo_collision_2d_item_t item = rodeo_collision_2d_item_create(collision_world, collision); return cvec_enemy_t_push( obj_world, @@ -146,16 +152,17 @@ spawn_ghost(float x, float y) .type = rng % 3, .cooldown = 0, }, - .id = id + .item = item }); } void -draw_enemy(cvec_collision_2d_world_item_value *enemy) +draw_enemy(rodeo_collision_2d_item_t enemy) { rodeo_color_RGBAFloat_t color; - enemy_t *enemy_obj = get_enemy_by_id(enemy->id); + enemy_t *enemy_obj = get_enemy_by_id((*enemy.data_handle)->id); + if(enemy_obj == NULL) { return; } switch(enemy_obj->weapon.type) { @@ -183,7 +190,7 @@ draw_enemy(cvec_collision_2d_world_item_value *enemy) } rodeo_gfx_texture_2d_draw( - enemy->rect, + (*enemy.data_handle)->rect, (rodeo_rectangle_t){ .x = 0 + (40 * (float)enemy_obj->weapon.type), .y = 0, @@ -199,18 +206,18 @@ draw_enemy(cvec_collision_2d_world_item_value *enemy) void draw_enemies(void) { - c_foreach(i, cvec_collision_2d_world_item, collision_enemies_world) { - draw_enemy(i.ref); + c_foreach(i, cvec_enemy_t, enemies) { + draw_enemy(i.ref->item); } - c_foreach(i, cvec_collision_2d_world_item, collision_ghosts_world) { - draw_enemy(i.ref); + c_foreach(i, cvec_enemy_t, ghosts) { + draw_enemy(i.ref->item); } } void enemy_overlap_resolver( - rodeo_collision_2d_world_item_t *a, - rodeo_collision_2d_world_item_t *b + rodeo_collision_2d_item_data_t *a, + rodeo_collision_2d_item_data_t *b ) { enemy_t *enemy_a = get_enemy_by_id(a->id); @@ -238,10 +245,10 @@ void move_enemies(void) { - rodeo_collision_2d_world_compare_self(get_enemies_world(), enemy_overlap_resolver); - rodeo_collision_2d_world_compare_self(get_ghosts_world(), enemy_overlap_resolver); + rodeo_collision_2d_collection_compare_self(get_enemies_world(), enemy_overlap_resolver); + rodeo_collision_2d_collection_compare_self(get_ghosts_world(), enemy_overlap_resolver); c_foreach(i, cvec_enemy_t, enemies) { - rodeo_collision_2d_world_item_t *enemy = rodeo_collision_2d_world_item_get_by_id(i.ref->id); + rodeo_collision_2d_item_data_t *enemy = (*i.ref->item.data_handle); if(enemy == NULL) { continue; @@ -252,7 +259,7 @@ move_enemies(void) enemy->dy = 0; } c_foreach(i, cvec_enemy_t, ghosts) { - rodeo_collision_2d_world_item_t *enemy = rodeo_collision_2d_world_item_get_by_id(i.ref->id); + rodeo_collision_2d_item_data_t *enemy = (*i.ref->item.data_handle); if(enemy == NULL) { continue; @@ -284,8 +291,8 @@ enemies_attempt_weapon_fire(void) { i.ref->weapon.cooldown += i.ref->weapon.firerate; //weapon spawn logic - cvec_collision_2d_world_item_value *player = get_player_position(); - cvec_collision_2d_world_item_value *enemy = rodeo_collision_2d_world_item_get_by_id(i.ref->id); + rodeo_collision_2d_item_data_t *player = get_player_position(); + rodeo_collision_2d_item_data_t *enemy = (*i.ref->item.data_handle); vec2 dest; glm_vec2_sub( (vec2){ player->rect.x, player->rect.y }, @@ -331,8 +338,8 @@ enemies_attempt_weapon_fire(void) { i.ref->weapon.cooldown += i.ref->weapon.firerate; //weapon spawn logic - cvec_collision_2d_world_item_value *player = get_player_position(); - cvec_collision_2d_world_item_value *enemy = rodeo_collision_2d_world_item_get_by_id(i.ref->id); + rodeo_collision_2d_item_data_t *player = get_player_position(); + rodeo_collision_2d_item_data_t *enemy = (*i.ref->item.data_handle); vec2 dest; glm_vec2_sub( (vec2){ player->rect.x, player->rect.y }, @@ -446,32 +453,32 @@ enemies_attempt_weapon_fire(void) enemy_t* get_enemy_by_id( - world_id id + rodeo_collision_2d_item_id_t id ) { cvec_enemy_t *enemy_vec = &enemies; - if (id.world == &collision_ghosts_world) + if (id.collection.data == collision_ghosts_collection.data) { enemy_vec = &ghosts; } c_foreach(i, cvec_enemy_t, *enemy_vec) { - if (i.ref->id.id == id.id) { + if (i.ref->item.data_handle == id.self_handle) { return i.ref; } } return NULL; } -rodeo_collision_2d_world_t * +rodeo_collision_2d_collection_t get_enemies_world(void) { - return &collision_enemies_world; + return collision_enemies_collection; } -rodeo_collision_2d_world_t * +rodeo_collision_2d_collection_t get_ghosts_world(void) { - return &collision_ghosts_world; + return collision_ghosts_collection; } cvec_enemy_t @@ -484,6 +491,7 @@ void enemy_destroy( cvec_enemy_t_value* enemy ) { + if (enemy == NULL) { return; } cvec_enemy_t *enemy_vec = &enemies; if(enemy->weapon.type == enemy_weapon_basic) { @@ -494,7 +502,7 @@ void enemy_destroy( { enemy_count--; } - rodeo_collision_2d_world_item_destroy_by_id(enemy->id); + rodeo_collision_2d_item_destroy(enemy->item); *enemy = *cvec_enemy_t_back(enemy_vec); if(cvec_enemy_t_size(enemy_vec) > 0) { @@ -505,11 +513,12 @@ void enemy_destroy( void damage_enemy_resolver( - rodeo_collision_2d_world_item_t *enemy_collision, - rodeo_collision_2d_world_item_t *bullet_collision + rodeo_collision_2d_item_data_t *enemy_collision, + rodeo_collision_2d_item_data_t *bullet_collision ) { bullet_t *bullet = get_bullet_by_id(bullet_collision->id); + if(bullet == NULL) { return; } bullet_destroy(bullet); enemy_t *enemy = get_enemy_by_id(enemy_collision->id); if(enemy == NULL) { return; } @@ -522,18 +531,18 @@ damage_enemy_resolver( void detect_bullet_enemy_collisions(void) { - rodeo_collision_2d_world_compare_other(&collision_ghosts_world, get_player_bullet_world(), damage_enemy_resolver); - rodeo_collision_2d_world_compare_other(&collision_enemies_world, get_player_bullet_world(), damage_enemy_resolver); + rodeo_collision_2d_collection_compare_other(collision_ghosts_collection, get_player_bullet_world(), damage_enemy_resolver); + rodeo_collision_2d_collection_compare_other(collision_enemies_collection, get_player_bullet_world(), damage_enemy_resolver); } void -group_follow_target(rodeo_collision_2d_world_item_t *target) +group_follow_target(rodeo_collision_2d_item_t target) { cvec_enemy_t enemy_arry[2] = { enemies, ghosts }; for(int32_t j = 0; j < 2; ++j) { c_foreach(i, cvec_enemy_t, enemy_arry[j]) { - rodeo_collision_2d_world_item_t *enemy = rodeo_collision_2d_world_item_get_by_id(i.ref->id); + rodeo_collision_2d_item_data_t *enemy = (*i.ref->item.data_handle); /* float direction[2] = { target->x - enemy->x, @@ -551,14 +560,16 @@ group_follow_target(rodeo_collision_2d_world_item_t *target) enemy->rect.y }; vec2 dest = { - target->rect.x, - target->rect.y + (*target.data_handle)->rect.x, + (*target.data_handle)->rect.y }; vec2 direction; glm_vec2_sub(dest, source, direction); glm_vec2_normalize(direction); vec2 result; - glm_vec2_scale(direction, get_enemy_by_id(enemy->id)->move_speed, result); + enemy_t *enemy_obj = get_enemy_by_id(enemy->id); + if(enemy_obj == NULL) { continue; } + glm_vec2_scale(direction, enemy_obj->move_speed, result); enemy->dx = result[0]; enemy->dy = result[1]; @@ -572,7 +583,7 @@ random_enemy_create( ) { float spawn_coords[2]; - cvec_collision_2d_world_item_value* p = get_player_position(); + rodeo_collision_2d_item_data_t *p = get_player_position(); float player_coords[2] = {p->rect.x, p->rect.y}; float player_radius = p->rect.height * 2 + 100; for (int i = 0; i < 10; ++i) { @@ -606,5 +617,5 @@ attempt_random_enemy_spawn( void detect_enemy_wall_collisions(void) { - rodeo_collision_2d_world_compare_other(&collision_enemies_world, get_wall_world(), moving_wall_resolver); + rodeo_collision_2d_collection_compare_other(collision_enemies_collection, get_wall_world(), moving_wall_resolver); } diff --git a/src/enemies.h b/src/enemies.h index 4e7a5ef..06bc6ec 100644 --- a/src/enemies.h +++ b/src/enemies.h @@ -24,7 +24,7 @@ typedef struct { float hp; - world_id id; + rodeo_collision_2d_item_t item; enemy_ai_behavior behavior; float move_speed; struct enemy_weapon @@ -81,13 +81,13 @@ move_enemies(void); enemy_t* get_enemy_by_id( - world_id id + rodeo_collision_2d_item_id_t id ); -rodeo_collision_2d_world_t * +rodeo_collision_2d_collection_t get_enemies_world(void); -rodeo_collision_2d_world_t * +rodeo_collision_2d_collection_t get_ghosts_world(void); cvec_enemy_t @@ -101,7 +101,7 @@ void detect_bullet_enemy_collisions(void); void -group_follow_target(rodeo_collision_2d_world_item_t *target); +group_follow_target(rodeo_collision_2d_item_t target); enemy_t* random_enemy_create( @@ -49,7 +49,11 @@ main_loop(void) } // run enemy movement ai - group_follow_target(get_player_position()); + group_follow_target( + (rodeo_collision_2d_item_t){ + .data_handle = get_player_position()->id.self_handle + } + ); detect_bullet_enemy_collisions(); detect_bullet_wall_collisions(); @@ -97,7 +97,7 @@ parse_menu_input(void) } else if (menu_state == menu_state_main) { - init_game_systems(); + //init_game_systems(); menu_state = menu_state_inactive; } } diff --git a/src/player.c b/src/player.c index 8c4a855..98d32d2 100644 --- a/src/player.c +++ b/src/player.c @@ -21,7 +21,7 @@ struct player_t int32_t hp; float damage_timer; //ms float damage_cooldown_rate; - world_id collision_id; + rodeo_collision_2d_item_t item; move_state_t move_state; struct player_weapon { @@ -39,7 +39,7 @@ static rodeo_audio_sound_t bubbles_sound; // 61 standing // 20-60 mid iar -static rodeo_collision_2d_world_t player_collision_world = {0}; +static rodeo_collision_2d_collection_t player_collision_collection = {0}; static aim_position_t aim_position; static float orc_size[] = {13.0f * 2.0f, 19.0f * 2.0f}; @@ -53,17 +53,16 @@ init_player(void) player.aim_texture = rodeo_gfx_texture_2d_create_from_path(cstr_lit("assets/aim.png")); player.heart_texture = rodeo_gfx_texture_2d_create_from_path(cstr_lit("assets/heart.png")); player.sprite.config.texture = player.texture; - //player_collision_world = rodeo_collision_2d_world_create(); - player_collision_world = (rodeo_collision_2d_world_t){0}; - player.collision_id = rodeo_collision_2d_world_item_create( - &player_collision_world, - (rodeo_collision_2d_world_item_t){ + player_collision_collection = rodeo_collision_2d_collection_create(); + player.item = rodeo_collision_2d_item_create( + player_collision_collection, + (rodeo_collision_2d_item_data_t){ .rect = { .width = orc_size[0], .height = orc_size[1] } } - )->id; + ); player.sprite = (sprite_t){ .config = { .texture = player.texture, @@ -82,8 +81,8 @@ void deinit_player(void) { rodeo_gfx_texture_2d_destroy(player.texture); - rodeo_collision_2d_world_destroy(&player_collision_world); - //player_collision_world = (rodeo_collision_2d_world_t){0}; + rodeo_collision_2d_collection_destroy(player_collision_collection); + //player_collision_collection = (rodeo_collision_2d_world_t){0}; rodeo_audio_sound_destroy(bubbles_sound); } @@ -94,7 +93,7 @@ reset_player(void) player.hp = 100; aim_position.x = 101; aim_position.y = 100; - cvec_collision_2d_world_item_value *player_position = get_player_position(); + rodeo_collision_2d_item_data_t *player_position = get_player_position(); player_position->dx = 0; player_position->dy = 0; player_position->rect.x = 630.0f; @@ -110,7 +109,7 @@ draw_player(void) { transparency = 0.33f; } - cvec_collision_2d_world_item_value *player_position = rodeo_collision_2d_world_item_get_by_id(player.collision_id); + rodeo_collision_2d_item_data_t *player_position = get_player_position(); const float scale = 0.25f; draw_aim(aim_position.x, aim_position.y, scale); rodeo_gfx_texture_2d_draw( @@ -152,7 +151,7 @@ draw_hp_bar(void) void parse_player_input(void) { - cvec_collision_2d_world_item_value *player_position = rodeo_collision_2d_world_item_get_by_id(player.collision_id); + rodeo_collision_2d_item_data_t *player_position = get_player_position(); bool reset_movement = true; units_move_up_input(NULL, &reset_movement); units_move_down_input(NULL, &reset_movement); @@ -205,7 +204,7 @@ move_player(void) rodeo_audio_sound_play(bubbles_sound); } - cvec_collision_2d_world_item_value *player_position = rodeo_collision_2d_world_item_get_by_id(player.collision_id); + rodeo_collision_2d_item_data_t *player_position = get_player_position(); player_position->rect.x += player_position->dx; player_position->dx = 0; player_position->rect.y += player_position->dy; @@ -214,7 +213,7 @@ move_player(void) } void -player_shoot(rodeo_collision_2d_world_t *bullet_collision_world) +player_shoot(rodeo_collision_2d_collection_t bullet_collision_world) { if(player.weapon.cooldown > 0) @@ -226,7 +225,7 @@ player_shoot(rodeo_collision_2d_world_t *bullet_collision_world) while(player.weapon.cooldown <= 0) { player.weapon.cooldown += player.weapon.firerate; - cvec_collision_2d_world_item_value *player_position = rodeo_collision_2d_world_item_get_by_id(player.collision_id); + rodeo_collision_2d_item_data_t *player_position = get_player_position(); vec2 direction_vec; @@ -267,8 +266,8 @@ player_shoot(rodeo_collision_2d_world_t *bullet_collision_world) } void player_enemy_resolver( - rodeo_collision_2d_world_item_t *player_collision, - rodeo_collision_2d_world_item_t *enemy_collision + rodeo_collision_2d_item_data_t *player_collision, + rodeo_collision_2d_item_data_t *enemy_collision ) { if (player.hp <= 0) { @@ -297,8 +296,8 @@ void player_enemy_resolver( } void player_bullet_resolver( - rodeo_collision_2d_world_item_t *player_collision, - rodeo_collision_2d_world_item_t *bullet_collision + rodeo_collision_2d_item_data_t *player_collision, + rodeo_collision_2d_item_data_t *bullet_collision ) { if (player.hp <= 0) { @@ -330,26 +329,27 @@ void detect_player_enemy_collisions(void) { player.damage_timer += rodeo_gfx_frame_time_get(); - rodeo_collision_2d_world_compare_other(&player_collision_world, get_enemies_world(), player_enemy_resolver); - rodeo_collision_2d_world_compare_other(&player_collision_world, get_enemy_bullet_world(), player_bullet_resolver); + rodeo_collision_2d_collection_compare_other(player_collision_collection, get_enemies_world(), player_enemy_resolver); + rodeo_collision_2d_collection_compare_other(player_collision_collection, get_ghosts_world(), player_enemy_resolver); + rodeo_collision_2d_collection_compare_other(player_collision_collection, get_enemy_bullet_world(), player_bullet_resolver); } void detect_player_wall_collisions(void) { - rodeo_collision_2d_world_compare_other(&player_collision_world, get_wall_world(), moving_wall_resolver); + rodeo_collision_2d_collection_compare_other(player_collision_collection, get_wall_world(), moving_wall_resolver); } -cvec_collision_2d_world_item_value * +rodeo_collision_2d_item_data_t * get_player_position(void) { - return rodeo_collision_2d_world_item_get_by_id(player.collision_id); + return *player.item.data_handle; } void update_aim_position(void) { - cvec_collision_2d_world_item_value *player_position = get_player_position(); + rodeo_collision_2d_item_data_t *player_position = get_player_position(); vec2 player_position_vec = { player_position->rect.x, player_position->rect.y }; vec2 aim_position_vec = { aim_position.x, aim_position.y }; float distance = glm_vec2_distance2(player_position_vec, aim_position_vec); diff --git a/src/player.h b/src/player.h index a69b25f..0a498ae 100644 --- a/src/player.h +++ b/src/player.h @@ -50,7 +50,7 @@ void parse_player_input(void); void -player_shoot(rodeo_collision_2d_world_t *bullet_collision_world); +player_shoot(rodeo_collision_2d_collection_t bullet_collision_world); void detect_player_enemy_collisions(void); @@ -58,7 +58,7 @@ detect_player_enemy_collisions(void); void detect_player_wall_collisions(void); -cvec_collision_2d_world_item_value * +rodeo_collision_2d_item_data_t * get_player_position(void); void @@ -1,7 +1,7 @@ #include "wall.h" #include "rodeo.h" -static rodeo_collision_2d_world_t collision_wall_world; +static rodeo_collision_2d_collection_t collision_wall_world; rodeo_gfx_texture_2d_t wall_texture; rodeo_gfx_texture_2d_t floor_texture; rodeo_gfx_texture_2d_t goat_texture; @@ -16,7 +16,7 @@ init_wall(void) logo_texture = rodeo_gfx_texture_2d_create_from_path(cstr_lit("assets/tojam2023_tagline_header_clear.png")); uint16_t window_width = 1600; uint16_t window_height = 900; - collision_wall_world = rodeo_collision_2d_world_create(); + collision_wall_world = rodeo_collision_2d_collection_create(); float walls[][4] = { {0, -10, window_width, 10}, {0, window_height, window_width, 10}, @@ -46,20 +46,20 @@ init_wall(void) void deinit_wall(void) { - rodeo_collision_2d_world_destroy(&collision_wall_world); + rodeo_collision_2d_collection_destroy(collision_wall_world); rodeo_gfx_texture_2d_destroy(wall_texture); rodeo_gfx_texture_2d_destroy(floor_texture); rodeo_gfx_texture_2d_destroy(goat_texture); rodeo_gfx_texture_2d_destroy(logo_texture); } -rodeo_collision_2d_world_t * +rodeo_collision_2d_collection_t get_wall_world(void) { - return &collision_wall_world; + return collision_wall_world; } -rodeo_collision_2d_world_item_t * +rodeo_collision_2d_item_t new_wall( float x, float y, @@ -67,9 +67,9 @@ new_wall( float height ) { - return rodeo_collision_2d_world_item_create( - &collision_wall_world, - (rodeo_collision_2d_world_item_t) + return rodeo_collision_2d_item_create( + collision_wall_world, + (rodeo_collision_2d_item_data_t) { .rect = { .x = x, @@ -86,7 +86,8 @@ coords_inside_wall( float y ) { - c_foreach(i, cvec_collision_2d_world_item, collision_wall_world) { + + c_foreach(i, cvec_collision_2d_item_data, collision_wall_world.data->collection) { if (x >= i.ref->rect.x && x <= i.ref->rect.x + i.ref->rect.width && y >= i.ref->rect.y && y <= i.ref->rect.y + i.ref->rect.height) { return true; @@ -97,12 +98,12 @@ coords_inside_wall( void moving_wall_resolver( - rodeo_collision_2d_world_item_t *obj_collision, - rodeo_collision_2d_world_item_t *wall_collision + rodeo_collision_2d_item_data_t *obj_collision, + rodeo_collision_2d_item_data_t *wall_collision ) { - rodeo_collision_2d_world_item_t *p = obj_collision; - rodeo_collision_2d_world_item_t *w = wall_collision; + rodeo_collision_2d_item_data_t *p = obj_collision; + rodeo_collision_2d_item_data_t *w = wall_collision; rodeo_rectangle_t step = { .x = p->rect.x + p->dx * rodeo_gfx_frame_time_get() / (1000.0f/60.0f), .y = p->rect.y + p->dy * rodeo_gfx_frame_time_get() / (1000.0f/60.0f), @@ -12,10 +12,10 @@ deinit_wall(void); deinit_wall() \ ) -rodeo_collision_2d_world_t * +rodeo_collision_2d_collection_t get_wall_world(void); -rodeo_collision_2d_world_item_t * +rodeo_collision_2d_item_t new_wall( float x, float y, @@ -31,8 +31,8 @@ coords_inside_wall( void moving_wall_resolver( - rodeo_collision_2d_world_item_t *obj_collision, - rodeo_collision_2d_world_item_t *wall_collision + rodeo_collision_2d_item_data_t *obj_collision, + rodeo_collision_2d_item_data_t *wall_collision ); void |
