Пример #1
0
 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);
 }
Пример #2
0
 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);
 }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
 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();
            }
        }
Пример #7
0
 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);
 }