using System; using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; using Cpp2IlInjected; using RecRoom.Core.Creation.Shapes; using RecRoom.Persistence; using Unity.Jobs; using UnityEngine; namespace ClusterLOD { // Token: 0x02001342 RID: 4930 [Token(Token = "0x2001342")] public class ClusterLODManager : MonoBehaviour { // Token: 0x170011CF RID: 4559 // (get) Token: 0x06006E93 RID: 28307 RVA: 0x00184328 File Offset: 0x00182528 // (set) Token: 0x06006E94 RID: 28308 RVA: 0x0018433C File Offset: 0x0018253C [Token(Token = "0x170011CF")] public ClusterLODConfig Config { [Token(Token = "0x6006E93")] [Address(RVA = "0x4157B0", Offset = "0x4147B0", VA = "0x1804157B0")] get; [Token(Token = "0x6006E94")] [Address(RVA = "0x4157F0", Offset = "0x4147F0", VA = "0x1804157F0")] private set; } // Token: 0x170011D0 RID: 4560 // (get) Token: 0x06006E95 RID: 28309 RVA: 0x0000220F File Offset: 0x0000040F // (set) Token: 0x06006E96 RID: 28310 RVA: 0x00184350 File Offset: 0x00182550 [Token(Token = "0x170011D0")] public Vector3 EyePos { [Token(Token = "0x6006E95")] [Address(RVA = "0x169B820", Offset = "0x169A820", VA = "0x18169B820")] [CompilerGenerated] get { throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method."); } [Token(Token = "0x6006E96")] [Address(RVA = "0x169B420", Offset = "0x169A420", VA = "0x18169B420")] [CompilerGenerated] private set { float z = value.z; this.k__BackingField.z = z; } } // Token: 0x170011D1 RID: 4561 // (get) Token: 0x06006E97 RID: 28311 RVA: 0x00184370 File Offset: 0x00182570 [Token(Token = "0x170011D1")] public static ClusterLODManager Instance { [Token(Token = "0x6006E97")] [Address(RVA = "0x1F3F680", Offset = "0x1F3E680", VA = "0x181F3F680")] get { return ClusterLODManager._instance; } } // Token: 0x06006E98 RID: 28312 RVA: 0x00184384 File Offset: 0x00182584 [Token(Token = "0x6006E98")] [Address(RVA = "0x1F3DA30", Offset = "0x1F3CA30", VA = "0x181F3DA30")] private void OnDestroy() { CreateMeshFromClusterJob createMeshFromClusterJob = this.ClusterMeshAssetCache.createMeshFromClusterJob; JobHandle k__BackingField = createMeshFromClusterJob.k__BackingField; createMeshFromClusterJob.sharedResultMesh.Dispose(); createMeshFromClusterJob.optimizationData.Dispose(); bool flag; if (flag) { } if (NetworkedSingletonMonoBehaviour.ONCPNMDGGKG) { RoomPersistenceManager instance = NetworkedSingletonMonoBehaviour.ONCPNMDGGKG; Action action = new Action(this.OnRoomStartLoad); instance.OEEEEIDBCDJ -= action; RoomPersistenceManager instance2 = NetworkedSingletonMonoBehaviour.ONCPNMDGGKG; Action action2 = new Action(this.OnRoomStartLoad); instance2.NNKFGEALMHJ -= action2; } } // Token: 0x06006E99 RID: 28313 RVA: 0x0018440C File Offset: 0x0018260C [Token(Token = "0x6006E99")] [Address(RVA = "0x1F3E6A0", Offset = "0x1F3D6A0", VA = "0x181F3E6A0")] public static void SetSpawnPosition(Vector3 spawnPos) { ClusterLODManager instance = ClusterLODManager._instance; int num = 0; if (instance != num) { ClusterLODManager instance2 = ClusterLODManager._instance; float z = spawnPos.z; instance2.k__BackingField.z = z; } } // Token: 0x170011D2 RID: 4562 // (get) Token: 0x06006E9A RID: 28314 RVA: 0x0018444C File Offset: 0x0018264C [Token(Token = "0x170011D2")] public static bool WorldCreated { [Token(Token = "0x6006E9A")] [Address(RVA = "0x1F3F740", Offset = "0x1F3E740", VA = "0x181F3F740")] get { ClusterLODManager instance = ClusterLODManager._instance; int num = 0; return instance == num || ClusterLODManager._instance.CurrentState == ClusterLODManager.State.Running; } } // Token: 0x170011D3 RID: 4563 // (get) Token: 0x06006E9B RID: 28315 RVA: 0x00184480 File Offset: 0x00182680 [Token(Token = "0x170011D3")] public static bool ComponentCollectionEnabled { [Token(Token = "0x6006E9B")] [Address(RVA = "0x1F3F570", Offset = "0x1F3E570", VA = "0x181F3F570")] get { ClusterLODManager instance = ClusterLODManager._instance; int num = 0; bool flag = instance != num; if (!flag) { return flag; } return ClusterLODManager._instance.CurrentState == ClusterLODManager.State.Waiting || ClusterLODManager._instance.CurrentState == ClusterLODManager.State.Collecting; } } // Token: 0x06006E9C RID: 28316 RVA: 0x0000220F File Offset: 0x0000040F [Token(Token = "0x6006E9C")] [Address(RVA = "0x1F3CE60", Offset = "0x1F3BE60", VA = "0x181F3CE60")] private void Awake() { throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method."); } // Token: 0x06006E9D RID: 28317 RVA: 0x001844C8 File Offset: 0x001826C8 [Token(Token = "0x6006E9D")] [Address(RVA = "0x1F3ED50", Offset = "0x1F3DD50", VA = "0x181F3ED50")] private void StopCreateWorld() { Coroutine coroutine = this.createWorldCoroutine; if (coroutine != 0) { base.StopCoroutine(coroutine); this.createWorldCoroutine = (ulong)0L; } Coroutine coroutine2 = this.assignLODsCoroutine; if (coroutine2 != 0) { base.StopCoroutine(coroutine2); this.assignLODsCoroutine = (ulong)0L; } } // Token: 0x06006E9E RID: 28318 RVA: 0x0018450C File Offset: 0x0018270C [Token(Token = "0x6006E9E")] [Address(RVA = "0x1F3DC60", Offset = "0x1F3CC60", VA = "0x181F3DC60")] private void OnRoomStartLoad() { ClusterMeshAssetCache clusterMeshAssetCache = this.ClusterMeshAssetCache; CreateMeshFromClusterJob createMeshFromClusterJob = clusterMeshAssetCache.createMeshFromClusterJob; JobHandle k__BackingField = createMeshFromClusterJob.k__BackingField; int num = 0; createMeshFromClusterJob.k__BackingField = num; clusterMeshAssetCache.createQueue.Clear(); OMCHJHPFBDN.KGFPNIMJHIC(this.detailRoot); OMCHJHPFBDN.KGFPNIMJHIC(this.worldRoot); GameObject gameObject = new GameObject("DetailRoot"); this.detailRoot = gameObject; Transform transform = gameObject.transform; Transform transform2 = base.transform; transform.parent = transform2; GameObject gameObject2 = new GameObject("WorldRoot"); this.worldRoot = gameObject2; Transform transform3 = gameObject2.transform; Transform transform4 = base.transform; transform3.parent = transform4; this.worldClusterMeshRenderers[num].Clear(); this.clusterInfos[num].Clear(); num++; this.newAddedStaticComponents.Clear(); this.newAddedWorldComponents.Clear(); this.newAddedDetailComponents.Clear(); this.newShapeContainers.Clear(); Coroutine coroutine = this.createWorldCoroutine; if (coroutine != 0) { base.StopCoroutine(coroutine); this.createWorldCoroutine = num; } Coroutine coroutine2 = this.assignLODsCoroutine; if (coroutine2 != 0) { base.StopCoroutine(coroutine2); this.assignLODsCoroutine = num; } this.CurrentState = (ClusterLODManager.State)num; ClusterLODManager.d__41 d__; d__.System.IDisposable.Dispose(); d__.<>1__state = num; d__.<>4__this = this; Coroutine coroutine3 = base.StartCoroutine(d__); this.createWorldCoroutine = coroutine3; } // Token: 0x06006E9F RID: 28319 RVA: 0x00184674 File Offset: 0x00182874 [Token(Token = "0x6006E9F")] [Address(RVA = "0x1F3E970", Offset = "0x1F3D970", VA = "0x181F3E970")] private void Start() { Transform transform = base.transform; float z = Vector3.zero.z; Transform transform2 = base.transform; Quaternion identity = Quaternion.identity; GameObject gameObject = new GameObject("DetailRoot"); this.detailRoot = gameObject; Transform transform3 = gameObject.transform; Transform transform4 = base.transform; transform3.parent = transform4; GameObject gameObject2 = new GameObject("WorldRoot"); this.worldRoot = gameObject2; Transform transform5 = gameObject2.transform; Transform transform6 = base.transform; transform5.parent = transform6; int num = 0; List[] array = this.worldClusterMeshRenderers; List list = new List(); if (list != 0) { } array[0] = list; List[] array2 = this.clusterInfos; List list2 = new List(); if (list2 != 0) { } num++; array2[0] = list2; RoomPersistenceManager instance = NetworkedSingletonMonoBehaviour.ONCPNMDGGKG; Action action = new Action(this.OnRoomStartLoad); instance.OEEEEIDBCDJ += action; RoomPersistenceManager instance2 = NetworkedSingletonMonoBehaviour.ONCPNMDGGKG; Action action2 = new Action(this.OnRoomStartLoad); instance2.NNKFGEALMHJ += action2; ClusterLODManager.d__41 d__; d__.System.IDisposable.Dispose(); d__.<>1__state = (int)((ulong)0L); d__.<>4__this = this; Coroutine coroutine = base.StartCoroutine(d__); this.createWorldCoroutine = coroutine; } // Token: 0x06006EA0 RID: 28320 RVA: 0x001847B0 File Offset: 0x001829B0 [Token(Token = "0x6006EA0")] [Address(RVA = "0x1F3F330", Offset = "0x1F3E330", VA = "0x181F3F330")] private void Update() { if (this.CurrentState == ClusterLODManager.State.Running) { this.UpdateLODs(); bool flag = this.ClusterMeshAssetCache.Update(); return; } } // Token: 0x06006EA1 RID: 28321 RVA: 0x001847E0 File Offset: 0x001829E0 [Token(Token = "0x6006EA1")] [Address(RVA = "0x1F3D050", Offset = "0x1F3C050", VA = "0x181F3D050")] private IEnumerator CreateWorld() { /* An exception occurred when decompiling this method (06006EA1) ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Collections.IEnumerator ClusterLOD.ClusterLODManager::CreateWorld() ---> System.Exception: Basic block has to end with unconditional control flow. { Block_0: call:void('d__41'::System.IDisposable.Dispose, ldloc:'d__41'(var_0)) stfld:int32('d__41'::<>1__state, ldloc:'d__41'(var_0), conv.u8:uint64[exp:int32](ldc.i8:int64[exp:uint64](0))) stfld:ClusterLODManager('d__41'::<>4__this, ldloc:'d__41'(var_0), ldloc:ClusterLODManager(this)) } at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1852 at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 355 at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123 at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88 --- End of inner exception stack trace --- at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92 at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1663 */; } // Token: 0x06006EA2 RID: 28322 RVA: 0x00184804 File Offset: 0x00182A04 [Token(Token = "0x6006EA2")] [Address(RVA = "0x1F3D800", Offset = "0x1F3C800", VA = "0x181F3D800")] public int GetDetailFromHalfSize(bool near, Vector3 halfSize) { ClusterLODConfig clusterLODConfig = this.k__BackingField; if (near) { } ClusterLODConfig.LODSettings far = clusterLODConfig.far; float useHighestDetailAtGreaterRadius = far.useHighestDetailAtGreaterRadius; int num = 0; float useLowestDetailAtSmallerRadius = far.useLowestDetailAtSmallerRadius; return num + 1; } // Token: 0x06006EA3 RID: 28323 RVA: 0x00184840 File Offset: 0x00182A40 [Token(Token = "0x6006EA3")] [Address(RVA = "0x1F3EFA0", Offset = "0x1F3DFA0", VA = "0x181F3EFA0")] public void UpdateLODs() { List[] array = this.worldClusterMeshRenderers; int num = 0; int num2 = 0; List list = array[num2]; num2++; uint num3; if (num != 0 && num3 > (uint)0) { int num4 = this.clusterIndex; num4++; List[] array2 = this.worldClusterMeshRenderers; int num5 = 0; this.clusterIndex = num2; int size = array2[num5]._size; num2 -= size; num5++; if (num5 < 3) { bool flag; bool flag2; if (flag || !flag2) { bool flag3; if (flag3) { GameObject gameObject; global::UnityEngine.Object.Destroy(gameObject); } List[] array3 = this.worldClusterMeshRenderers; List list2; while (list2 != 0) { } throw new NullReferenceException(); } if (array2[0] != 0) { uint num6; int num7; num6 -= (uint)num7; } } } } // Token: 0x06006EA4 RID: 28324 RVA: 0x001848EC File Offset: 0x00182AEC [Token(Token = "0x6006EA4")] [Address(RVA = "0x1F3CD80", Offset = "0x1F3BD80", VA = "0x181F3CD80")] public void AddClusterMeshRenderers(List newClusters, ClusterLODManager.RenderLayer layer) { this.worldClusterMeshRenderers[(int)layer].AddRange(newClusters); } // Token: 0x06006EA5 RID: 28325 RVA: 0x00184914 File Offset: 0x00182B14 [Token(Token = "0x6006EA5")] [Address(RVA = "0x1F3E160", Offset = "0x1F3D160", VA = "0x181F3E160")] public void RemoveClusterMeshRenderers(List newClusters, ClusterLODManager.RenderLayer layer) { int num; do { num = 0; bool flag; if (flag) { object syncRoot = newClusters._syncRoot; bool flag2; if (flag2) { } if (num != 0) { goto IL_33; } if ((ulong)((uint)(-1)) != (ulong)(-1L)) { } List list = this.worldClusterMeshRenderers[(int)layer]; } } while (num != 0); return; IL_33: throw new IndexOutOfRangeException(); } // Token: 0x06006EA6 RID: 28326 RVA: 0x00184978 File Offset: 0x00182B78 [Token(Token = "0x6006EA6")] [Address(RVA = "0x1F3D0B0", Offset = "0x1F3C0B0", VA = "0x181F3D0B0")] public List GenerateMeshRenderers(List components, Transform root, ClusterLODManager.RenderLayer layer, bool dynamic) { List list; int num7; do { list = new List(); ClusterLODConfig clusterLODConfig = this.k__BackingField; ClusterLODConfig.LODSettings near = clusterLODConfig.near; int maxNumVertsInCluster = near.maxNumVertsInCluster; float maxRadiusOfCluster = near.maxRadiusOfCluster; int minNumObjectPerCluster = clusterLODConfig.minNumObjectPerCluster; float distributeVSminimize = clusterLODConfig.distributeVSminimize; ClusterTreeGenerator clusterTreeGenerator; clusterTreeGenerator.minNumVerts = clusterTreeGenerator; clusterTreeGenerator.maxNumVerts = maxNumVertsInCluster; clusterTreeGenerator.maxRadius = maxRadiusOfCluster; clusterTreeGenerator.minNumObjectPerCluster = minNumObjectPerCluster; clusterTreeGenerator.distributeVSminimize = distributeVSminimize; ClusterNode clusterNode; clusterNode.parent = (ulong)0L; clusterNode.components = components; int num = 0; int num2 = 0; int vertexCount = ClusterUtil.GetVertexCount(components, (NPBPPKDLKDN)num2); clusterNode.vertexCount = vertexCount; List list2 = new List(); ClusterTree clusterTree; clusterTree.Nodes = list2; int num3 = 0; clusterTree.FieldGetter(num3, num, layer); clusterTree.k__BackingField = num3; clusterTree.Nodes.Add(num3); clusterTreeGenerator.k__BackingField = clusterTree; Stack stack = new Stack(); clusterTreeGenerator.unProcessedClusters = stack; ClusterNode k__BackingField = clusterTreeGenerator.k__BackingField.k__BackingField; stack.Push(k__BackingField); ClusterNode clusterNode2 = clusterTreeGenerator.unProcessedClusters.Pop(); int num4 = 0; bool flag = clusterTreeGenerator.SplitCluster(clusterNode2); Stack unProcessedClusters = clusterTreeGenerator.unProcessedClusters; ClusterLODConfig.LODSettings far = this.k__BackingField.far; int minNumVertsInCluster = far.minNumVertsInCluster; int maxNumVertsInCluster2 = far.maxNumVertsInCluster; float maxRadiusOfCluster2 = far.maxRadiusOfCluster; int num5 = 0; ClusterMeshGenerator clusterMeshGenerator; clusterMeshGenerator.FieldGetter(num5, num4, layer); clusterMeshGenerator.minNumVerts = minNumVertsInCluster; clusterMeshGenerator.maxNumVerts = maxNumVertsInCluster2; clusterMeshGenerator.maxDiameterSq = maxRadiusOfCluster2; ClusterTree k__BackingField = clusterTreeGenerator.k__BackingField; List list3 = new List(); clusterMeshGenerator.k__BackingField = list3; ClusterNode k__BackingField2 = k__BackingField.k__BackingField; int num6 = clusterMeshGenerator.UpdateVertexCount(k__BackingField2); ClusterNode k__BackingField3 = k__BackingField.k__BackingField; clusterMeshGenerator.CreateClusterMeshInstances(k__BackingField3); List k__BackingField = clusterMeshGenerator.k__BackingField; num7 = 0; bool flag2; if (flag2) { ClusterMeshRenderer clusterMeshRenderer = this.clusterMeshRendererPrefab; MeshFilter meshFilter = this.clusterPrefab; ClusterMeshRenderer clusterMeshRenderer2; MeshRenderer component = clusterMeshRenderer2.GetComponent(); Material meshMaterial = ClusterLODManager._instance.GetMeshMaterial(); component.SetMaterial(meshMaterial); clusterMeshRenderer2.k__BackingField = meshMaterial != null; clusterMeshRenderer2.Init(num7, meshFilter); clusterMeshRenderer2.GenerateLOD(); bool flag3; if (flag3) { } if (num7 != 0) { goto IL_221; } while ((ulong)((uint)(-1)) == (ulong)(-1L)) { } } } while (num7 != 0); return list; IL_221: throw new NullReferenceException(); } // Token: 0x06006EA7 RID: 28327 RVA: 0x00184BCC File Offset: 0x00182DCC [Token(Token = "0x6006EA7")] [Address(RVA = "0x1F3D9F0", Offset = "0x1F3C9F0", VA = "0x181F3D9F0")] public ClusterLODManager.RenderLayer GetRenderLayer(Vector3 extents) { float sqrMagnitude = extents.sqrMagnitude; float maxRadiusForDetailObjects = this.k__BackingField.maxRadiusForDetailObjects; throw new NullReferenceException(); } // Token: 0x06006EA8 RID: 28328 RVA: 0x00184BF4 File Offset: 0x00182DF4 [Token(Token = "0x6006EA8")] [Address(RVA = "0x1F3DFE0", Offset = "0x1F3CFE0", VA = "0x181F3DFE0")] public void RegisterShapeContainer(ShapeContainer newShapeContainer) { this.newShapeContainers.Add(newShapeContainer); } // Token: 0x06006EA9 RID: 28329 RVA: 0x00184C14 File Offset: 0x00182E14 [Token(Token = "0x6006EA9")] [Address(RVA = "0x1F3EDA0", Offset = "0x1F3DDA0", VA = "0x181F3EDA0")] public bool TryDeRegisterShapeContainer(ShapeContainer newShapeContainer) { return this.newShapeContainers.Remove(newShapeContainer); } // Token: 0x06006EAA RID: 28330 RVA: 0x00184C34 File Offset: 0x00182E34 [Token(Token = "0x6006EAA")] [Address(RVA = "0x1F3DF80", Offset = "0x1F3CF80", VA = "0x181F3DF80")] public void RegisterComponent(IClusterLODComponent newComponent) { this.newAddedStaticComponents.Add(newComponent); } // Token: 0x06006EAB RID: 28331 RVA: 0x00184C54 File Offset: 0x00182E54 [Token(Token = "0x6006EAB")] [Address(RVA = "0x1F3CCF0", Offset = "0x1F3BCF0", VA = "0x181F3CCF0")] private void AddClusterMeshClusterInfo(ClusterMesh.ClusterInfo info, int layer) { this.clusterInfos[layer].Add(info); } // Token: 0x06006EAC RID: 28332 RVA: 0x00184C7C File Offset: 0x00182E7C [Token(Token = "0x6006EAC")] [Address(RVA = "0x1F3E040", Offset = "0x1F3D040", VA = "0x181F3E040")] private void RemoveClusterMeshClusterInfo(ClusterMesh.ClusterInfo info, int layerIdx) { bool flag = this.clusterInfos[layerIdx].Remove(info); } // Token: 0x06006EAD RID: 28333 RVA: 0x00184CA4 File Offset: 0x00182EA4 [Token(Token = "0x6006EAD")] [Address(RVA = "0x1F3E0D0", Offset = "0x1F3D0D0", VA = "0x181F3E0D0")] public void RemoveClusterMeshClusterInfo(ClusterMesh.ClusterInfo info) { int num = 0; bool flag = this.clusterInfos[num].Remove(info); num++; } // Token: 0x06006EAE RID: 28334 RVA: 0x00184CD0 File Offset: 0x00182ED0 [Token(Token = "0x6006EAE")] [Address(RVA = "0x1F3E850", Offset = "0x1F3D850", VA = "0x181F3E850")] private void SortClusterInfos(Vector3 pos, ClusterLODManager.RenderLayer layer) { List list = this.clusterInfos[(int)layer]; Comparison <>9__55_ = ClusterLODManager.<>c.<>9__55_0; if (<>9__55_ == 0) { ClusterLODManager.<>c.<>9__55_0 = delegate(ClusterMesh.ClusterInfo a, ClusterMesh.ClusterInfo b) { int num; return num; }; } list.Sort(<>9__55_); } // Token: 0x06006EAF RID: 28335 RVA: 0x00184D18 File Offset: 0x00182F18 [Token(Token = "0x6006EAF")] [Address(RVA = "0x1F3EE00", Offset = "0x1F3DE00", VA = "0x181F3EE00")] private void UpdateClusterDistances(Vector3 pos, ClusterLODManager.RenderLayer layer) { int num; do { num = 0; List list = this.worldClusterMeshRenderers[(int)layer]; bool flag; if (flag) { bool flag2; while (!flag2) { } } } while (num != 0); } // Token: 0x06006EB0 RID: 28336 RVA: 0x00184D54 File Offset: 0x00182F54 [Token(Token = "0x6006EB0")] [Address(RVA = "0x1F3CE00", Offset = "0x1F3BE00", VA = "0x181F3CE00")] private IEnumerator AssignLODs() { /* An exception occurred when decompiling this method (06006EB0) ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Collections.IEnumerator ClusterLOD.ClusterLODManager::AssignLODs() ---> System.Exception: Basic block has to end with unconditional control flow. { Block_0: call:void('d__57'::System.IDisposable.Dispose, ldloc:'d__57'(var_0)) stfld:int32('d__57'::<>1__state, ldloc:'d__57'(var_0), conv.u8:uint64[exp:int32](ldc.i8:int64[exp:uint64](0))) stfld:ClusterLODManager('d__57'::<>4__this, ldloc:'d__57'(var_0), ldloc:ClusterLODManager(this)) } at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1852 at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 355 at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123 at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88 --- End of inner exception stack trace --- at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92 at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1663 */; } // Token: 0x06006EB1 RID: 28337 RVA: 0x0000220F File Offset: 0x0000040F [Token(Token = "0x6006EB1")] [Address(RVA = "0x1F3F230", Offset = "0x1F3E230", VA = "0x181F3F230")] private int UpdateLodRequest(int index, int budget, List clusters, byte lod, ref int numVertsToSpare, float minDist = 0f) { throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method."); } // Token: 0x06006EB2 RID: 28338 RVA: 0x00184D78 File Offset: 0x00182F78 [Token(Token = "0x6006EB2")] [Address(RVA = "0x1F3E3F0", Offset = "0x1F3D3F0", VA = "0x181F3E3F0")] public void Remove(IClusterLODComponent component) { int num; do { num = 0; if (num >= 3) { return; } bool flag; if (flag) { bool flag2; while (!flag2) { } bool flag3; while (!flag3) { } bool flag4; while (!flag4) { } } } while (num != 0); if ((ulong)((uint)(-1)) != (ulong)(-1L)) { } num++; } // Token: 0x06006EB3 RID: 28339 RVA: 0x00184DD0 File Offset: 0x00182FD0 [Token(Token = "0x6006EB3")] [Address(RVA = "0x1F3E810", Offset = "0x1F3D810", VA = "0x181F3E810")] public bool ShouldUpdateDetailMeshes() { ClusterLODConfig.LODSettings near = this.k__BackingField.near; float maxSubDivideEdgeSize = near.maxSubDivideEdgeSize; int num = 0; if (maxSubDivideEdgeSize <= (float)num) { } float maxSubDivideDistance = near.maxSubDivideDistance; throw new NullReferenceException(); } // Token: 0x06006EB4 RID: 28340 RVA: 0x00184E08 File Offset: 0x00183008 [Token(Token = "0x6006EB4")] [Address(RVA = "0x1F3DF70", Offset = "0x1F3CF70", VA = "0x181F3DF70")] public void RegisterAdditionalVertsChange(int change) { } // Token: 0x06006EB5 RID: 28341 RVA: 0x00184E18 File Offset: 0x00183018 [Token(Token = "0x6006EB5")] [Address(RVA = "0x1F3D950", Offset = "0x1F3C950", VA = "0x181F3D950")] public Material GetMeshMaterial() { Material material = this.sharedMeshMaterial; int num = 0; if (material == num) { Material material2 = EOKPFJPCGMK.OAEGHKNCLCN(ACBDPBHGKJL.Box); this.sharedMeshMaterial = material2; } return this.sharedMeshMaterial; } // Token: 0x06006EB6 RID: 28342 RVA: 0x00184E4C File Offset: 0x0018304C [Token(Token = "0x6006EB6")] [Address(RVA = "0x1F3D910", Offset = "0x1F3C910", VA = "0x181F3D910")] public int GetMaxNumActiveLOD0Verts() { return this.k__BackingField.maxDynamicNearVerts; } // Token: 0x06006EB7 RID: 28343 RVA: 0x00184E6C File Offset: 0x0018306C [Token(Token = "0x6006EB7")] [Address(RVA = "0x1F3F370", Offset = "0x1F3E370", VA = "0x181F3F370")] public ClusterLODManager() { ClusterMeshAssetCache clusterMeshAssetCache = new ClusterMeshAssetCache(); Queue queue = new Queue(); clusterMeshAssetCache.createQueue = queue; CreateMeshFromClusterJob createMeshFromClusterJob = new CreateMeshFromClusterJob(); PCIKHFEIHGO pcikhfeihgo = new PCIKHFEIHGO(); createMeshFromClusterJob.sharedResultMesh = pcikhfeihgo; OCCMLFOBCEM occmlfobcem = new OCCMLFOBCEM(); createMeshFromClusterJob.optimizationData = occmlfobcem; clusterMeshAssetCache.createMeshFromClusterJob = createMeshFromClusterJob; List list = new List(); clusterMeshAssetCache.activeClusters = list; this.ClusterMeshAssetCache = clusterMeshAssetCache; List list2 = new List(); this.newAddedStaticComponents = list2; List list3 = new List(); this.newAddedWorldComponents = list3; List list4 = new List(); this.newAddedDetailComponents = list4; List[] array = new List[3]; this.worldClusterMeshRenderers = array; List[] array2 = new List[3]; this.clusterInfos = array2; List list5 = new List(); this.newShapeContainers = list5; base..ctor(); } // Token: 0x06006EB8 RID: 28344 RVA: 0x0000220F File Offset: 0x0000040F // Note: this type is marked as 'beforefieldinit'. [Token(Token = "0x6006EB8")] [Address(RVA = "0x4242D0", Offset = "0x4232D0", VA = "0x1804242D0")] static ClusterLODManager() { throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method."); } // Token: 0x0400490B RID: 18699 [Token(Token = "0x400490B")] public const int NUM_RENDER_LAYERS = 3; // Token: 0x0400490D RID: 18701 [FieldOffset(Offset = "0x20")] [Token(Token = "0x400490D")] public ClusterMeshRenderer clusterMeshRendererPrefab; // Token: 0x0400490E RID: 18702 [FieldOffset(Offset = "0x28")] [Token(Token = "0x400490E")] public MeshFilter clusterPrefab; // Token: 0x0400490F RID: 18703 [FieldOffset(Offset = "0x30")] [Token(Token = "0x400490F")] private GameObject detailRoot; // Token: 0x04004910 RID: 18704 [FieldOffset(Offset = "0x38")] [Token(Token = "0x4004910")] private GameObject worldRoot; // Token: 0x04004911 RID: 18705 [FieldOffset(Offset = "0x40")] [Token(Token = "0x4004911")] public ClusterMeshAssetCache ClusterMeshAssetCache; // Token: 0x04004912 RID: 18706 [FieldOffset(Offset = "0x48")] [Token(Token = "0x4004912")] public List newAddedStaticComponents; // Token: 0x04004913 RID: 18707 [FieldOffset(Offset = "0x50")] [Token(Token = "0x4004913")] public List newAddedWorldComponents; // Token: 0x04004914 RID: 18708 [FieldOffset(Offset = "0x58")] [Token(Token = "0x4004914")] public List newAddedDetailComponents; // Token: 0x04004915 RID: 18709 [FieldOffset(Offset = "0x60")] [Token(Token = "0x4004915")] private int clusterIndex; // Token: 0x04004917 RID: 18711 [FieldOffset(Offset = "0x70")] [Token(Token = "0x4004917")] public ClusterLODManager.State CurrentState; // Token: 0x04004918 RID: 18712 [FieldOffset(Offset = "0x78")] [Token(Token = "0x4004918")] public List[] worldClusterMeshRenderers; // Token: 0x04004919 RID: 18713 [FieldOffset(Offset = "0x80")] [Token(Token = "0x4004919")] private List[] clusterInfos; // Token: 0x0400491A RID: 18714 [FieldOffset(Offset = "0x88")] [Token(Token = "0x400491A")] private Coroutine createWorldCoroutine; // Token: 0x0400491B RID: 18715 [FieldOffset(Offset = "0x90")] [Token(Token = "0x400491B")] private Coroutine assignLODsCoroutine; // Token: 0x0400491C RID: 18716 [FieldOffset(Offset = "0x98")] [Token(Token = "0x400491C")] public int estimatedNumWorldLODVerts; // Token: 0x0400491D RID: 18717 [FieldOffset(Offset = "0x9C")] [Token(Token = "0x400491D")] public int numWorldLODVerts; // Token: 0x0400491E RID: 18718 [Token(Token = "0x400491E")] private static ClusterLODManager _instance; // Token: 0x0400491F RID: 18719 [FieldOffset(Offset = "0xA0")] [Token(Token = "0x400491F")] private List newShapeContainers; // Token: 0x04004920 RID: 18720 [FieldOffset(Offset = "0xA8")] [Token(Token = "0x4004920")] public int numAdditionalVerts; // Token: 0x04004921 RID: 18721 [FieldOffset(Offset = "0xB0")] [Token(Token = "0x4004921")] private Material sharedMeshMaterial; // Token: 0x02001343 RID: 4931 [Token(Token = "0x2001343")] public enum RenderLayer { // Token: 0x04004923 RID: 18723 [Token(Token = "0x4004923")] World, // Token: 0x04004924 RID: 18724 [Token(Token = "0x4004924")] Detail, // Token: 0x04004925 RID: 18725 [Token(Token = "0x4004925")] Dynamic, // Token: 0x04004926 RID: 18726 [Token(Token = "0x4004926")] NumLayers } // Token: 0x02001344 RID: 4932 [Token(Token = "0x2001344")] public enum State { // Token: 0x04004928 RID: 18728 [Token(Token = "0x4004928")] Waiting, // Token: 0x04004929 RID: 18729 [Token(Token = "0x4004929")] Collecting, // Token: 0x0400492A RID: 18730 [Token(Token = "0x400492A")] Generating, // Token: 0x0400492B RID: 18731 [Token(Token = "0x400492B")] Running } } }