#ifndef FIGHT_PLAYER_STATES_H
#define FIGHT_PLAYER_STATES_H

#include "state.h"

typedef struct Player Player;

extern void PlayerAnimationExit(Player* self);

extern void PlayerIdleEnter(Player* self);
extern const State* PlayerIdleUpdate(Player* self, float deltaTime);

DefineState(PlayerIdle, Player,
    PlayerIdleEnter,
    PlayerIdleUpdate,
    PlayerAnimationExit
)

extern void PlayerWalk_Enter(Player* self);
extern const State* PlayerWalk_Update(Player* self, float deltaTime);

DefineState(PlayerWalk, Player,
    PlayerWalk_Enter,
    PlayerWalk_Update,
    PlayerAnimationExit
)

extern void PlayerAttackEnter(Player* self);

extern void PlayerJabA_Enter(Player* self);
extern const State* PlayerJabA_Update(Player* self, float deltaTime);

DefineState(PlayerJabA, Player,
    PlayerJabA_Enter,
    PlayerJabA_Update,
    PlayerAnimationExit
)

extern void PlayerJabB_Enter(Player* self);
extern const State* PlayerJabB_Update(Player* self, float deltaTime);

DefineState(PlayerJabB, Player,
    PlayerJabB_Enter,
    PlayerJabB_Update,
    PlayerAnimationExit
)

extern void PlayerKickA_Enter(Player* self);
extern const State* PlayerKickA_Update(Player* self, float deltaTime);

DefineState(PlayerKickA, Player,
    PlayerKickA_Enter,
    PlayerKickA_Update,
    PlayerAnimationExit
)

extern void PlayerJump_Enter(Player *self);
extern const State* PlayerJump_Update(Player* self, float deltaTime);

DefineState(PlayerJump, Player,
    PlayerJump_Enter,
    PlayerJump_Update,
    PlayerAnimationExit
)

extern void PlayerAirHeavy_Enter(Player* self);
extern const State* PlayerAirHeavy_Update(Player* self, float deltaTime);

DefineState(PlayerAirHeavy, Player,
    PlayerAirHeavy_Enter,
    PlayerAirHeavy_Update,
    PlayerAnimationExit
)

#endif // !FIGHT_PLAYER_STATES_H
