public static T[] GetItemArrayRaw <T>(PsoFile pso, Array_Structure arr) where T : struct { if ((arr.Count1 > 0) && (arr.Pointer > 0)) { var entry = pso.DataMappingSection.Entries[(int)arr.PointerDataIndex]; return(ConvertDataArrayRaw <T>(pso.DataSection.Data, entry.Offset, arr.Count1)); } return(null); }
public static ushort[] GetUShortArray(PsoFile pso, Array_Structure arr) { ushort[] ushorts = GetUShortArrayRaw(pso, arr); if (ushorts == null) { return(null); } for (int i = 0; i < ushorts.Length; i++) { ushorts[i] = MetaUtils.SwapBytes(ushorts[i]); } return(ushorts); }
public override void Parse(MetaFile meta, CMapData CMapData) { this.Meta = meta; this.MetaStructure = CMapData; this.Name = (MetaName)CMapData.name; this.Parent = (MetaName)CMapData.parent; this.Flags = CMapData.flags; this.ContentFlags = CMapData.contentFlags; this.StreamingExtentsMin = CMapData.streamingExtentsMin; this.StreamingExtentsMax = CMapData.streamingExtentsMax; this.EntitiesExtentsMin = CMapData.entitiesExtentsMin; this.EntitiesExtentsMax = CMapData.entitiesExtentsMax; this.Entities = MetaUtils.GetTypedDataArray <CEntityDef>(this.Meta, MetaName.CEntityDef)?.Select(e => { var obj = new MCEntityDef(this); obj.Parse(meta, e); return(obj); }).ToList() ?? new List <MCEntityDef>(); this.MloInstances = MetaUtils.GetTypedDataArray <CMloInstanceDef>(this.Meta, MetaName.CMloInstanceDef)?.Select(e => { var obj = new MCMloInstanceDef(); obj.Parse(meta, e); return(obj); }).ToList() ?? new List <MCMloInstanceDef>(); this.ContainerLods = new Array_Structure(); var boxOccluders = MetaUtils.ConvertDataArray <Unk_975711773>(meta, CMapData.boxOccluders); this.BoxOccluders = boxOccluders?.Select(e => { var msw = new MUnk_975711773(); msw.Parse(meta, e); return(msw); }).ToList(); var occludeModels = MetaUtils.ConvertDataArray <Unk_2741784237>(meta, CMapData.occludeModels); this.OccludeModels = occludeModels?.Select(e => { var msw = new MUnk_2741784237(); msw.Parse(meta, e); return(msw); }).ToList(); this.PhysicsDictionaries = CMapData.physicsDictionaries; this.InstancedData = new Mrage__fwInstancedMapData(); this.InstancedData.Parse(meta, CMapData.instancedData); var timeCycleModifiers = MetaUtils.ConvertDataArray <CTimeCycleModifier>(meta, CMapData.timeCycleModifiers); this.TimeCycleModifiers = timeCycleModifiers?.Select(e => { var msw = new MCTimeCycleModifier(); msw.Parse(meta, e); return(msw); }).ToList(); var carGenerators = MetaUtils.ConvertDataArray <CCarGen>(meta, CMapData.carGenerators); this.CarGenerators = carGenerators?.Select(e => { var msw = new MCCarGen(); msw.Parse(meta, e); return(msw); }).ToList(); this.LODLightsSOA = new MCLODLight(); this.LODLightsSOA.Parse(meta, CMapData.LODLightsSOA); this.DistantLODLightsSOA = new MCDistantLODLight(); this.DistantLODLightsSOA.Parse(meta, CMapData.DistantLODLightsSOA); this.Block = new MCBlockDesc(); this.Block.Parse(meta, CMapData.block); }
public static ushort[] GetUShortArrayRaw(PsoFile pso, Array_Structure arr) { byte[] data = pso.DataSection.Data; var entryid = arr.Pointer & 0xFFF; if ((entryid == 0) || (entryid > pso.DataMappingSection.EntriesCount)) { return(null); } var entryoffset = (arr.Pointer & 0xFFFFFF) >> 12; var arrentry = pso.DataMappingSection.Entries[(int)entryid - 1]; int totoffset = arrentry.Offset + (int)entryoffset; ushort[] readdata = ConvertDataArrayRaw <ushort>(data, totoffset, arr.Count1); return(readdata); }
public static T[] GetItemArray <T>(PsoFile pso, Array_Structure arr) where T : struct, IPsoSwapEnd { if ((arr.Count1 > 0) && (arr.Pointer > 0)) { var entry = pso.DataMappingSection.Entries[(int)arr.PointerDataIndex]; var res = ConvertDataArrayRaw <T>(pso.DataSection.Data, entry.Offset, arr.Count1); if (res != null) { for (int i = 0; i < res.Length; i++) { res[i].SwapEnd(); } } return(res); } return(null); }
public override void Build(MetaBuilder mb, bool isRoot = false) { this.MetaStructure.ImapLink = this.ImapLink; this.MetaStructure.PropInstanceList = new Array_Structure(); if (this.GrassInstanceList != null) { this.MetaStructure.GrassInstanceList = mb.AddItemArrayPtr(MetaName.rage__fwGrassInstanceListDef, this.GrassInstanceList.Select(e => { e.Build(mb); return(e.MetaStructure); }).ToArray()); } Mrage__fwGrassInstanceListDef.AddEnumAndStructureInfo(mb); Mrage__fwInstancedMapData.AddEnumAndStructureInfo(mb); if (isRoot) { mb.AddItem(this.MetaName, this.MetaStructure); this.Meta = mb.GetMeta(); } }
public static T[] GetObjectArray <T, U>(PsoFile pso, Array_Structure arr) where U : struct, IPsoSwapEnd where T : PsoClass <U>, new() { U[] items = GetItemArray <U>(pso, arr); if (items == null) { return(null); } if (items.Length == 0) { return(null); } T[] result = new T[items.Length]; for (int i = 0; i < items.Length; i++) { T newitem = new T(); newitem.Init(pso, ref items[i]); result[i] = newitem; } return(result); }