summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
m---------external/RodeoKit0
-rw-r--r--src/bullet.c79
-rw-r--r--src/bullet.h10
-rw-r--r--src/enemies.c117
-rw-r--r--src/enemies.h10
-rw-r--r--src/main.c6
-rw-r--r--src/menu.c2
-rw-r--r--src/player.c52
-rw-r--r--src/player.h4
-rw-r--r--src/wall.c29
-rw-r--r--src/wall.h8
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(
diff --git a/src/main.c b/src/main.c
index 1d679d3..84e9a74 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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();
diff --git a/src/menu.c b/src/menu.c
index 003de89..8806a0f 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -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
diff --git a/src/wall.c b/src/wall.c
index b62900d..a815fb6 100644
--- a/src/wall.c
+++ b/src/wall.c
@@ -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),
diff --git a/src/wall.h b/src/wall.h
index 945bc46..90e3ec6 100644
--- a/src/wall.h
+++ b/src/wall.h
@@ -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