#pragma once #include "IState.h" namespace dae { enum ZenChanStateId : unsigned { FROZEN, RUNNING, RUNNING_ANGRY, DEAD, IN_BUBBLE, }; class IZenChanState : public IState { public: virtual void Move(ZenChanComponent* pZenChanComp, float dirX, float dirY) = 0; }; class ZenChanFrozenState final : public IZenChanState { public: void Enter(ZenChanComponent* pZenChanComp) override; void Update(ZenChanComponent* pZenChanComp, float deltaTime) override; void Exit(ZenChanComponent* pZenChanComp) override; void Move(ZenChanComponent* pZenChanComp, float dirX, float dirY) override; private: float m_FreezeTimer{ 0 }; const float m_FreezeDuration{ 2.5f }; }; class ZenChanRunningState final : public IZenChanState { public: void Enter(ZenChanComponent* pZenChanComp) override; void Update(ZenChanComponent* pZenChanComp, float deltaTime) override; void Exit(ZenChanComponent* pZenChanComp) override; void Move(ZenChanComponent* pZenChanComp, float dirX, float dirY) override; }; class ZenChanRunningAngryState final : public IZenChanState { public: void Enter(ZenChanComponent* pZenChanComp) override; void Update(ZenChanComponent* pZenChanComp, float deltaTime) override; void Exit(ZenChanComponent* pZenChanComp) override; void Move(ZenChanComponent* pZenChanComp, float dirX, float dirY) override; }; class ZenChanDeadState final : public IZenChanState { public: void Enter(ZenChanComponent* pZenChanComp) override; void Update(ZenChanComponent* pZenChanComp, float deltaTime) override; void Exit(ZenChanComponent* pZenChanComp) override; void Move(ZenChanComponent* pZenChanComp, float dirX, float dirY) override; private: float m_FruitTimer{ 0 }; const float m_FruitDuration{ 0.66f }; }; class ZenChanInBubbleState final : public IZenChanState { public: void Enter(ZenChanComponent* pZenChanComp) override; void Update(ZenChanComponent* pZenChanComp, float deltaTime) override; void Exit(ZenChanComponent* pZenChanComp) override; void Move(ZenChanComponent* pZenChanComp, float dirX, float dirY) override; }; }