| 
									
										
										
										
											2024-12-11 15:08:57 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 文件名: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路径为空 | 
					
						
							| 
									
										
										
										
											2024-12-17 09:42:05 +08:00
										 |  |  |         if (Index_Buf != -1) { | 
					
						
							| 
									
										
										
										
											2024-12-11 15:08:57 +08:00
										 |  |  |             FrameObject.Img_Path <- AniObject.Img_List[Index_Buf].tolower(); | 
					
						
							|  |  |  |             //Img中的PNG下标 | 
					
						
							|  |  |  |             FrameObject.Img_Index <- Ro.GetUShort(); | 
					
						
							|  |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2024-12-17 09:42:05 +08:00
										 |  |  |             FrameObject.Img_Path <- null; | 
					
						
							| 
									
										
										
										
											2024-12-11 15:08:57 +08:00
										 |  |  |             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; | 
					
						
							|  |  |  | } |