#pragma once #include "Component.h" #include "IStateController.h" class ISoundSystem; namespace dae { enum FacingDirection : unsigned { RIGHT, LEFT }; class AnimatedTextureComponent; class ColliderComponent; class RigidbodyComponent; class LevelComponent; class PlayerComponent : public Component, public IStateController { public: PlayerComponent(float startX, float startY, int spriteId, int lives); ~PlayerComponent(); void Update(float deltaTime) override; void FixedUpdate(float deltaTime) override; void Render() const override {}; void Initialize() override; void Reset(); void RegisterLevel(LevelComponent* pLevelComponent); void RegisterEnemyColliders(const std::vector& enemyColliders); void ChangeDirection(float dirX, float dirY); FacingDirection GetDirection() const { return m_Direction; } const std::vector& GetEnemyColliders() { return m_EnemyColliders; } LevelComponent* GetLevelComponent() { return m_pLevelComponent; } void SetCurrentXSpeed(float xSpeed) { m_CurrentXSpeed = xSpeed; } float GetCurrentXSpeed() { return m_CurrentXSpeed;} void SetCurrentYSpeed(float ySpeed) { m_CurrentYSpeed = ySpeed; } float GetCurrentYSpeed() { return m_CurrentYSpeed; } float GetMoveSpeed() { return m_MoveSpeed; } float GetJumpSpeed() { return m_JumpSpeed; } ISoundSystem* GetSoundSystem() { return m_pSoundSystem; } void SetIsGrounded(bool isGrounded) { m_IsGrounded = isGrounded; } bool GetIsGrounded() { return m_IsGrounded; } float GetShootDuration() { return m_ShootDuration; } void SetShootTimer(float value) { m_ShootTimer = value; } float GetShootTimer() { return m_ShootTimer; } ColliderComponent* GetCollider(); void SpawnBubble(); bool TryRespawn(); bool IsCollidingWithEnemies(); void Move(float dirX, float dirY); int GetLives() const { return m_Lives; } void DecrementLives() { m_Lives--; } int GetSpriteId() const { return m_SpriteId; } AnimatedTextureComponent* GetAnimComp() { return m_pAnimTexComp; } void ShootBubble(); void HandleMovement(float deltaTime); friend class PlayerFrozenState; friend class PlayerInBubbleState; friend class PlayerIdleState; friend class PlayerRunningState; friend class PlayerJumpingState; friend class PlayerFallingState; friend class PlayerShootingBubbleState; friend class PlayerDeadState; private: AnimatedTextureComponent* m_pAnimTexComp{ nullptr }; RigidbodyComponent* m_pRigidBodyComponent{ nullptr }; LevelComponent* m_pLevelComponent{ nullptr }; std::vector m_EnemyColliders; float m_ShootTimer{ 0 }; float m_ShootDuration{ 1 / 3.f }; int m_Lives{}; int m_MaxLives{}; int m_SpriteId; float m_StartX; float m_StartY; float m_CurrentXSpeed{}; float m_CurrentYSpeed{}; const float m_MoveSpeed{ 150.f }; const float m_MoveSpeedFalling{ 75.f }; const float m_JumpSpeed{ 300.f }; const float m_AirDecelerationSpeed{ 525.f }; const float m_MaxFallSpeed{ 300.f }; FacingDirection m_Direction{ FacingDirection::RIGHT }; int m_SpriteOffset{ 16 }; bool m_IsGrounded{ true }; ISoundSystem* m_pSoundSystem{ nullptr }; }; }