83 lines
2.4 KiB
C
83 lines
2.4 KiB
C
#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();
|
|
}
|