summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/player.c72
1 files changed, 43 insertions, 29 deletions
diff --git a/src/player.c b/src/player.c
index 7804c59..2a524ec 100644
--- a/src/player.c
+++ b/src/player.c
@@ -4,16 +4,20 @@
#include "rodeo/collision.h"
#include "sprite.h"
-static rodeo_texture_2d_t player_texture;
-static sprite_t player_sprite = {
- .iter = 0,
- .config = {
- .width = 128,
- .height = 128,
- .count = 61
- }
-};
-static world_id player_collision_id;
+struct player_t
+{
+ sprite_t sprite;
+ rodeo_texture_2d_t texture;
+ int32_t hp;
+ float damage_timer;
+ world_id collision_id;
+}
+player;
+
+// 0-19 jumping
+// 61 standing
+// 20-60 mid iar
+
static rodeo_collision_2d_world_t player_collision_world;
static float orc_size[] = {13.0f * 2.0f, 19.0f * 2.0f};
@@ -22,10 +26,10 @@ void
init_player(void)
{
//player_texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/orc.png"));
- player_texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/mainblob-128.png"));
- player_sprite.config.texture = &player_texture;
+ player.texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/mainblob-128.png"));
+ player.sprite.config.texture = &player.texture;
player_collision_world = rodeo_collision_2d_world_create();
- player_collision_id = rodeo_collision_2d_world_item_create(
+ player.collision_id = rodeo_collision_2d_world_item_create(
&player_collision_world,
(rodeo_collision_2d_world_item_t){
.x = 100,
@@ -34,20 +38,30 @@ init_player(void)
.height = orc_size[1]
}
)->id;
+ player.sprite = (sprite_t){
+ .iter = 0,
+ .config = {
+ .texture = &player.texture,
+ .width = 128,
+ .height = 128,
+ .count = 61
+ }
+};
+
}
void
deinit_player(void)
{
- rodeo_texture_2d_destroy(&player_texture);
+ 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);
- draw_sprite(&player_sprite, player->x, player->y, 0.25f);
+ cvec_collision_2d_world_item_value *player_position = rodeo_collision_2d_world_item_get_by_id(player.collision_id);
+ draw_sprite(&player.sprite, player_position->x, player_position->y, 0.25f);
/*
rodeo_texture_2d_draw(
&(rodeo_rectangle_t){
@@ -71,40 +85,40 @@ draw_player(void)
void
parse_player_input(void)
{
- cvec_collision_2d_world_item_value *player = rodeo_collision_2d_world_item_get_by_id(player_collision_id);
+ cvec_collision_2d_world_item_value *player_position = 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);
+ player_position->dx = *(float*)units_move_right_input(NULL, NULL) + *(float*)units_move_left_input(NULL, NULL);
+ player_position->dy = *(float*)units_move_down_input(NULL, NULL) + *(float*)units_move_up_input(NULL, NULL);
}
void
move_player(void)
{
- player_sprite.iter += 1;
- player_sprite.iter %= player_sprite.config.count;
- 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;
+ player.sprite.iter += 1;
+ player.sprite.iter %= player.sprite.config.count;
+ cvec_collision_2d_world_item_value *player_position = rodeo_collision_2d_world_item_get_by_id(player.collision_id);
+ player_position->x += player_position->dx;
+ player_position->dx = 0;
+ player_position->y += player_position->dy;
+ player_position->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);
+ cvec_collision_2d_world_item_value *player_position = 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),
+ .x = (float)player_position->x - (orc_size[0] / 2.0f),
+ .y = (float)player_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,