137 lines
3.1 KiB
C++
137 lines
3.1 KiB
C++
#pragma once
|
|
#include <vector>
|
|
#include <string>
|
|
#include <variant>
|
|
#include <unordered_map>
|
|
#include <SDL.h>
|
|
|
|
using AniFlag = std::variant<
|
|
int,
|
|
float,
|
|
SDL_Point,
|
|
SDL_FPoint,
|
|
std::string,
|
|
std::vector<int>,
|
|
std::vector<float>>;
|
|
struct AniFrame
|
|
{
|
|
std::string Img_Path; // img路径
|
|
int Img_Index; // img索引
|
|
SDL_Point Img_Pos; // img位置
|
|
std::vector<std::vector<int>> AttackBox; // 攻击框
|
|
std::vector<std::vector<int>> DamageBox; // 受击框
|
|
std::unordered_map<std::string, AniFlag> Flag; // Frame特效数据
|
|
int Delay; // 延迟
|
|
};
|
|
struct AniInfo
|
|
{
|
|
std::vector<std::string> Img_List; // img列表
|
|
std::vector<AniFrame> Frame; // ani列表
|
|
std::unordered_map<std::string, AniFlag> Flag; // ani特效数据
|
|
};
|
|
namespace AniScriptParser
|
|
{
|
|
static std::string Get_Ani_Flag(int data)
|
|
{
|
|
switch (data)
|
|
{
|
|
case 0:
|
|
return "LOOP";
|
|
case 1:
|
|
return "SHADOW";
|
|
case 3:
|
|
return "COORD";
|
|
case 7:
|
|
return "IMAGE_RATE";
|
|
case 8:
|
|
return "IMAGE_ROTATE";
|
|
case 9:
|
|
return "RGBA";
|
|
case 10:
|
|
return "INTERPOLATION";
|
|
case 11:
|
|
return "GRAPHIC_EFFECT";
|
|
case 12:
|
|
return "DELAY";
|
|
case 13:
|
|
return "DAMAGE_TYPE";
|
|
case 14:
|
|
return "DAMAGE_BOX";
|
|
case 15:
|
|
return "ATTACK_BOX";
|
|
case 16:
|
|
return "PLAY_SOUND";
|
|
case 17:
|
|
return "PRELOAD";
|
|
case 18:
|
|
return "SPECTRUM";
|
|
case 23:
|
|
return "SET_FLAG";
|
|
case 24:
|
|
return "FLIP_TYPE";
|
|
case 25:
|
|
return "LOOP_START";
|
|
case 26:
|
|
return "LOOP_END";
|
|
case 27:
|
|
return "CLIP";
|
|
case 28:
|
|
return "OPERATION";
|
|
default:
|
|
return "";
|
|
}
|
|
}
|
|
|
|
static std::string Get_Ani_Effect_Type(int data)
|
|
{
|
|
switch (data)
|
|
{
|
|
case 0:
|
|
return "NONE";
|
|
case 1:
|
|
return "DODGE";
|
|
case 2:
|
|
return "LINEARDODGE";
|
|
case 3:
|
|
return "DARK";
|
|
case 4:
|
|
return "XOR";
|
|
case 5:
|
|
return "MONOCHROME";
|
|
case 6:
|
|
return "SPACEDISTORT";
|
|
default:
|
|
return "";
|
|
}
|
|
};
|
|
|
|
static std::string Get_Ani_Flip_Type(int data)
|
|
{
|
|
switch (data)
|
|
{
|
|
case 1:
|
|
return "HORIZON";
|
|
case 2:
|
|
return "VERTICAL";
|
|
case 3:
|
|
return "ALL";
|
|
default:
|
|
return "";
|
|
}
|
|
};
|
|
|
|
static std::string Get_Ani_Damage_Type(int data)
|
|
{
|
|
switch (data)
|
|
{
|
|
case 0:
|
|
return "NORMAL";
|
|
case 1:
|
|
return "SUPERARMOR";
|
|
case 2:
|
|
return "UNBREAKABLE";
|
|
default:
|
|
return "";
|
|
}
|
|
};
|
|
}; |