diff options
| author | realtradam <[email protected]> | 2023-05-26 15:26:36 -0400 |
|---|---|---|
| committer | realtradam <[email protected]> | 2023-05-26 15:26:36 -0400 |
| commit | d362dd45a187e4f281751410b82faf1cf0e1dfbf (patch) | |
| tree | ae37720995a2fcb0b3ca11d2c751dda2c97b8257 | |
| parent | 34b136472bdef8411a5b7458bdb18fa3e417a3ac (diff) | |
| download | TOJam2023-d362dd45a187e4f281751410b82faf1cf0e1dfbf.tar.gz TOJam2023-d362dd45a187e4f281751410b82faf1cf0e1dfbf.zip | |
seperate out bullets and player
| -rw-r--r-- | CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/bullet.c | 92 | ||||
| -rw-r--r-- | src/bullet.h | 22 | ||||
| -rw-r--r-- | src/main.c | 169 | ||||
| -rw-r--r-- | src/player.c | 101 | ||||
| -rw-r--r-- | src/player.h | 23 |
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); @@ -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); |
