Files
DNF_DEV/source/EngineFrame/Component/Animation.h
2026-02-08 16:20:50 +08:00

89 lines
2.4 KiB
C++

#pragma once
#include "EngineFrame/Base/Actor.h"
#include "EngineFrame/Component/Sprite.h"
#include "Asset/AnimationStruct.h"
#include <functional>
#include <tuple>
#include <utility>
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<std::string(std::string, Animation::ReplaceData)> 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<Sprite> CurrentFrame = nullptr;
// 下帧延迟
float NextFrameDelay = 9999999;
// 染色Flag
bool DyeingFlag = false;
// 插值模式
std::vector<AniScriptParser::AniFrame> InterpolationFlag;
// 关键帧回调
std::function<void(int)> ChangeFrameCallback;
// 结束回调
std::function<void()> EndCallback;
// Ani的标签
std::unordered_map<std::string, AniScriptParser::AniFlag> AnimationFlag;
// 帧对象数组
std::vector<AniScriptParser::AniFrame> FrameArr;
// 图片精灵帧对象
std::vector<RefPtr<Sprite>> SpriteArr;
// Ani类型
std::string Type = "normal";
// Ani路径
std::string AniPath;
// 是否描边
bool IsOutline = false;
// 附加选项
std::function<std::string(std::string, Animation::ReplaceData)> AdditionalOptions;
Animation::ReplaceData AdditionalOptionsData;
/**最大尺寸
* 所有子精灵最大的尺寸
*/
VecSize MaxSize = {0, 0};
};