summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorarngo <[email protected]>2023-05-26 14:44:19 -0400
committerarngo <[email protected]>2023-05-26 14:44:19 -0400
commit7c63fc3d9c1e297adfa04c3bd2d3942752cec63f (patch)
treee2e534055e1fcd8f9eb23400caeddf087ce3fc5e
parent34b136472bdef8411a5b7458bdb18fa3e417a3ac (diff)
downloadTOJam2023-7c63fc3d9c1e297adfa04c3bd2d3942752cec63f.tar.gz
TOJam2023-7c63fc3d9c1e297adfa04c3bd2d3942752cec63f.zip
add enemy spawning
-rw-r--r--CMakeLists.txt1
-rw-r--r--assets/enemy.pngbin0 -> 1247 bytes
-rw-r--r--src/enemies.c54
-rw-r--r--src/enemies.h31
-rw-r--r--src/main.c13
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
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..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 <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();