diff options
| author | arngo <[email protected]> | 2023-05-26 14:44:19 -0400 |
|---|---|---|
| committer | arngo <[email protected]> | 2023-05-26 14:44:19 -0400 |
| commit | 7c63fc3d9c1e297adfa04c3bd2d3942752cec63f (patch) | |
| tree | e2e534055e1fcd8f9eb23400caeddf087ce3fc5e | |
| parent | 34b136472bdef8411a5b7458bdb18fa3e417a3ac (diff) | |
| download | rodeo_sample_game-7c63fc3d9c1e297adfa04c3bd2d3942752cec63f.tar.gz rodeo_sample_game-7c63fc3d9c1e297adfa04c3bd2d3942752cec63f.zip | |
add enemy spawning
| -rw-r--r-- | CMakeLists.txt | 1 | ||||
| -rw-r--r-- | assets/enemy.png | bin | 0 -> 1247 bytes | |||
| -rw-r--r-- | src/enemies.c | 54 | ||||
| -rw-r--r-- | src/enemies.h | 31 | ||||
| -rw-r--r-- | src/main.c | 13 |
5 files changed, 97 insertions, 2 deletions
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 Binary files differnew file mode 100644 index 0000000..b9732ac --- /dev/null +++ b/assets/enemy.png 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); + @@ -2,6 +2,7 @@ #include "rodeo.h" #include <inttypes.h> #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(); |
