320 lines
9.2 KiB
Plaintext
320 lines
9.2 KiB
Plaintext
|
|
/*
|
||
|
|
文件名:InitAni.nut
|
||
|
|
路径:Core/BaseClass/ScriptManager/InitAni.nut
|
||
|
|
创建日期:2024-05-07 17:33
|
||
|
|
文件用途:初始化Ani
|
||
|
|
*/
|
||
|
|
|
||
|
|
function Get_Ani_Flip_Type(data) {
|
||
|
|
switch (data) {
|
||
|
|
case 1:
|
||
|
|
return "HORIZON";
|
||
|
|
case 2:
|
||
|
|
return "VERTICAL";
|
||
|
|
case 3:
|
||
|
|
return "ALL";
|
||
|
|
default:
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
function Get_Ani_Effect_Type(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 "";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function Get_Ani_Damage_Type(data) {
|
||
|
|
switch (data) {
|
||
|
|
case 0:
|
||
|
|
return "NORMAL";
|
||
|
|
case 1:
|
||
|
|
return "SUPERARMOR";
|
||
|
|
case 2:
|
||
|
|
return "UNBREAKABLE";
|
||
|
|
default:
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function Get_Ani_Flag(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 "";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function InitPvfAni(Ro) {
|
||
|
|
local AniObject = {
|
||
|
|
Img_List = [],
|
||
|
|
Frame = [],
|
||
|
|
Flag = {}
|
||
|
|
};
|
||
|
|
|
||
|
|
local Frame_Max = Ro.GetUShort();
|
||
|
|
local Img_Count = Ro.GetUShort();
|
||
|
|
|
||
|
|
//Img的路径读取 存入数组
|
||
|
|
for (local index = 0; index< Img_Count; index++) {
|
||
|
|
local Buf = Ro.GetInt();
|
||
|
|
local ImgPath = Ro.GetString(Buf);
|
||
|
|
//有可能Img有空路径
|
||
|
|
AniObject.Img_List.append(ImgPath);
|
||
|
|
}
|
||
|
|
//Ani头部标签数量
|
||
|
|
local Ani_H_Item_Count = Ro.GetUShort();
|
||
|
|
|
||
|
|
//处理标签
|
||
|
|
for (local index = 0; index< Ani_H_Item_Count; index++) {
|
||
|
|
//标签类型
|
||
|
|
local Type = Ro.GetUShort();
|
||
|
|
|
||
|
|
switch (Type) {
|
||
|
|
case 0:
|
||
|
|
case 1: {
|
||
|
|
local Key = Get_Ani_Flag(Type);
|
||
|
|
local Value = Ro.readn('c');
|
||
|
|
AniObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case 3:
|
||
|
|
case 28: {
|
||
|
|
local Key = Get_Ani_Flag(Type);
|
||
|
|
local Value = Ro.GetUShort();
|
||
|
|
AniObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
case 18:
|
||
|
|
// print("残影解析");
|
||
|
|
//此处无解析 暂时先保证运行 残影功能暂时用不上
|
||
|
|
Ro.readn('c');
|
||
|
|
Ro.GetInt();
|
||
|
|
Ro.GetInt();
|
||
|
|
Ro.GetInt();
|
||
|
|
Ro.Get256();
|
||
|
|
Ro.Get256();
|
||
|
|
Ro.Get256();
|
||
|
|
Ro.Get256();
|
||
|
|
Ro.GetUShort();
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//读取每一个Img
|
||
|
|
for (local index = 0; index< Frame_Max; index++) {
|
||
|
|
//帧结构体对象
|
||
|
|
local FrameObject = {
|
||
|
|
AttackBox = [],
|
||
|
|
DamageBox = [],
|
||
|
|
Flag = {},
|
||
|
|
};
|
||
|
|
|
||
|
|
//碰撞框项目数量
|
||
|
|
local Ani_Box_Item_Count = Ro.GetUShort();
|
||
|
|
for (local _i = 0; _i< Ani_Box_Item_Count; _i++) {
|
||
|
|
local Box_Type = Ro.GetUShort();
|
||
|
|
local D_Box_b = [];
|
||
|
|
for (local _k = 0; _k< 6; _k++) {
|
||
|
|
D_Box_b.append(Ro.readn('i'));
|
||
|
|
}
|
||
|
|
if (Box_Type == 15) {
|
||
|
|
FrameObject.AttackBox.append(D_Box_b);
|
||
|
|
} else {
|
||
|
|
FrameObject.DamageBox.append(D_Box_b);
|
||
|
|
}
|
||
|
|
// //0是攻击框 1是受击框
|
||
|
|
// FrameObject.Box.rawset(15 - Box_Type, D_Box_b);
|
||
|
|
}
|
||
|
|
|
||
|
|
//调用的第几个Img
|
||
|
|
local Index_Buf = Ro.GetShort();
|
||
|
|
//如果等于-1说明是img路径为空
|
||
|
|
if (Index_Buf != 65535) {
|
||
|
|
FrameObject.Img_Path <- AniObject.Img_List[Index_Buf].tolower();
|
||
|
|
//Img中的PNG下标
|
||
|
|
FrameObject.Img_Index <- Ro.GetUShort();
|
||
|
|
} else {
|
||
|
|
FrameObject.Img_Path <- "";
|
||
|
|
FrameObject.Img_Index <- 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
//坐标
|
||
|
|
FrameObject.Pos <- {
|
||
|
|
x = Ro.readn('i'),
|
||
|
|
y = Ro.readn('i'),
|
||
|
|
};
|
||
|
|
|
||
|
|
//Img中的项目数量
|
||
|
|
local Img_Flag_Count = Ro.GetUShort();
|
||
|
|
for (local _o = 0; _o< Img_Flag_Count; _o++) {
|
||
|
|
local Img_Flag_Type = Ro.GetUShort();
|
||
|
|
local Key;
|
||
|
|
local Value;
|
||
|
|
switch (Img_Flag_Type) {
|
||
|
|
case 0:
|
||
|
|
case 1:
|
||
|
|
case 10:
|
||
|
|
Key = Get_Ani_Flag(Img_Flag_Type);
|
||
|
|
Value = Ro.readn('c');
|
||
|
|
FrameObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
Key = "COORD";
|
||
|
|
Value = Ro.GetUShort();
|
||
|
|
FrameObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
case 17:
|
||
|
|
Key = "PRELOAD";
|
||
|
|
Value = 1;
|
||
|
|
FrameObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
case 7:
|
||
|
|
Key = "IMAGE_RATE";
|
||
|
|
Value = {
|
||
|
|
x = Ro.GetFloat(),
|
||
|
|
y = Ro.GetFloat()
|
||
|
|
};
|
||
|
|
FrameObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
case 8:
|
||
|
|
Key = "IMAGE_ROTATE";
|
||
|
|
Value = Ro.GetFloat();
|
||
|
|
FrameObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
case 9:
|
||
|
|
Key = "RGBA";
|
||
|
|
Value = [
|
||
|
|
Ro.Get256(),
|
||
|
|
Ro.Get256(),
|
||
|
|
Ro.Get256(),
|
||
|
|
Ro.Get256(),
|
||
|
|
];
|
||
|
|
FrameObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
case 11:
|
||
|
|
local Effect_Type = Ro.GetUShort();
|
||
|
|
Key = "GRAPHIC_EFFECT_" + Get_Ani_Effect_Type(Effect_Type);
|
||
|
|
switch (Effect_Type) {
|
||
|
|
case 5:
|
||
|
|
Value = [Ro.Get256(), Ro.Get256(), Ro.Get256()];
|
||
|
|
break;
|
||
|
|
case 6:
|
||
|
|
Value = [Ro.GetShort(), Ro.GetShort()];
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
FrameObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
case 12:
|
||
|
|
Value = Ro.GetInt();
|
||
|
|
FrameObject.Delay <- Value;
|
||
|
|
break;
|
||
|
|
case 13:
|
||
|
|
Key = "DAMAGE_TYPE";
|
||
|
|
Value = Get_Ani_Damage_Type(Ro.GetUShort());
|
||
|
|
FrameObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
case 16:
|
||
|
|
local SoundTempSize = Ro.GetInt();
|
||
|
|
Key = "PLAY_SOUND";
|
||
|
|
Value = Ro.GetString(SoundTempSize);
|
||
|
|
FrameObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
case 23:
|
||
|
|
Key = "SET_FLAG";
|
||
|
|
Value = Ro.GetInt();
|
||
|
|
FrameObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
case 24:
|
||
|
|
Key = "FLIP_TYPE";
|
||
|
|
Value = Get_Ani_Flip_Type(Ro.GetUShort());
|
||
|
|
FrameObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
case 25:
|
||
|
|
Key = "LOOP_START";
|
||
|
|
FrameObject.Flag.rawset(Key, 1);
|
||
|
|
break;
|
||
|
|
case 26:
|
||
|
|
Key = "LOOP_END";
|
||
|
|
Value = Ro.GetInt();
|
||
|
|
FrameObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
case 27:
|
||
|
|
Key = "CLIP";
|
||
|
|
Value = [
|
||
|
|
Ro.GetShort(),
|
||
|
|
Ro.GetShort(),
|
||
|
|
Ro.GetShort(),
|
||
|
|
Ro.GetShort(),
|
||
|
|
];
|
||
|
|
FrameObject.Flag.rawset(Key, Value);
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//每一帧都是一个结构体 存入数组中
|
||
|
|
AniObject.Frame.append(FrameObject);
|
||
|
|
}
|
||
|
|
return AniObject;
|
||
|
|
}
|