#pragma once #include "EngineFrame/Base/Actor.h" #include "EngineFrame/Component/Sprite.h" #include "Asset/AnimationStruct.h" #include #include #include class Animation : public Actor { public: struct ReplaceData { int Param1; int Param2; ReplaceData() : Param1(0), Param2(0) {} ReplaceData(int _Param1, int _Param2) : Param1(_Param1), Param2(_Param2) {} }; public: Animation(/* args */); Animation(std::string AniPath); Animation(std::string AniPath, std::function AdditionalOptions, Animation::ReplaceData); ~Animation(); /**初始化 */ void Init(std::string AniPath); void OnUpdate(float deltaTime) override; void OnAdded(Actor *node) override; void SetVisible(bool visible) override; public: /**刷新帧 */ void FlushFrame(int Index); /**重置Ani */ void Reset(); /**获取当前帧信息 */ AniScriptParser::AniFrame GetCurrentFrameInfo(); // 设置帧索引 void SetFrameIndex(int Index); void InterpolationLogic(); /**获取最大尺寸 */ VecSize GetMaxSize(); public: // Ani是否可用 bool IsUsability = true; // 当前帧数 int CurrentFrameIndex = 0; // 总帧数 int TotalFrameIndex = 0; // 当前帧时间 float CurrentIndexT = 0; // 当前帧 RefPtr CurrentFrame = nullptr; // 下帧延迟 float NextFrameDelay = 9999999; // 染色Flag bool DyeingFlag = false; // 插值模式 std::vector InterpolationFlag; // 关键帧回调 std::function ChangeFrameCallback; // 结束回调 std::function EndCallback; // Ani的标签 std::unordered_map AnimationFlag; // 帧对象数组 std::vector FrameArr; // 图片精灵帧对象 std::vector> SpriteArr; // Ani类型 std::string Type = "normal"; // Ani路径 std::string AniPath; // 是否描边 bool IsOutline = false; // 附加选项 std::function AdditionalOptions; Animation::ReplaceData AdditionalOptionsData; /**最大尺寸 * 所有子精灵最大的尺寸 */ VecSize MaxSize = {0, 0}; };