#pragma once #include "IState.h" //class PlayerComponent; namespace dae { enum PlayerStateId : unsigned { FROZEN, IN_BUBBLE, IDLE, RUNNING, JUMPING, FALLING, SHOOT_BUBBLE, DEAD }; class IPlayerState : public IState { public: virtual void Move(PlayerComponent* pPlayerComp, float dirX, float dirY) = 0; virtual void ShootBubble(PlayerComponent* pPlayerComp) = 0; }; class PlayerFrozenState final : public IPlayerState { public: void Enter(PlayerComponent* pPlayerComp) override; void Update(PlayerComponent* pPlayerComp, float deltaTime) override; void Exit(PlayerComponent* pPlayerComp) override; void Move(PlayerComponent* pPlayerComp, float dirX, float dirY) override; void ShootBubble(PlayerComponent* pPlayerComp) override; private: float m_FreezeTimer{ 0 }; float m_FreezeDuration{ 2.5f }; }; class PlayerIdleState final : public IPlayerState { public: void Enter(PlayerComponent* pPlayerComp) override; void Update(PlayerComponent* pPlayerComp, float deltaTime) override; void Exit(PlayerComponent* pPlayerComp) override; void Move(PlayerComponent* pPlayerComp, float dirX, float dirY) override; void ShootBubble(PlayerComponent* pPlayerComp) override; }; class PlayerRunningState final : public IPlayerState { public: void Enter(PlayerComponent* pPlayerComp) override; void Update(PlayerComponent* pPlayerComp, float deltaTime) override; void Exit(PlayerComponent* pPlayerComp) override; void Move(PlayerComponent* pPlayerComp, float dirX, float dirY) override; void ShootBubble(PlayerComponent* pPlayerComp) override; }; class PlayerJumpingState final : public IPlayerState { public: void Enter(PlayerComponent* pPlayerComp) override; void Update(PlayerComponent* pPlayerComp, float deltaTime) override; void Exit(PlayerComponent* pPlayerComp) override; void Move(PlayerComponent* pPlayerComp, float dirX, float dirY) override; void ShootBubble(PlayerComponent* pPlayerComp) override; }; class PlayerFallingState final : public IPlayerState { public: void Enter(PlayerComponent* pPlayerComp) override; void Update(PlayerComponent* pPlayerComp, float deltaTime) override; void Exit(PlayerComponent* pPlayerComp) override; void Move(PlayerComponent* pPlayerComp, float dirX, float dirY) override; void ShootBubble(PlayerComponent* pPlayerComp) override; }; class PlayerInBubbleState final : public IPlayerState { public: void Enter(PlayerComponent* pPlayerComp) override; void Update(PlayerComponent* pPlayerComp, float deltaTime) override; void Exit(PlayerComponent* pPlayerComp) override; void Move(PlayerComponent* pPlayerComp, float dirX, float dirY) override; void ShootBubble(PlayerComponent* pPlayerComp) override; }; class PlayerShootingBubbleState final : public IPlayerState { public: void Enter(PlayerComponent* pPlayerComp) override; void Update(PlayerComponent* pPlayerComp, float deltaTime) override; void Exit(PlayerComponent* pPlayerComp) override; void Move(PlayerComponent* pPlayerComp, float dirX, float dirY) override; void ShootBubble(PlayerComponent* pPlayerComp) override; }; class PlayerDeadState final : public IPlayerState { public: void Enter(PlayerComponent* pPlayerComp) override; void Update(PlayerComponent* pPlayerComp, float deltaTime) override; void Exit(PlayerComponent* pPlayerComp) override; void Move(PlayerComponent* pPlayerComp, float dirX, float dirY) override; void ShootBubble(PlayerComponent* pPlayerComp) override; private: float m_DeathTimer{ 0 }; float m_DeathDuration{ 2.75f / 2.f }; bool m_DidTryRespawning{ false }; }; }