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; | ||
|  | } |