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