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