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 != -1) {
 | |
|             FrameObject.Img_Path <- AniObject.Img_List[Index_Buf].tolower();
 | |
|             //Img中的PNG下标
 | |
|             FrameObject.Img_Index <- Ro.GetUShort();
 | |
|         } else {
 | |
|             FrameObject.Img_Path <- null;
 | |
|             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;
 | |
| } |