diff options
| -rw-r--r-- | src/player.c | 72 |
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, |
