BubbleBobbleRemake / BubbleBobble / ZenChanStates.h
ZenChanStates.h
Raw
#pragma once
#include "IState.h"

namespace dae
{
    enum ZenChanStateId : unsigned
    {
        FROZEN,
        RUNNING,
        RUNNING_ANGRY,
        DEAD,
        IN_BUBBLE,
    };

    class IZenChanState : public IState<ZenChanComponent>
    {
    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;
    };
}