#pragma once #include "Component.h" #include "IStateController.h" class ISoundSystem; namespace dae { enum class EnemyFacingDirection : unsigned { LEFT, RIGHT }; class AnimatedTextureComponent; class RigidbodyComponent; class LevelComponent; class ZenChanComponent : public Component, public IStateController { public: ZenChanComponent(float startX, float startY, EnemyFacingDirection facingDirection); ~ZenChanComponent(); void Initialize() override; void Update(float deltaTime) override; void FixedUpdate(float deltaTime) override; void Render() const override {}; void EnterBubble(); void ExitBubble(float posX, float posY); void ChangeDirection(float dirX, float); EnemyFacingDirection GetDirection() const { return m_Direction; } void SetDirection(EnemyFacingDirection direction) { m_Direction = direction; } AnimatedTextureComponent* GetAnimComp() { return m_pAnimTexComp; } 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; } void SetJumpTimer(float value) { m_JumpTimer = value; } float GetJumpTimer() { return m_JumpTimer; } float GetJumpDuration() { return m_JumpDuration; } void SetRunTimer(float value) { m_RunTimer = value; } float GetRunTimer() { return m_RunTimer; } float GetRunDuration() { return m_RunDuration; } void HandleMovement(float deltaTime); void RegisterLevel(LevelComponent* pLevelComponent); void Reset(); void Die(); friend class ZenChanFrozenState; friend class ZenChanRunningState; friend class ZenChanRunningAngryState; friend class ZenChanDeadState; friend class ZenChanInBubbleState; private: AnimatedTextureComponent* m_pAnimTexComp{ nullptr }; RigidbodyComponent* m_pRigidBodyComponent{ nullptr }; LevelComponent* m_pLevelComponent{ nullptr }; float m_RunTimer{ 0 }; float m_RunDuration{ 2.f }; float m_JumpTimer{ 0 }; float m_JumpDuration{ 4.f }; 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 }; EnemyFacingDirection m_Direction{}; EnemyFacingDirection m_StartDirection{}; bool m_IsGrounded{ true }; ISoundSystem* m_pSoundSystem{ nullptr }; }; }