diff --git a/player.c b/player.c index 1a33eb9..8bff208 100644 --- a/player.c +++ b/player.c @@ -13,11 +13,12 @@ void get_player_controls(Player *player); void set_x_movement (Player *player); +void player_move (Player *player); void player_dash (Player *player); void player_jump (Player *player); void player_fall (Player *player); -int32_t player_gravity (Player *player); bool player_on_ground (Player *player); +int32_t player_gravity (Player *player); State *update_state (Player *player, uint32_t state); State *idle_state (StateMachine *sm, Player *player); State *walk_state (StateMachine *sm, Player *player); @@ -41,7 +42,7 @@ void player_init(Player *player, SDL_Renderer *renderer, SDL_Rect position) { player->animations[PLAYER_STATE_JUMP] = ap_init(renderer, "knight_player/Jump_KG_2.png", 100, SPRITE_WIDTH, SPRITE_HEIGHT, false); player->animations[PLAYER_STATE_FALL] = - ap_init(renderer, "knight_player/Fall_KG_2.png", 80, SPRITE_WIDTH, SPRITE_HEIGHT, false); + ap_init(renderer, "knight_player/Fall_KG_2.png", 50, SPRITE_WIDTH, SPRITE_HEIGHT, false); player->states[PLAYER_STATE_IDLE] = (State){ .state_func = (StateFunc *)idle_state }; player->states[PLAYER_STATE_WALK] = (State){ .state_func = (StateFunc *)walk_state }; @@ -57,13 +58,7 @@ void player_init(Player *player, SDL_Renderer *renderer, SDL_Rect position) { void player_update(Player *player, uint32_t ticks) { get_player_controls(player); sm_run(&(player->state_machine), (void *)player); - - player->position.x += player->movement.x; - player->position.y += player->movement.y; - if (player->position.y > player->base_y) { - player->position.y = player->base_y; - } - + player_move(player); ap_update(&(player->animations[player->current_state]), ticks); } @@ -98,24 +93,36 @@ void set_x_movement(Player *player) { } } +void player_move(Player *player) { + player->position.x += player->movement.x; + player->position.y += player->movement.y; + if (player->position.y > player->base_y) { + player->position.y = player->base_y; + } +} + void player_dash(Player *player) { player->movement.x = player->x_direction * player->velocity * 2; } void player_jump(Player *player) { - player->movement.y = player->velocity * 6 * -1; + player->movement.y = player->velocity * 7 * -1; } void player_fall(Player *player) { player->movement.y = player->velocity * 6; } +bool player_on_ground(Player *player) { + return player->position.y == player->base_y; +} + int32_t player_gravity(Player *player) { return player->velocity * 0.5; } -bool player_on_ground(Player *player) { - return player->position.y == player->base_y; +bool player_falling(Player *player) { + return player->movement.y > 0; } State *update_state(Player *player, uint32_t state) { @@ -221,7 +228,7 @@ State *fall_state(StateMachine *sm, Player *player) { bool reset = false; uint32_t state = PLAYER_STATE_FALL; - if (player->animations[PLAYER_STATE_FALL].finished || player_on_ground(player)) { + if (player->animations[PLAYER_STATE_FALL].finished && player_on_ground(player)) { player->movement.y = 0; reset = true; state = PLAYER_STATE_IDLE;