#pragma once #include "IState.h" namespace dae { enum BubbleStateId : unsigned { INITIAL_MOVEMENT, FLOATING_UP, FLOATING_SIDEWAYS, BLINKING, POPPING, SQUISHED_HORIZONTAL, SQUISHED_VERTICAL, }; class IBubbleState : public IState { public: GameObject* m_pBubbleGo{ nullptr }; }; class BubbleInitialMovementState final : public IBubbleState { public: void Enter(BubbleComponent* pBubbleComp) override; void Update(BubbleComponent* pBubbleComp, float deltaTime) override; void Exit(BubbleComponent* pBubbleComp) override; private: float m_MovementTimer{ 0 }; const float m_MovementDuration{ .5f }; }; class BubbleFloatingUpState final : public IBubbleState { public: void Enter(BubbleComponent* pBubbleComp) override; void Update(BubbleComponent* pBubbleComp, float deltaTime) override; void Exit(BubbleComponent* pBubbleComp) override; }; class BubbleFloatingSidewaysState final : public IBubbleState { public: void Enter(BubbleComponent* pBubbleComp) override; void Update(BubbleComponent* pBubbleComp, float deltaTime) override; void Exit(BubbleComponent* pBubbleComp) override; private: float m_FloatingTimer{ 0 }; const float m_FloatingDuration{ 2.0f }; }; class BubbleBlinkingState final : public IBubbleState { public: void Enter(BubbleComponent* pBubbleComp) override; void Update(BubbleComponent* pBubbleComp, float deltaTime) override; void Exit(BubbleComponent* pBubbleComp) override; private: float m_BlinkingTimer{ 0 }; const float m_BlinkingDuration{ 1.5f }; }; class BubblePoppingState final : public IBubbleState { public: void Enter(BubbleComponent* pBubbleComp) override; void Update(BubbleComponent* pBubbleComp, float deltaTime) override; void Exit(BubbleComponent* pBubbleComp) override; private: float m_PoppingTimer{ 0 }; const float m_PoppingDuration{ 1.0f }; }; class BubbleSquishedHorizontalState final : public IBubbleState { public: void Enter(BubbleComponent* pBubbleComp) override; void Update(BubbleComponent* pBubbleComp, float deltaTime) override; void Exit(BubbleComponent* pBubbleComp) override; private: float m_SquishTimer{ 0 }; const float m_SquishDuration{ 0.066f }; }; class BubbleSquishedVerticalState final : public IBubbleState { public: void Enter(BubbleComponent* pBubbleComp) override; void Update(BubbleComponent* pBubbleComp, float deltaTime) override; void Exit(BubbleComponent* pBubbleComp) override; private: float m_SquishTimer{ 0 }; const float m_SquishDuration{ 0.066f }; }; }