summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2023-05-26 15:32:06 -0400
committerrealtradam <[email protected]>2023-05-26 15:32:06 -0400
commita6fe7c8e0f2b61c3950c7c8a6f6539f29875d39c (patch)
tree8d5c1dfd69b2bd12a97c4f194dda8fe822bc0d87
parentd362dd45a187e4f281751410b82faf1cf0e1dfbf (diff)
parentd98b5f336a4dc1c50e2b939a0f34fdf4896a48b6 (diff)
downloadTOJam2023-a6fe7c8e0f2b61c3950c7c8a6f6539f29875d39c.tar.gz
TOJam2023-a6fe7c8e0f2b61c3950c7c8a6f6539f29875d39c.zip
merge
-rw-r--r--CMakeLists.txt1
-rw-r--r--assets/enemy.pngbin0 -> 1247 bytes
-rw-r--r--src/enemies.c79
-rw-r--r--src/enemies.h41
-rw-r--r--src/main.c9
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
new file mode 100644
index 0000000..b9732ac
--- /dev/null
+++ b/assets/enemy.png
Binary files differ
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);
diff --git a/src/main.c b/src/main.c
index 4e00f8b..d928615 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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();