diff options
| author | realtradam <[email protected]> | 2023-05-26 15:32:06 -0400 |
|---|---|---|
| committer | realtradam <[email protected]> | 2023-05-26 15:32:06 -0400 |
| commit | a6fe7c8e0f2b61c3950c7c8a6f6539f29875d39c (patch) | |
| tree | 8d5c1dfd69b2bd12a97c4f194dda8fe822bc0d87 | |
| parent | d362dd45a187e4f281751410b82faf1cf0e1dfbf (diff) | |
| parent | d98b5f336a4dc1c50e2b939a0f34fdf4896a48b6 (diff) | |
| download | TOJam2023-a6fe7c8e0f2b61c3950c7c8a6f6539f29875d39c.tar.gz TOJam2023-a6fe7c8e0f2b61c3950c7c8a6f6539f29875d39c.zip | |
merge
| -rw-r--r-- | CMakeLists.txt | 1 | ||||
| -rw-r--r-- | assets/enemy.png | bin | 0 -> 1247 bytes | |||
| -rw-r--r-- | src/enemies.c | 79 | ||||
| -rw-r--r-- | src/enemies.h | 41 | ||||
| -rw-r--r-- | src/main.c | 9 |
5 files changed, 130 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index e2a5a1c..26ac31b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ add_executable(${PROJECT_NAME} "src/input.c" "src/player.c" "src/bullet.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..8c1f71c --- /dev/null +++ b/src/enemies.c @@ -0,0 +1,79 @@ +#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 + ); + } +} + +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) +{ + return collision_enemies_world; +} + +cvec_enemy_t +get_enemies_cvec(void) +{ + return enemies; +} diff --git a/src/enemies.h b/src/enemies.h new file mode 100644 index 0000000..0b0d908 --- /dev/null +++ b/src/enemies.h @@ -0,0 +1,41 @@ +#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); + +enemy_t* +get_enemy_by_id( + world_id id +); + +rodeo_collision_2d_world_t +get_enemies_world(void); + +cvec_enemy_t +get_enemies_cvec(void); @@ -4,6 +4,7 @@ #include "input.h" #include "player.h" #include "bullet.h" +#include "enemies.h" #include "rodeo/collision.h" cstr renderer; @@ -169,6 +170,7 @@ main_loop(void) ); // debug test for collisions + /* 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]); @@ -180,10 +182,12 @@ main_loop(void) ); } } + */ move_bullets(); draw_bullets(); draw_player(); + draw_enemies(); rodeo_debug_text_draw( 1, @@ -242,6 +246,7 @@ main(void) world_orc = rodeo_collision_2d_world_create(); world_other = rodeo_collision_2d_world_create(); + /* rodeo_collision_2d_world_item_t test_collision_params = { .x = 320, .y = 240, @@ -256,12 +261,15 @@ main(void) .height = orc_size[1] }; box_collision_ids[1] = rodeo_collision_2d_world_item_create(&world_orc, test2_collision_params)->id; + */ 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_bullets(); init_player(); + init_enemies(); + spawn_enemy(240, 240); rodeo_mainLoop_run( main_loop @@ -272,6 +280,7 @@ main(void) rodeo_collision_2d_world_destroy(&world_orc); rodeo_collision_2d_world_destroy(&world_other); + deinit_enemies(); } unregister_inputs(); |
