From 7c63fc3d9c1e297adfa04c3bd2d3942752cec63f Mon Sep 17 00:00:00 2001 From: arngo <27396817+arngo@users.noreply.github.com> Date: Fri, 26 May 2023 14:44:19 -0400 Subject: add enemy spawning --- CMakeLists.txt | 1 + assets/enemy.png | Bin 0 -> 1247 bytes src/enemies.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/enemies.h | 31 +++++++++++++++++++++++++++++++ src/main.c | 13 +++++++++++-- 5 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 assets/enemy.png create mode 100644 src/enemies.c create mode 100644 src/enemies.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 68fc172..8bae61a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,7 @@ project(demo add_executable(${PROJECT_NAME} "src/main.c" "src/input.c" + "src/enemies.c" ) set_property(TARGET ${PROJECT_NAME} PROPERTY C_STANDARD 99) diff --git a/assets/enemy.png b/assets/enemy.png new file mode 100644 index 0000000..b9732ac Binary files /dev/null and b/assets/enemy.png differ diff --git a/src/enemies.c b/src/enemies.c new file mode 100644 index 0000000..72ce9ba --- /dev/null +++ b/src/enemies.c @@ -0,0 +1,54 @@ +#include "enemies.h" + +static rodeo_collision_2d_world_t collision_enemies_world; +static rodeo_texture_2d_t enemy_texture; +static cvec_enemy_t enemies; + +void +init_enemies(void) +{ + collision_enemies_world = rodeo_collision_2d_world_create(); + enemies = cvec_enemy_t_init(); + enemy_texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/enemy.png")); +} + +void +deinit_enemies(void) +{ + rodeo_collision_2d_world_destroy(&collision_enemies_world); + cvec_enemy_t_drop(&enemies); + rodeo_texture_2d_destroy(&enemy_texture); +} + +enemy_t* +spawn_enemy(float x, float y) +{ + rodeo_collision_2d_world_item_t enemy_collision = (rodeo_collision_2d_world_item_t){.x = x, .y = y, .width = 26, .height = 38}; + world_id id = rodeo_collision_2d_world_item_create(&collision_enemies_world, enemy_collision)->id; + return cvec_enemy_t_push(&enemies, (enemy_t){.hp = 100.0, .id = id}); +} + +void +draw_enemies(void) +{ + c_foreach(i, cvec_collision_2d_world_item, collision_enemies_world) { + cvec_collision_2d_world_item_value *enemy = i.ref; + + rodeo_texture_2d_draw( + &(rodeo_rectangle_t){ + .x = enemy->x, + .y = enemy->y, + .width = enemy->width, + .height = enemy->height, + }, + &(rodeo_rectangle_t){ + .x = 0, + .y = 0, + .width = 26, + .height = 38 + }, + NULL, + &enemy_texture + ); + } +} diff --git a/src/enemies.h b/src/enemies.h new file mode 100644 index 0000000..6d55ef5 --- /dev/null +++ b/src/enemies.h @@ -0,0 +1,31 @@ +#pragma once +#include "rodeo/collision.h" +#include "rodeo.h" + +typedef +struct +{ + float hp; + world_id id; +} enemy_t; + +#define i_val enemy_t +#define i_opt c_no_cmp +#include "stc/cvec.h" + + +void +init_enemies(void); + +void +deinit_enemies(void); + +enemy_t* +spawn_enemy( + float x, + float y +); + +void +draw_enemies(void); + diff --git a/src/main.c b/src/main.c index 1060f9e..b4013d1 100644 --- a/src/main.c +++ b/src/main.c @@ -2,6 +2,7 @@ #include "rodeo.h" #include #include "input.h" +#include "enemies.h" #include "rodeo/collision.h" cstr renderer; @@ -198,7 +199,7 @@ main_loop(void) orc_collision_item->dx = *(float*)units_move_right_input(NULL, NULL) + *(float*)units_move_left_input(NULL, NULL); orc_collision_item->dy = *(float*)units_move_down_input(NULL, NULL) + *(float*)units_move_up_input(NULL, NULL); - rodeo_collision_2d_world_compare_self(&world_orc, collision_resolve); + //rodeo_collision_2d_world_compare_self(&world_orc, collision_resolve); if(*(bool*)play_sound_input(NULL, NULL)) { @@ -252,7 +253,7 @@ main_loop(void) &pink_clear ); - + /* for(uint64_t i = 0; i < (sizeof(box_collision_ids) / sizeof(box_collision_ids[0])); ++i) { rodeo_collision_2d_world_item_t *box = rodeo_collision_2d_world_item_get_by_id(box_collision_ids[i]); @@ -264,8 +265,10 @@ main_loop(void) ); } } + */ draw_bullets(); + draw_enemies(); for(uint64_t i = 0; i < num_of_units; ++i) { @@ -387,6 +390,7 @@ main(void) }; orc_collision_id = rodeo_collision_2d_world_item_create(&world_orc, orc_collision_params)->id; + /* rodeo_collision_2d_world_item_t test_collision_params = { .x = 320, .y = 240, @@ -401,12 +405,16 @@ main(void) .height = orc_size[1] }; box_collision_ids[1] = rodeo_collision_2d_world_item_create(&world_orc, test2_collision_params)->id; + */ texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/orc.png")); bullet_texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/bullet.png")); scratch = rodeo_audio_sound_create_from_path(cstr_lit("assets/sample.wav")); music = rodeo_audio_music_create_from_path(cstr_lit("assets/music.ogg")); + init_enemies(); + spawn_enemy(240, 240); + rodeo_mainLoop_run( main_loop ); @@ -415,6 +423,7 @@ main(void) rodeo_collision_2d_world_destroy(&world_orc); rodeo_collision_2d_world_destroy(&world_other); + deinit_enemies(); } unregister_inputs(); -- cgit v1.2.3 From c4030841484bec7d57c8c092a14332d9bbfa9576 Mon Sep 17 00:00:00 2001 From: arngo <27396817+arngo@users.noreply.github.com> Date: Fri, 26 May 2023 15:05:21 -0400 Subject: add getters for enemies vectors --- src/enemies.c | 12 ++++++++++++ src/enemies.h | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/src/enemies.c b/src/enemies.c index 72ce9ba..495e2a2 100644 --- a/src/enemies.c +++ b/src/enemies.c @@ -52,3 +52,15 @@ draw_enemies(void) ); } } + +rodeo_collision_2d_world_t +get_enemies_world(void) +{ + return collision_enemies_world; +} + +cvec_enemy_t +get_enemies_cvec(void) +{ + return enemies; +} diff --git a/src/enemies.h b/src/enemies.h index 6d55ef5..39811bb 100644 --- a/src/enemies.h +++ b/src/enemies.h @@ -29,3 +29,9 @@ spawn_enemy( void draw_enemies(void); + +rodeo_collision_2d_world_t +get_enemies_world(void); + +cvec_enemy_t +get_enemies_cvec(void); -- cgit v1.2.3 From d98b5f336a4dc1c50e2b939a0f34fdf4896a48b6 Mon Sep 17 00:00:00 2001 From: arngo <27396817+arngo@users.noreply.github.com> Date: Fri, 26 May 2023 15:18:52 -0400 Subject: add function to get enemy from id --- src/enemies.c | 13 +++++++++++++ src/enemies.h | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/src/enemies.c b/src/enemies.c index 495e2a2..8c1f71c 100644 --- a/src/enemies.c +++ b/src/enemies.c @@ -53,6 +53,19 @@ draw_enemies(void) } } +enemy_t* +get_enemy_by_id( + world_id id +) +{ + c_foreach(i, cvec_enemy_t, enemies) { + if (i.ref->id.id == id.id) { + return i.ref; + } + } + return NULL; +} + rodeo_collision_2d_world_t get_enemies_world(void) { diff --git a/src/enemies.h b/src/enemies.h index 39811bb..0b0d908 100644 --- a/src/enemies.h +++ b/src/enemies.h @@ -29,6 +29,10 @@ spawn_enemy( void draw_enemies(void); +enemy_t* +get_enemy_by_id( + world_id id +); rodeo_collision_2d_world_t get_enemies_world(void); -- cgit v1.2.3