89 lines
2.4 KiB
C++
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};
|
|
};
|