示例#1
0
        UClass GenerateType(AssetCabinet.TypeDefinition typeDef)
        {
            UClass cls = new UClass(typeDef.definitions.type, typeDef.definitions.identifier);

            for (int i = 0; i < typeDef.definitions.children.Length; i++)
            {
                AssetCabinet.TypeDefinitionString memberDef = typeDef.definitions.children[i];
                UType member = GetMember(memberDef);
                cls.Members.Add(member);
            }
            return(cls);
        }
示例#2
0
        public static bool CompareTypes(AssetCabinet.TypeDefinitionString tds1, AssetCabinet.TypeDefinitionString tds2)
        {
            if (tds1.type != tds2.type || tds1.identifier != tds2.identifier || tds1.children.Length != tds2.children.Length)
            {
                return(false);
            }

            for (int i = 0; i < tds1.children.Length; i++)
            {
                if (!CompareTypes(tds1.children[i], tds2.children[i]))
                {
                    return(false);
                }
            }
            return(true);
        }
示例#3
0
        UType GetMember(AssetCabinet.TypeDefinitionString member)
        {
            switch (member.type)
            {
            case "char":
                return(new Uchar(member.identifier));

            case "bool":
            case "UInt8":
                return(new Uint8(member.identifier));

            case "int":
                return(new Uint32(member.identifier));

            case "unsigned int":
                return(new Uuint32(member.identifier));

            case "float":
                return(new Ufloat(member.identifier));
            }

            UType cls;

            if (member.type.StartsWith("PPtr<") && member.type.EndsWith(">"))
            {
                cls = new UPPtr(file, member.identifier);
            }
            else if (member.type == "Array")
            {
                cls = new Uarray();
            }
            else
            {
                cls = new UClass(member.type, member.identifier);
            }
            for (int i = 0; i < member.children.Length; i++)
            {
                AssetCabinet.TypeDefinitionString memberDef = member.children[i];
                UType submember = GetMember(memberDef);
                cls.Members.Add(submember);
            }
            return(cls);
        }
示例#4
0
文件: TypeParser.cs 项目: kkdevs/sb3u
        UType GetMember(AssetCabinet.TypeDefinitionString member)
        {
            switch (member.type)
            {
            case "char":
                return(new Uchar(member.identifier, member.align()));

            case "bool":
            case "SInt8":
            case "UInt8":
                return(new Uint8(member.identifier, member.align()));

            case "SInt16":
                return(new Uint16(member.identifier, member.align()));

            case "UInt16":
                return(new Uuint16(member.identifier, member.align()));

            case "int":
                return(new Uint32(member.identifier, member.align()));

            case "unsigned int":
                return(new Uuint32(member.identifier, member.align()));

            case "int64":
                return(new Uint64(member.identifier, member.align()));

            case "UInt64":
                return(new Uuint64(member.identifier, member.align()));

            case "float":
                return(new Ufloat(member.identifier, member.align()));

            case "double":
                return(new Udouble(member.identifier, member.align()));
            }

            UType cls;

            if (member.type.StartsWith("PPtr<") && member.type.EndsWith(">"))
            {
                cls = new UPPtr(file, member.identifier, member.type, member.align());
            }
            else if (member.type == "Array")
            {
                cls = new Uarray(member.align());
            }
            else
            {
                if (member.type == "StreamedResource")
                {
                    cls = new UStreamedResource(member.type, member.identifier, member.align(), file);
                }
                else
                {
                    cls = new UClass(member.type, member.identifier, member.align());
                }
                if (member.children.Length == 0)
                {
                    Report.ReportLog("Warning! " + member.identifier + " has no members!");
                }
            }
            for (int i = 0; i < member.children.Length; i++)
            {
                AssetCabinet.TypeDefinitionString memberDef = member.children[i];
                UType submember = GetMember(memberDef);
                cls.Members.Add(submember);
            }
            return(cls);
        }