summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2023-05-26 15:26:36 -0400
committerrealtradam <[email protected]>2023-05-26 15:26:36 -0400
commitd362dd45a187e4f281751410b82faf1cf0e1dfbf (patch)
treeae37720995a2fcb0b3ca11d2c751dda2c97b8257
parent34b136472bdef8411a5b7458bdb18fa3e417a3ac (diff)
downloadrodeo_sample_game-d362dd45a187e4f281751410b82faf1cf0e1dfbf.tar.gz
rodeo_sample_game-d362dd45a187e4f281751410b82faf1cf0e1dfbf.zip
seperate out bullets and player
-rw-r--r--CMakeLists.txt2
-rw-r--r--src/bullet.c92
-rw-r--r--src/bullet.h22
-rw-r--r--src/main.c169
-rw-r--r--src/player.c101
-rw-r--r--src/player.h23
6 files changed, 253 insertions, 156 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 68fc172..e2a5a1c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,6 +7,8 @@ project(demo
add_executable(${PROJECT_NAME}
"src/main.c"
"src/input.c"
+ "src/player.c"
+ "src/bullet.c"
)
set_property(TARGET ${PROJECT_NAME} PROPERTY C_STANDARD 99)
diff --git a/src/bullet.c b/src/bullet.c
new file mode 100644
index 0000000..4fe6433
--- /dev/null
+++ b/src/bullet.c
@@ -0,0 +1,92 @@
+#include "rodeo.h"
+#include "input.h"
+#include "player.h"
+#include "rodeo/collision.h"
+
+static rodeo_texture_2d_t bullet_texture;
+static rodeo_collision_2d_world_t bullet_collision_world;
+static rodeo_collision_2d_world_t player_bullet_collision_world;
+static rodeo_collision_2d_world_t enemy_bullet_collision_world;
+
+void
+init_bullets(void)
+{
+ bullet_texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/bullet.png"));
+}
+
+void
+deinit_bullets(void)
+{
+ rodeo_texture_2d_destroy(&bullet_texture);
+}
+
+void
+move_bullets(void)
+{
+ c_foreach(i, cvec_collision_2d_world_item, player_bullet_collision_world) {
+ cvec_collision_2d_world_item_value *bullet = i.ref;
+ bullet->x += bullet->dx;
+ bullet->y += bullet->dy;
+ }
+ c_foreach(i, cvec_collision_2d_world_item, enemy_bullet_collision_world) {
+ cvec_collision_2d_world_item_value *bullet = i.ref;
+ bullet->x += bullet->dx;
+ bullet->y += bullet->dy;
+ }
+
+}
+
+void
+draw_bullets(void)
+{
+ c_foreach(i, cvec_collision_2d_world_item, player_bullet_collision_world) {
+ cvec_collision_2d_world_item_value *bullet = i.ref;
+ rodeo_texture_2d_draw(
+ &(rodeo_rectangle_t){
+ .x = bullet->x,
+ .y = bullet->y,
+ .width = bullet->width,
+ .height = bullet->height,
+ },
+ &(rodeo_rectangle_t){
+ .x = 0,
+ .y = 0,
+ .width = 25,
+ .height = 25
+ },
+ NULL,
+ &bullet_texture
+ );
+ }
+ c_foreach(i, cvec_collision_2d_world_item, enemy_bullet_collision_world) {
+ cvec_collision_2d_world_item_value *bullet = i.ref;
+ rodeo_texture_2d_draw(
+ &(rodeo_rectangle_t){
+ .x = bullet->x,
+ .y = bullet->y,
+ .width = bullet->width,
+ .height = bullet->height,
+ },
+ &(rodeo_rectangle_t){
+ .x = 0,
+ .y = 0,
+ .width = 25,
+ .height = 25
+ },
+ NULL,
+ &bullet_texture
+ );
+ }
+}
+
+rodeo_collision_2d_world_t *
+get_enemy_bullet_world(void)
+{
+ return &enemy_bullet_collision_world;
+}
+
+rodeo_collision_2d_world_t *
+get_player_bullet_world(void)
+{
+ return &player_bullet_collision_world;
+}
diff --git a/src/bullet.h b/src/bullet.h
new file mode 100644
index 0000000..f9b57ef
--- /dev/null
+++ b/src/bullet.h
@@ -0,0 +1,22 @@
+#pragma once
+
+#include "rodeo.h"
+#include "rodeo/collision.h"
+
+void
+init_bullets(void);
+
+void
+deinit_bullets(void);
+
+void
+move_bullets(void);
+
+void
+draw_bullets(void);
+
+rodeo_collision_2d_world_t *
+get_enemy_bullet_world(void);
+
+rodeo_collision_2d_world_t *
+get_player_bullet_world(void);
diff --git a/src/main.c b/src/main.c
index 1060f9e..4e00f8b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -2,6 +2,8 @@
#include "rodeo.h"
#include <inttypes.h>
#include "input.h"
+#include "player.h"
+#include "bullet.h"
#include "rodeo/collision.h"
cstr renderer;
@@ -18,15 +20,11 @@ struct
}
summon_t;
-summon_t summon_position = { .x = 100, .y = 100 };
summon_t box1_position = { .x = 100, .y = 100 };
summon_t box2_position = { .x = 100, .y = 100 };
float orc_size[] = {13.0f * 2.0f, 19.0f * 2.0f};
-rodeo_texture_2d_t texture;
-rodeo_texture_2d_t bullet_texture;
-
rodeo_vector2_t units[UINT16_MAX][2] = {0};
uint16_t num_of_units = 0;
@@ -74,79 +72,10 @@ const rodeo_color_RGBAFloat_t pink_clear =
rodeo_collision_2d_world_t world_orc;
rodeo_collision_2d_world_t world_other;
-rodeo_collision_2d_world_t collision_bullets_world;
world_id orc_collision_id;
world_id box_collision_ids[2] = { 0 };
-void
-player_shoot(void)
-{
- const uint32_t bullet_per_frame = 10;
- for(uint32_t i = 0; i < bullet_per_frame; ++i)
- {
- rodeo_collision_2d_world_item_create(
- &collision_bullets_world,
- (rodeo_collision_2d_world_item_t){
- .x = (float)summon_position.x - (orc_size[0] / 2.0f),
- .y = (float)summon_position.y - (orc_size[1] / 2.0f),
- .dx = (float)((int8_t)(rodeo_random_uint64_get() % 10) - 5),
- .dy = (float)((int8_t)(rodeo_random_uint64_get() % 10) - 5),
- .width = 25.0f,
- .height = 25.0f
- }
- );
- }
-}
-
-void
-draw_bullets(void)
-{
- c_foreach(i, cvec_collision_2d_world_item, collision_bullets_world) {
- cvec_collision_2d_world_item_value *bullet = i.ref;
- bullet->x += bullet->dx;
- bullet->y += bullet->dy;
-
- rodeo_texture_2d_draw(
- &(rodeo_rectangle_t){
- .x = bullet->x,
- .y = bullet->y,
- .width = bullet->width,
- .height = bullet->height,
- },
- &(rodeo_rectangle_t){
- .x = 0,
- .y = 0,
- .width = 25,
- .height = 25
- },
- NULL,
- &bullet_texture
- );
- }
-}
-
-
-void
-summon_units(void)
-{
- for(uint8_t i = 0; i < 10; ++i)
- {
- if((num_of_units < UINT16_MAX))//(rodeo_frame_perSecond_get() > 40))
- {
- num_of_units += 1;
- units[num_of_units - 1][0] = (rodeo_vector2_t){ {
- (float)summon_position.x - (orc_size[0] / 2.0f),
- (float)summon_position.y - (orc_size[1] / 2.0f)
- } };
- units[num_of_units - 1][1] = (rodeo_vector2_t){ {
- (float)((int8_t)(rodeo_random_uint64_get() % 10) - 5),
- (float)((int8_t)(rodeo_random_uint64_get() % 10) - 5)
- } };
- }
- }
-}
-
void collision_resolve(
rodeo_collision_2d_world_item_t *a,
rodeo_collision_2d_world_item_t *b
@@ -183,21 +112,8 @@ main_loop(void)
mrodeo_frame_do()
{
- bool reset_movement = true;
- units_move_up_input(NULL, &reset_movement);
- units_move_down_input(NULL, &reset_movement);
- units_move_left_input(NULL, &reset_movement);
- units_move_right_input(NULL, &reset_movement);
- summon_position.x += *(float*)units_move_right_input(NULL, NULL) + *(float*)units_move_left_input(NULL, NULL);
- summon_position.y += *(float*)units_move_down_input(NULL, NULL) + *(float*)units_move_up_input(NULL, NULL);
-
- rodeo_collision_2d_world_item_t* orc_collision_item = rodeo_collision_2d_world_item_get_by_id(orc_collision_id);
-
- orc_collision_item->x = summon_position.x;
- orc_collision_item->y = summon_position.y;
- 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);
-
+ parse_player_input();
+ move_player();
rodeo_collision_2d_world_compare_self(&world_orc, collision_resolve);
if(*(bool*)play_sound_input(NULL, NULL))
@@ -215,7 +131,7 @@ main_loop(void)
if(*(bool*)summon_units_input(NULL, NULL))
{
- player_shoot();
+ player_shoot(get_player_bullet_world());
}
rodeo_rectangle_draw(
@@ -252,7 +168,7 @@ main_loop(void)
&pink_clear
);
-
+ // 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]);
@@ -265,56 +181,9 @@ main_loop(void)
}
}
+ move_bullets();
draw_bullets();
-
- for(uint64_t i = 0; i < num_of_units; ++i)
- {
- units[i][0].position.x += units[i][1].position.x;
- units[i][0].position.y += units[i][1].position.y;
- if(units[i][0].position.x > rodeo_screen_width_get() - orc_size[0] || units[i][0].position.x < 0)
- {
- units[i][1].position.x = -units[i][1].position.x;
- }
- if(units[i][0].position.y > rodeo_screen_height_get() - orc_size[1] || units[i][0].position.y < 0)
- {
- units[i][1].position.y = -units[i][1].position.y;
- }
-
- rodeo_texture_2d_draw(
- &(rodeo_rectangle_t){
- .x = units[i][0].position.x,
- .y = units[i][0].position.y,
- .width = orc_size[0],
- .height = orc_size[1],
- },
- &(rodeo_rectangle_t){
- .x = 5,
- .y = 5,
- .width = 13,
- .height = 19
- },
- NULL,
- &texture
- );
- }
-
- rodeo_texture_2d_draw(
- &(rodeo_rectangle_t){
- .x = (float)(int32_t)summon_position.x - (orc_size[0] / 2.0f),
- .y = (float)(int32_t)summon_position.y - (orc_size[1] / 2.0f) ,
- .width = orc_size[0],
- .height = orc_size[1],
- },
- &(rodeo_rectangle_t){
- .x = 5,
- .y = 5,
- .width = 13,
- .height = 19
- },
- //&(rodeo_color_RGBAFloat_t){ .array = {1.0,1.0,1.0,1.0} },
- NULL,
- &texture
- );
+ draw_player();
rodeo_debug_text_draw(
1,
@@ -370,23 +239,9 @@ main(void)
renderer = rodeo_renderer_name_get();
rodeo_frame_limit_set(60);
- //texture = rodeo_texture_2d_create_from_RGBA8(
- // 2,
- // 2,
- // texture_memory
- //);
-
world_orc = rodeo_collision_2d_world_create();
world_other = rodeo_collision_2d_world_create();
- rodeo_collision_2d_world_item_t orc_collision_params = {
- .x = summon_position.x,
- .y = summon_position.y,
- .width = orc_size[0],
- .height = orc_size[1]
- };
- 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,
@@ -402,16 +257,18 @@ main(void)
};
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_bullets();
+ init_player();
+
rodeo_mainLoop_run(
main_loop
);
- rodeo_texture_2d_destroy(&texture);
+ deinit_player();
+
rodeo_collision_2d_world_destroy(&world_orc);
rodeo_collision_2d_world_destroy(&world_other);
diff --git a/src/player.c b/src/player.c
new file mode 100644
index 0000000..6c62b43
--- /dev/null
+++ b/src/player.c
@@ -0,0 +1,101 @@
+#include "rodeo.h"
+#include "input.h"
+#include "player.h"
+#include "rodeo/collision.h"
+static rodeo_texture_2d_t player_texture;
+static world_id player_collision_id;
+static rodeo_collision_2d_world_t player_collision_world;
+
+static float orc_size[] = {13.0f * 2.0f, 19.0f * 2.0f};
+
+void
+init_player(void)
+{
+ player_texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/orc.png"));
+ player_collision_world = rodeo_collision_2d_world_create();
+ player_collision_id = rodeo_collision_2d_world_item_create(
+ &player_collision_world,
+ (rodeo_collision_2d_world_item_t){
+ .x = 100,
+ .y = 100,
+ .width = orc_size[0],
+ .height = orc_size[1]
+ }
+ )->id;
+}
+
+void
+deinit_player(void)
+{
+ rodeo_texture_2d_destroy(&player_texture);
+ rodeo_collision_2d_world_destroy(&player_collision_world);
+}
+
+void
+draw_player(void)
+{
+ cvec_collision_2d_world_item_value *player = rodeo_collision_2d_world_item_get_by_id(player_collision_id);
+ rodeo_texture_2d_draw(
+ &(rodeo_rectangle_t){
+ .x = (float)(int32_t)player->x - (orc_size[0] / 2.0f),
+ .y = (float)(int32_t)player->y - (orc_size[1] / 2.0f) ,
+ .width = orc_size[0],
+ .height = orc_size[1],
+ },
+ &(rodeo_rectangle_t){
+ .x = 5,
+ .y = 5,
+ .width = 13,
+ .height = 19
+ },
+ NULL,
+ &player_texture
+ );
+
+}
+
+void
+parse_player_input(void)
+{
+ cvec_collision_2d_world_item_value *player = rodeo_collision_2d_world_item_get_by_id(player_collision_id);
+ bool reset_movement = true;
+ units_move_up_input(NULL, &reset_movement);
+ units_move_down_input(NULL, &reset_movement);
+ units_move_left_input(NULL, &reset_movement);
+ units_move_right_input(NULL, &reset_movement);
+ player->dx = *(float*)units_move_right_input(NULL, NULL) + *(float*)units_move_left_input(NULL, NULL);
+ player->dy = *(float*)units_move_down_input(NULL, NULL) + *(float*)units_move_up_input(NULL, NULL);
+}
+
+void
+move_player(void)
+{
+ cvec_collision_2d_world_item_value *player = rodeo_collision_2d_world_item_get_by_id(player_collision_id);
+ player->x += player->dx;
+ player->dx = 0;
+ player->y += player->dy;
+ player->dy = 0;
+}
+
+void
+player_shoot(rodeo_collision_2d_world_t *bullet_collision_world)
+{
+ cvec_collision_2d_world_item_value *player = rodeo_collision_2d_world_item_get_by_id(player_collision_id);
+ const uint32_t bullet_per_frame = 10;
+ for(uint32_t i = 0; i < bullet_per_frame; ++i)
+ {
+ rodeo_collision_2d_world_item_create(
+ bullet_collision_world,
+ (rodeo_collision_2d_world_item_t){
+ .x = (float)player->x - (orc_size[0] / 2.0f),
+ .y = (float)player->y - (orc_size[1] / 2.0f),
+ .dx = (float)((int8_t)(rodeo_random_uint64_get() % 10) - 5),
+ .dy = (float)((int8_t)(rodeo_random_uint64_get() % 10) - 5),
+ .width = 25.0f,
+ .height = 25.0f
+ }
+ );
+ }
+}
+
+
diff --git a/src/player.h b/src/player.h
new file mode 100644
index 0000000..808df7f
--- /dev/null
+++ b/src/player.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include "rodeo.h"
+#include "rodeo/collision.h"
+#include "input.h"
+
+void
+init_player(void);
+
+void
+deinit_player(void);
+
+void
+draw_player(void);
+
+void
+move_player(void);
+
+void
+parse_player_input(void);
+
+void
+player_shoot(rodeo_collision_2d_world_t *bullet_collision_world);