BubbleBobbleRemake / BubbleBobble / BubbleStates.h
BubbleStates.h
Raw
#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<BubbleComponent>
    {
    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 };
    };
}