#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 { public: BubbleComponent(LevelComponent* pLevelComponent, const std::vector& 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& m_pEnemyColliders; TrappedGameObjectId m_TrappedGameObjectId{ UINT_MAX }; GameObject* m_pTrappedGameObject{ nullptr }; int m_SpriteId{}; float m_StartX{}; float m_StartY{}; bool m_isRed{ false }; }; }