public MCMloRoomDef(MCMloArchetypeDef parent) { this.MetaName = MetaName.CMloRoomDef; this.MetaStructure = new CMloRoomDef(); Parent = parent; }
public override void Parse(MetaFile meta, CMapTypes CMapTypes) { this.Meta = meta; this.MetaStructure = CMapTypes; // this.Extensions = CMapTypes.extensions; // CBaseArchetypeDef + CMloArchetypeDef + CTimeArchetypeDef var archPtrs = MetaUtils.GetPointerArray(this.Meta, this.MetaStructure.archetypes); if (archPtrs != null) { for (int i = 0; i < archPtrs.Length; i++) { var ptr = archPtrs[i]; var block = Meta.GetBlock(ptr.BlockID); if (block == null) { continue; } if ((ptr.Offset < 0) || (block.Data == null) || (ptr.Offset >= block.Data.Length)) { continue; } byte[] data = Array.ConvertAll(block.Data.ToArray(), e => (byte)e); switch ((MetaName)block.StructureNameHash) { case MetaName.CBaseArchetypeDef: { var struc = PsoUtils.ConvertDataRaw <RageLib.Resources.GTA5.PC.Meta.CBaseArchetypeDef>(data, ptr.Offset); var arch = new MCBaseArchetypeDef(); arch.Parse(meta, struc); this.Archetypes.Add(arch); break; } case MetaName.CMloArchetypeDef: { var struc = PsoUtils.ConvertDataRaw <RageLib.Resources.GTA5.PC.Meta.CMloArchetypeDef>(data, ptr.Offset); var arch = new MCMloArchetypeDef(); arch.Parse(meta, struc); this.MloArchetypes.Add(arch); break; } case MetaName.CTimeArchetypeDef: { var struc = PsoUtils.ConvertDataRaw <RageLib.Resources.GTA5.PC.Meta.CTimeArchetypeDef>(data, ptr.Offset); var arch = new MCTimeArchetypeDef(); arch.Parse(meta, struc); this.TimeArchetypes.Add(arch); break; } default: continue; } } } this.Name = (MetaName)CMapTypes.name; // this.Dependencies = CMapTypes.dependencies; var compositeEntityTypes = MetaUtils.ConvertDataArray <CCompositeEntityType>(meta, CMapTypes.compositeEntityTypes); this.CompositeEntityTypes = compositeEntityTypes?.Select(e => { var msw = new MCCompositeEntityType(); msw.Parse(meta, e); return(msw); }).ToList(); }
public override void Build(MetaBuilder mb, bool isRoot = false) { this.MetaStructure.lodDist = this.LodDist; this.MetaStructure.flags = this.Flags; this.MetaStructure.specialAttribute = this.SpecialAttribute; this.MetaStructure.bbMin = this.BbMin; this.MetaStructure.bbMax = this.BbMax; this.MetaStructure.bsCentre = this.BsCentre; this.MetaStructure.bsRadius = this.BsRadius; this.MetaStructure.hdTextureDist = this.HdTextureDist; this.MetaStructure.name = this.Name; this.MetaStructure.textureDictionary = this.TextureDictionary; this.MetaStructure.clipDictionary = this.ClipDictionary; this.MetaStructure.drawableDictionary = this.DrawableDictionary; this.MetaStructure.physicsDictionary = this.PhysicsDictionary; this.MetaStructure.assetType = this.AssetType; this.MetaStructure.assetName = this.AssetName; // CEntityDef + ? var entPtrs = new List <MetaPOINTER>(); this.AddMetaPointers(mb, entPtrs, MetaName.CEntityDef, this.Entities.Select(e => { e.Build(mb); return(e.MetaStructure); })); this.MetaStructure.entities = mb.AddPointerArray(entPtrs.ToArray()); if (this.Rooms != null) { this.MetaStructure.rooms = mb.AddItemArrayPtr(MetaName.CMloRoomDef, this.Rooms.Select(e => { e.Build(mb); return(e.MetaStructure); }).ToArray()); } MCMloRoomDef.AddEnumAndStructureInfo(mb); if (this.Portals != null) { this.MetaStructure.portals = mb.AddItemArrayPtr(MetaName.CMloPortalDef, this.Portals.Select(e => { e.Build(mb); return(e.MetaStructure); }).ToArray()); } MCMloPortalDef.AddEnumAndStructureInfo(mb); if (this.EntitySets != null) { this.MetaStructure.entitySets = mb.AddItemArrayPtr(MetaName.CMloEntitySet, this.EntitySets.Select(e => { e.Build(mb); return(e.MetaStructure); }).ToArray()); } MCMloEntitySet.AddEnumAndStructureInfo(mb); if (this.TimeCycleModifiers != null) { this.MetaStructure.timeCycleModifiers = mb.AddItemArrayPtr(MetaName.CMloTimeCycleModifier, this.TimeCycleModifiers.Select(e => { e.Build(mb); return(e.MetaStructure); }).ToArray()); } MCMloTimeCycleModifier.AddEnumAndStructureInfo(mb); this.MetaStructure.mloFlags = this.MloFlags; // Extensions var extPtrs = new List <MetaPOINTER>(); if (this.ExtensionDefAudioCollisionSettings != null) { this.AddMetaPointers(mb, extPtrs, MetaName.CExtensionDefAudioCollisionSettings, this.ExtensionDefAudioCollisionSettings.Select(e => { e.Build(mb); return(e.MetaStructure); })); } if (this.ExtensionDefAudioEmitters != null) { this.AddMetaPointers(mb, extPtrs, MetaName.CExtensionDefAudioEmitter, this.ExtensionDefAudioEmitters.Select(e => { e.Build(mb); return(e.MetaStructure); })); } if (this.ExtensionDefBuoyancies != null) { this.AddMetaPointers(mb, extPtrs, MetaName.CExtensionDefBuoyancy, this.ExtensionDefBuoyancies.Select(e => { e.Build(mb); return(e.MetaStructure); })); } if (this.ExtensionDefExplosionEffects != null) { this.AddMetaPointers(mb, extPtrs, MetaName.CExtensionDefExplosionEffect, this.ExtensionDefExplosionEffects.Select(e => { e.Build(mb); return(e.MetaStructure); })); } if (this.ExtensionDefExpressions != null) { this.AddMetaPointers(mb, extPtrs, MetaName.CExtensionDefExpression, this.ExtensionDefExpressions.Select(e => { e.Build(mb); return(e.MetaStructure); })); } if (this.ExtensionDefLadders != null) { this.AddMetaPointers(mb, extPtrs, MetaName.CExtensionDefLadder, this.ExtensionDefLadders.Select(e => { e.Build(mb); return(e.MetaStructure); })); } if (this.ExtensionDefLightShafts != null) { this.AddMetaPointers(mb, extPtrs, MetaName.CExtensionDefLightShaft, this.ExtensionDefLightShafts.Select(e => { e.Build(mb); return(e.MetaStructure); })); } if (this.ExtensionDefParticleEffects != null) { this.AddMetaPointers(mb, extPtrs, MetaName.CExtensionDefParticleEffect, this.ExtensionDefParticleEffects.Select(e => { e.Build(mb); return(e.MetaStructure); })); } if (this.ExtensionDefProcObjects != null) { this.AddMetaPointers(mb, extPtrs, MetaName.CExtensionDefProcObject, this.ExtensionDefProcObjects.Select(e => { e.Build(mb); return(e.MetaStructure); })); } if (this.ExtensionDefSpawnPoints != null) { this.AddMetaPointers(mb, extPtrs, MetaName.CExtensionDefSpawnPoint, this.ExtensionDefSpawnPoints.Select(e => { e.Build(mb); return(e.MetaStructure); })); } if (this.ExtensionDefWindDisturbances != null) { this.AddMetaPointers(mb, extPtrs, MetaName.CExtensionDefWindDisturbance, this.ExtensionDefWindDisturbances.Select(e => { e.Build(mb); return(e.MetaStructure); })); } this.MetaStructure.extensions = mb.AddPointerArray(extPtrs.ToArray()); MCMloArchetypeDef.AddEnumAndStructureInfo(mb); if (isRoot) { mb.AddItem(this.MetaName, this.MetaStructure); this.Meta = mb.GetMeta(); } }