BubbleBobbleRemake / BubbleBobble / BubbleComponent.h
BubbleComponent.h
Raw
#pragma once
#include "Component.h"
#include "IStateController.h"

namespace dae
{
	enum TrappedGameObjectId : unsigned
	{
		ZENCHAN
	};

	class PlayerComponent;
	class ColliderComponent;
	class AnimatedTextureComponent;
	class LevelComponent;
	class BubbleComponent : public Component, public IStateController<BubbleComponent>
	{
	public:
		BubbleComponent(LevelComponent* pLevelComponent, const std::vector<ColliderComponent*>& pEnemyColliders, unsigned direction, int spriteId, float startX, float startY);
		~BubbleComponent();
		
		void Initialize() override;

		void Update(float deltaTime) override;
		void FixedUpdate(float deltaTime) override;
		void Render() const override {};

		void HandlePlayerCollisions();

		friend class BubbleInitialMovementState;
		friend class BubbleFloatingUpState;
		friend class BubbleFloatingSidewaysState;
		friend class BubbleBlinkingState;
		friend class BubblePoppingState;
		friend class BubbleSquishedHorizontalState;
		friend class BubbleSquishedVerticalState;

	private:
		float m_DirX{ 0 };
		
		float m_MoveSpeed{ 300.f };
		float m_MovementTimer{ 0 };
		const float m_MovementDuration{ .5f };

		ColliderComponent* m_pCollider{ nullptr };
		AnimatedTextureComponent* m_pAnimTexComp{ nullptr };
		LevelComponent* m_pLevelComponent{ nullptr };
		const std::vector<ColliderComponent*>& m_pEnemyColliders;

		TrappedGameObjectId m_TrappedGameObjectId{ UINT_MAX };
		GameObject* m_pTrappedGameObject{ nullptr };

		int m_SpriteId{};
		float m_StartX{};
		float m_StartY{};

		bool m_isRed{ false };
	};
}