#pragma once #include "character/CharacterDataLoader.h" #include "character/CharacterEquipmentManager.h" #include #include #include #include #include #include namespace frostbite2D { class CharacterObject; class CharacterAnimation : public Actor { public: using ActionAnimationList = std::map>>; bool Init(CharacterObject* parent, const character::CharacterConfig& config, const CharacterEquipmentManager& equipmentManager); void SetAction(const std::string& actionName); void SetDirection(int direction); const std::string& GetCurrentAction() const { return currentActionTag_; } bool HasAction(const std::string& actionName) const { return actionAnimations_.count(actionName) > 0; } private: static std::string FormatImgPath(std::string path, Animation::ReplaceData data); void CreateAnimationBySlot(const std::string& actionName, const std::string& slotName, const std::string& actionPath, const character::CharacterConfig& config, const CharacterEquipmentManager& equipmentManager); void ApplyFlipRecursive(Actor* actor, bool flipped) const; CharacterObject* parent_ = nullptr; ActionAnimationList actionAnimations_; std::string currentActionTag_; int direction_ = 1; }; } // namespace frostbite2D