#include "PlayerStates.h" #include "Player.h" static inline void InternalSpriteFlipWithMovement(Player* self) { if(self->moveInput.x > 0.f) sprite_flip_horizontal(self->sprite, 0); if(self->moveInput.x < -0.1f) sprite_flip_horizontal(self->sprite, 1); } void PlayerAnimationExit(Player* self) {} void PlayerIdleEnter(Player* self) { self->currentAnimation = self->idle; animation_sprite_play_from(self->currentAnimation, 0.f); } const State* PlayerIdleUpdate(Player* self, float deltaTime) { if(!veqf(self->moveInput, ZeroVector)) return PlayerWalk(); if(self->attackInput) return PlayerJabA(); return PlayerIdle(); } void PlayerWalk_Enter(Player* self) { self->currentAnimation = self->walk; animation_sprite_play_from(self->currentAnimation, 0.f); } const State* PlayerWalk_Update(Player* self, float deltaTime) { rigidbody_set_velocity(self->rigidbody, vmulf(vnormalizedf(self->moveInput), PLAYER_SPEED)); if(veqf(self->moveInput, ZeroVector)) return PlayerIdle(); if(self->attackInput) return PlayerJabA(); InternalSpriteFlipWithMovement(self); return PlayerWalk(); } void PlayerAttackEnter(Player* self) { self->attackInput = 0; rigidbody_set_velocity(self->rigidbody, ZeroVector); InternalSpriteFlipWithMovement(self); } void PlayerJabA_Enter(Player* self) { PlayerAttackEnter(self); self->currentAnimation = self->jab_a; animation_sprite_play_from(self->currentAnimation, 0.f); } const State* PlayerJabA_Update(Player* self, float deltaTime) { const float ntime = animation_sprite_get_time_normalized(self->currentAnimation); if(ntime >= 2.0f) return PlayerIdle(); if(self->attackInput && ntime > 1.0f) return PlayerJabB(); if(!veqf(self->moveInput, ZeroVector) && ntime > 1.05f) return PlayerWalk(); return PlayerJabA(); } void PlayerJabB_Enter(Player* self) { PlayerAttackEnter(self); self->currentAnimation = self->jab_b; animation_sprite_play_from(self->currentAnimation, 0.f); } const State* PlayerJabB_Update(Player* self, float deltaTime) { const float ntime = animation_sprite_get_time_normalized(self->currentAnimation); if(ntime >= 2.f) return PlayerIdle(); if(self->attackInput && ntime > 1.0f) return PlayerJabA(); if(!veqf(self->moveInput, ZeroVector) && ntime > 1.05f) return PlayerWalk(); return PlayerJabB(); }