#pragma once #include "character/CharacterActionLibrary.h" #include "character/CharacterAnimation.h" #include "character/CharacterDataLoader.h" #include "character/CharacterEquipmentManager.h" #include "character/CharacterInputRouter.h" #include "character/CharacterStateMachine.h" #include #include #include #include #include namespace frostbite2D { class CharacterObject : public Actor { public: CharacterObject() = default; ~CharacterObject() override = default; bool Construction(int jobId); void SetAction(const std::string& actionName); void SetDirection(int direction); void SetCharacterPosition(const Vec2& pos); void SetWorldPosition(const CharacterWorldPosition& pos); void PushCommand(const CharacterCommand& command); void ApplyHit(const HitContext& hit); void OnUpdate(float deltaTime) override; bool OnKeyDown(const KeyEvent& event) override; bool OnKeyUp(const KeyEvent& event) override; bool OnJoystickAxis(const JoystickEvent& event) override; bool OnJoystickButtonDown(const JoystickEvent& event) override; bool OnJoystickButtonUp(const JoystickEvent& event) override; int GetJobId() const { return jobId_; } int GetGrowType() const { return growType_; } int GetDirection() const { return direction_; } const std::string& GetCurrentAction() const { return currentAction_; } CharacterStateId GetState() const { return stateMachine_.GetState(); } const CharacterIntent& GetCurrentIntent() const { return currentIntent_; } const CharacterWorldPosition& GetWorldPosition() const { return motor_.position; } const CharacterMotor& GetMotor() const { return motor_; } CharacterMotor& GetMotorMutable() { return motor_; } CharacterCommandBuffer& GetCommandBufferMutable() { return commandBuffer_; } float GetLastDeltaTime() const { return lastDeltaTime_; } const CharacterActionDefinition* FindAction(const std::string& actionId) const; std::string ResolveAnimationTag(const std::string& preferred, const std::string& fallback) const; void PlayAnimationTag(const std::string& actionTag); void RunStateHook(const std::string& phase, CharacterStateId stateId, const CharacterActionDefinition* action); void SetFacing(int direction); const character::CharacterConfig* GetConfig() const { return config_ ? &config_.value() : nullptr; } const CharacterEquipmentManager& GetEquipmentManager() const { return equipmentManager_; } private: int jobId_ = -1; int growType_ = -1; int direction_ = 1; std::string currentAction_; std::optional config_; CharacterEquipmentManager equipmentManager_; CharacterActionLibrary actionLibrary_; CharacterInputRouter inputRouter_; CharacterCommandBuffer commandBuffer_; CharacterIntent currentIntent_; CharacterStateMachine stateMachine_; CharacterMotor motor_; CharacterStatus status_; RefPtr animationManager_ = nullptr; float lastDeltaTime_ = 0.0f; }; } // namespace frostbite2D