Replaced CMapData and CEntityDef property gets with field gets for performance

This commit is contained in:
dexy 2019-01-09 18:09:12 +11:00
parent dd3b8bdab4
commit 6c244c6406
5 changed files with 51 additions and 52 deletions

View File

@ -109,7 +109,7 @@ namespace CodeWalker.GameFiles
} }
} }
physicsDictionaries = MetaTypes.GetHashArray(Meta, CMapData.physicsDictionaries); physicsDictionaries = MetaTypes.GetHashArray(Meta, _CMapData.physicsDictionaries);
EnsureEntities(Meta); //load all the entity data and create the YmapEntityDefs EnsureEntities(Meta); //load all the entity data and create the YmapEntityDefs
@ -254,7 +254,7 @@ namespace CodeWalker.GameFiles
if (CMloInstanceDefs != null) if (CMloInstanceDefs != null)
{ } { }
var eptrs = MetaTypes.GetPointerArray(Meta, CMapData.entities); var eptrs = MetaTypes.GetPointerArray(Meta, _CMapData.entities);
//CEntityDefs = MetaTypes.ConvertDataArray<CEntityDef>(Meta, MetaName.CEntityDef, CMapData.entities); //CEntityDefs = MetaTypes.ConvertDataArray<CEntityDef>(Meta, MetaName.CEntityDef, CMapData.entities);
CEntityDefs = MetaTypes.GetTypedDataArray<CEntityDef>(Meta, MetaName.CEntityDef); CEntityDefs = MetaTypes.GetTypedDataArray<CEntityDef>(Meta, MetaName.CEntityDef);
if (CEntityDefs != null) if (CEntityDefs != null)
@ -303,7 +303,7 @@ namespace CodeWalker.GameFiles
for (int i = 0; i < alldefs.Count; i++) for (int i = 0; i < alldefs.Count; i++)
{ {
YmapEntityDef d = alldefs[i]; YmapEntityDef d = alldefs[i];
int pind = d.CEntityDef.parentIndex; int pind = d._CEntityDef.parentIndex;
bool isroot = false; bool isroot = false;
if ((pind < 0) || (pind >= alldefs.Count) || (pind >= i)) //index check? might be a problem if ((pind < 0) || (pind >= alldefs.Count) || (pind >= i)) //index check? might be a problem
{ {
@ -312,9 +312,9 @@ namespace CodeWalker.GameFiles
else else
{ {
YmapEntityDef p = alldefs[pind]; YmapEntityDef p = alldefs[pind];
if ((p.CEntityDef.lodLevel <= d.CEntityDef.lodLevel) || if ((p._CEntityDef.lodLevel <= d._CEntityDef.lodLevel) ||
((p.CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) && ((p._CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) &&
(d.CEntityDef.lodLevel != Unk_1264241711.LODTYPES_DEPTH_ORPHANHD))) (d._CEntityDef.lodLevel != Unk_1264241711.LODTYPES_DEPTH_ORPHANHD)))
{ {
isroot = true; isroot = true;
p = null; p = null;
@ -346,7 +346,7 @@ namespace CodeWalker.GameFiles
foreach (var ent in AllEntities) foreach (var ent in AllEntities)
{ {
ent.Extensions = MetaTypes.GetExtensions(Meta, ent.CEntityDef.extensions); ent.Extensions = MetaTypes.GetExtensions(Meta, ent._CEntityDef.extensions);
} }
} }
@ -354,9 +354,9 @@ namespace CodeWalker.GameFiles
private void EnsureInstances(Meta Meta) private void EnsureInstances(Meta Meta)
{ {
if (CMapData.instancedData.GrassInstanceList.Count1 != 0) if (_CMapData.instancedData.GrassInstanceList.Count1 != 0)
{ {
rage__fwGrassInstanceListDef[] batches = MetaTypes.ConvertDataArray<rage__fwGrassInstanceListDef>(Meta, MetaName.rage__fwGrassInstanceListDef, CMapData.instancedData.GrassInstanceList); rage__fwGrassInstanceListDef[] batches = MetaTypes.ConvertDataArray<rage__fwGrassInstanceListDef>(Meta, MetaName.rage__fwGrassInstanceListDef, _CMapData.instancedData.GrassInstanceList);
YmapGrassInstanceBatch[] gbatches = new YmapGrassInstanceBatch[batches.Length]; YmapGrassInstanceBatch[] gbatches = new YmapGrassInstanceBatch[batches.Length];
for (int i = 0; i < batches.Length; i++) for (int i = 0; i < batches.Length; i++)
{ {
@ -374,7 +374,7 @@ namespace CodeWalker.GameFiles
} }
GrassInstanceBatches = gbatches; GrassInstanceBatches = gbatches;
} }
if (CMapData.instancedData.PropInstanceList.Count1 != 0) if (_CMapData.instancedData.PropInstanceList.Count1 != 0)
{ {
} }
} }
@ -382,27 +382,27 @@ namespace CodeWalker.GameFiles
private void EnsureLodLights(Meta Meta) private void EnsureLodLights(Meta Meta)
{ {
//TODO! //TODO!
if (CMapData.LODLightsSOA.direction.Count1 != 0) if (_CMapData.LODLightsSOA.direction.Count1 != 0)
{ {
} }
} }
private void EnsureDistantLODLights(Meta Meta) private void EnsureDistantLODLights(Meta Meta)
{ {
if (CMapData.DistantLODLightsSOA.position.Count1 != 0) if (_CMapData.DistantLODLightsSOA.position.Count1 != 0)
{ {
DistantLODLights = new YmapDistantLODLights(); DistantLODLights = new YmapDistantLODLights();
DistantLODLights.Ymap = this; DistantLODLights.Ymap = this;
DistantLODLights.CDistantLODLight = CMapData.DistantLODLightsSOA; DistantLODLights.CDistantLODLight = _CMapData.DistantLODLightsSOA;
DistantLODLights.colours = MetaTypes.GetUintArray(Meta, CMapData.DistantLODLightsSOA.RGBI); DistantLODLights.colours = MetaTypes.GetUintArray(Meta, _CMapData.DistantLODLightsSOA.RGBI);
DistantLODLights.positions = MetaTypes.ConvertDataArray<MetaVECTOR3>(Meta, MetaName.VECTOR3, CMapData.DistantLODLightsSOA.position); DistantLODLights.positions = MetaTypes.ConvertDataArray<MetaVECTOR3>(Meta, MetaName.VECTOR3, _CMapData.DistantLODLightsSOA.position);
DistantLODLights.CalcBB(); DistantLODLights.CalcBB();
} }
} }
private void EnsureTimeCycleModifiers(Meta Meta) private void EnsureTimeCycleModifiers(Meta Meta)
{ {
CTimeCycleModifiers = MetaTypes.ConvertDataArray<CTimeCycleModifier>(Meta, MetaName.CTimeCycleModifier, CMapData.timeCycleModifiers); CTimeCycleModifiers = MetaTypes.ConvertDataArray<CTimeCycleModifier>(Meta, MetaName.CTimeCycleModifier, _CMapData.timeCycleModifiers);
if (CTimeCycleModifiers != null) if (CTimeCycleModifiers != null)
{ {
TimeCycleModifiers = new YmapTimeCycleModifier[CTimeCycleModifiers.Length]; TimeCycleModifiers = new YmapTimeCycleModifier[CTimeCycleModifiers.Length];
@ -421,7 +421,7 @@ namespace CodeWalker.GameFiles
private void EnsureCarGens(Meta Meta) private void EnsureCarGens(Meta Meta)
{ {
CCarGens = MetaTypes.ConvertDataArray<CCarGen>(Meta, MetaName.CCarGen, CMapData.carGenerators); CCarGens = MetaTypes.ConvertDataArray<CCarGen>(Meta, MetaName.CCarGen, _CMapData.carGenerators);
if (CCarGens != null) if (CCarGens != null)
{ {
//string str = MetaTypes.GetTypesInitString(resentry, Meta); //to generate structinfos and enuminfos //string str = MetaTypes.GetTypesInitString(resentry, Meta); //to generate structinfos and enuminfos
@ -435,7 +435,7 @@ namespace CodeWalker.GameFiles
private void EnsureBoxOccluders(Meta meta) private void EnsureBoxOccluders(Meta meta)
{ {
CBoxOccluders = MetaTypes.ConvertDataArray<BoxOccluder>(Meta, MetaName.BoxOccluder, CMapData.boxOccluders); CBoxOccluders = MetaTypes.ConvertDataArray<BoxOccluder>(Meta, MetaName.BoxOccluder, _CMapData.boxOccluders);
if (CBoxOccluders != null) if (CBoxOccluders != null)
{ {
BoxOccluders = new YmapBoxOccluder[CBoxOccluders.Length]; BoxOccluders = new YmapBoxOccluder[CBoxOccluders.Length];
@ -449,7 +449,7 @@ namespace CodeWalker.GameFiles
private void EnsureOccludeModels(Meta meta) private void EnsureOccludeModels(Meta meta)
{ {
COccludeModels = MetaTypes.ConvertDataArray<OccludeModel>(Meta, MetaName.OccludeModel, CMapData.occludeModels); COccludeModels = MetaTypes.ConvertDataArray<OccludeModel>(Meta, MetaName.OccludeModel, _CMapData.occludeModels);
if (COccludeModels != null) if (COccludeModels != null)
{ {
OccludeModels = new YmapOccludeModel[COccludeModels.Length]; OccludeModels = new YmapOccludeModel[COccludeModels.Length];
@ -467,7 +467,7 @@ namespace CodeWalker.GameFiles
{ {
//TODO: containerLods //TODO: containerLods
if (CMapData.containerLods.Count1 > 0) if (_CMapData.containerLods.Count1 > 0)
{ {
//string str = MetaTypes.GetTypesInitString(Meta); //to generate structinfos and enuminfos //string str = MetaTypes.GetTypesInitString(Meta); //to generate structinfos and enuminfos
@ -500,7 +500,7 @@ namespace CodeWalker.GameFiles
} }
else else
{ {
centdefs.Add(ent.CEntityDef); centdefs.Add(ent._CEntityDef);
} }
} }
@ -779,10 +779,10 @@ namespace CodeWalker.GameFiles
{ {
foreach (var rcent in cmap.RootEntities) foreach (var rcent in cmap.RootEntities)
{ {
int pind = rcent.CEntityDef.parentIndex; int pind = rcent._CEntityDef.parentIndex;
if (pind < 0) if (pind < 0)
{ {
if (rcent.CEntityDef.lodLevel != Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) if (rcent._CEntityDef.lodLevel != Unk_1264241711.LODTYPES_DEPTH_ORPHANHD)
{ {
} }
//pind = 0; //pind = 0;
@ -985,8 +985,7 @@ namespace CodeWalker.GameFiles
{ {
foreach (var yent in AllEntities) foreach (var yent in AllEntities)
{ {
var cent = yent.CEntityDef; switch (yent._CEntityDef.lodLevel)
switch (cent.lodLevel)
{ {
case Unk_1264241711.LODTYPES_DEPTH_ORPHANHD: case Unk_1264241711.LODTYPES_DEPTH_ORPHANHD:
case Unk_1264241711.LODTYPES_DEPTH_HD: case Unk_1264241711.LODTYPES_DEPTH_HD:
@ -1185,7 +1184,7 @@ namespace CodeWalker.GameFiles
for (int i = 0; i < AllEntities.Length; i++) for (int i = 0; i < AllEntities.Length; i++)
{ {
var ent = AllEntities[i]; var ent = AllEntities[i];
var arch = gfc.GetArchetype(ent.CEntityDef.archetypeName); var arch = gfc.GetArchetype(ent._CEntityDef.archetypeName);
ent.SetArchetype(arch); ent.SetArchetype(arch);
if (ent.IsMlo) ent.MloInstance.InitYmapEntityArchetypes(gfc); if (ent.IsMlo) ent.MloInstance.InitYmapEntityArchetypes(gfc);
} }
@ -1283,9 +1282,9 @@ namespace CodeWalker.GameFiles
Ymap = ymap; Ymap = ymap;
Index = index; Index = index;
CEntityDef = def; CEntityDef = def;
Scale = new Vector3(new Vector2(CEntityDef.scaleXY), CEntityDef.scaleZ); Scale = new Vector3(new Vector2(_CEntityDef.scaleXY), _CEntityDef.scaleZ);
Position = CEntityDef.position; Position = _CEntityDef.position;
Orientation = new Quaternion(CEntityDef.rotation); Orientation = new Quaternion(_CEntityDef.rotation);
if (Orientation != Quaternion.Identity) if (Orientation != Quaternion.Identity)
{ {
Orientation = Quaternion.Invert(Orientation); Orientation = Quaternion.Invert(Orientation);
@ -1301,9 +1300,9 @@ namespace CodeWalker.GameFiles
Ymap = ymap; Ymap = ymap;
Index = index; Index = index;
CEntityDef = mlo.CEntityDef; CEntityDef = mlo.CEntityDef;
Scale = new Vector3(new Vector2(CEntityDef.scaleXY), CEntityDef.scaleZ); Scale = new Vector3(new Vector2(_CEntityDef.scaleXY), _CEntityDef.scaleZ);
Position = CEntityDef.position; Position = _CEntityDef.position;
Orientation = new Quaternion(CEntityDef.rotation); Orientation = new Quaternion(_CEntityDef.rotation);
//if (Orientation != Quaternion.Identity) //if (Orientation != Quaternion.Identity)
//{ //{
// Orientation = Quaternion.Invert(Orientation); // Orientation = Quaternion.Invert(Orientation);
@ -1363,7 +1362,7 @@ namespace CodeWalker.GameFiles
if (BSRadius == 0.0f) if (BSRadius == 0.0f)
{ {
BSRadius = CEntityDef.lodDist;//need something so it doesn't get culled... BSRadius = _CEntityDef.lodDist;//need something so it doesn't get culled...
} }
} }
else if (IsMlo) // archetype is no longer an mlo else if (IsMlo) // archetype is no longer an mlo
@ -1551,7 +1550,7 @@ namespace CodeWalker.GameFiles
ChildList = new List<YmapEntityDef>(); ChildList = new List<YmapEntityDef>();
} }
c.Parent = this; c.Parent = this;
c.ParentName = CEntityDef.archetypeName; c.ParentName = _CEntityDef.archetypeName;
ChildList.Add(c); ChildList.Add(c);
} }
@ -1594,7 +1593,7 @@ namespace CodeWalker.GameFiles
public override string ToString() public override string ToString()
{ {
return CEntityDef.ToString() + ((ChildList != null) ? (" (" + ChildList.Count.ToString() + " children) ") : " ") + CEntityDef.lodLevel.ToString(); return _CEntityDef.ToString() + ((ChildList != null) ? (" (" + ChildList.Count.ToString() + " children) ") : " ") + _CEntityDef.lodLevel.ToString();
} }
} }

View File

@ -433,7 +433,7 @@ namespace CodeWalker.GameFiles
for (int j = 0; j < Entities.Length; j++) for (int j = 0; j < Entities.Length; j++)
{ {
var ient = Entities[j]; var ient = Entities[j];
var iarch = gfc.GetArchetype(ient.CEntityDef.archetypeName); var iarch = gfc.GetArchetype(ient._CEntityDef.archetypeName);
ient.SetArchetype(iarch); ient.SetArchetype(iarch);
if (iarch == null) if (iarch == null)
@ -453,7 +453,7 @@ namespace CodeWalker.GameFiles
for (int i = 0; i < entities.Count; i++) for (int i = 0; i < entities.Count; i++)
{ {
var ient = entities[i]; var ient = entities[i];
var iarch = gfc.GetArchetype(ient.CEntityDef.archetypeName); var iarch = gfc.GetArchetype(ient._CEntityDef.archetypeName);
ient.SetArchetype(iarch); ient.SetArchetype(iarch);
if (iarch == null) if (iarch == null)

View File

@ -1063,7 +1063,7 @@ namespace CodeWalker.World
{ {
if (!IsYmapAvailable(hash, hour, weather)) break; if (!IsYmapAvailable(hash, hour, weather)) break;
ymaps[hash] = ymap; ymaps[hash] = ymap;
hash = ymap.CMapData.parent; hash = ymap._CMapData.parent;
if (ymaps.ContainsKey(hash)) break; if (ymaps.ContainsKey(hash)) break;
ymap = (hash > 0) ? GameFileCache.GetYmap(hash) : null; ymap = (hash > 0) ? GameFileCache.GetYmap(hash) : null;
} }

View File

@ -1544,11 +1544,11 @@ namespace CodeWalker.Rendering
if (ymap.RootEntities != null) if (ymap.RootEntities != null)
{ {
YmapFile pymap; YmapFile pymap;
renderworldVisibleYmapDict.TryGetValue(ymap.CMapData.parent, out pymap); renderworldVisibleYmapDict.TryGetValue(ymap._CMapData.parent, out pymap);
for (int i = 0; i < ymap.RootEntities.Length; i++) for (int i = 0; i < ymap.RootEntities.Length; i++)
{ {
var ent = ymap.RootEntities[i]; var ent = ymap.RootEntities[i];
int pind = ent.CEntityDef.parentIndex; int pind = ent._CEntityDef.parentIndex;
if (pind >= 0) //connect root entities to parents if they have them.. if (pind >= 0) //connect root entities to parents if they have them..
{ {
YmapEntityDef p = null; YmapEntityDef p = null;
@ -1558,7 +1558,7 @@ namespace CodeWalker.Rendering
{ {
p = pymap.AllEntities[pind]; p = pymap.AllEntities[pind];
ent.Parent = p; ent.Parent = p;
ent.ParentName = p.CEntityDef.archetypeName; ent.ParentName = p._CEntityDef.archetypeName;
} }
} }
else else
@ -1684,8 +1684,8 @@ namespace CodeWalker.Rendering
} }
var loddist = ent.CEntityDef.lodDist; var loddist = ent._CEntityDef.lodDist;
var cloddist = ent.CEntityDef.childLodDist; var cloddist = ent._CEntityDef.childLodDist;
if (loddist <= 0.0f)//usually -1 or -2 if (loddist <= 0.0f)//usually -1 or -2
{ {
@ -1694,7 +1694,7 @@ namespace CodeWalker.Rendering
loddist = ent.Archetype.LodDist * renderworldLodDistMult; loddist = ent.Archetype.LodDist * renderworldLodDistMult;
} }
} }
else if (ent.CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) else if (ent._CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD)
{ {
loddist *= renderworldDetailDistMult * 1.5f; //orphan view dist adjustment... loddist *= renderworldDetailDistMult * 1.5f; //orphan view dist adjustment...
} }
@ -1719,19 +1719,19 @@ namespace CodeWalker.Rendering
ent.Distance = dist; ent.Distance = dist;
ent.IsVisible = (dist <= loddist); ent.IsVisible = (dist <= loddist);
ent.ChildrenVisible = (dist <= cloddist) && (ent.CEntityDef.numChildren > 0); ent.ChildrenVisible = (dist <= cloddist) && (ent._CEntityDef.numChildren > 0);
if (renderworldMaxLOD != Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) if (renderworldMaxLOD != Unk_1264241711.LODTYPES_DEPTH_ORPHANHD)
{ {
if ((ent.CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) || if ((ent._CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) ||
(ent.CEntityDef.lodLevel < renderworldMaxLOD)) (ent._CEntityDef.lodLevel < renderworldMaxLOD))
{ {
ent.IsVisible = false; ent.IsVisible = false;
ent.ChildrenVisible = false; ent.ChildrenVisible = false;
} }
if (ent.CEntityDef.lodLevel == renderworldMaxLOD) if (ent._CEntityDef.lodLevel == renderworldMaxLOD)
{ {
ent.ChildrenVisible = false; ent.ChildrenVisible = false;
} }
@ -2008,7 +2008,7 @@ namespace CodeWalker.Rendering
float dist = (camrel + entity.BSCenter).Length(); float dist = (camrel + entity.BSCenter).Length();
entity.Distance = dist; entity.Distance = dist;
float rad = arch.BSRadius; float rad = arch.BSRadius;
float loddist = entity.CEntityDef.lodDist; float loddist = entity._CEntityDef.lodDist;
if (loddist < 1.0f) if (loddist < 1.0f)
{ {
loddist = 200.0f; loddist = 200.0f;
@ -2384,7 +2384,7 @@ namespace CodeWalker.Rendering
position = entity.Position; position = entity.Position;
scale = entity.Scale; scale = entity.Scale;
orientation = entity.Orientation; orientation = entity.Orientation;
tintPaletteIndex = entity.CEntityDef.tintValue; tintPaletteIndex = entity._CEntityDef.tintValue;
bbmin = entity.BBMin; bbmin = entity.BBMin;
bbmax = entity.BBMax; bbmax = entity.BBMax;
bscen = entity.BSCenter; bscen = entity.BSCenter;

View File

@ -338,7 +338,7 @@ namespace CodeWalker
} }
else if (EntityDef != null) else if (EntityDef != null)
{ {
name = EntityDef.CEntityDef.archetypeName.ToString(); name = EntityDef._CEntityDef.archetypeName.ToString();
} }
else if (Archetype != null) else if (Archetype != null)
{ {
@ -424,7 +424,7 @@ namespace CodeWalker
} }
else if (EntityDef != null) else if (EntityDef != null)
{ {
name = EntityDef.CEntityDef.archetypeName.ToString(); name = EntityDef._CEntityDef.archetypeName.ToString();
} }
else if (Archetype != null) else if (Archetype != null)
{ {