using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Cpp2IlInjected; using UnityEngine; namespace ClusterLOD { // Token: 0x02000C98 RID: 3224 [Token(Token = "0x2000C98")] [StructLayout(3)] public class ClusterTreeGenerator { // Token: 0x06004D92 RID: 19858 RVA: 0x00120F6C File Offset: 0x0011F16C [Token(Token = "0x6004D92")] [Address(RVA = "0x1B37180", Offset = "0x1B35B80", VA = "0x181B37180")] public ClusterTreeGenerator(int minNumVerts, int maxNumVerts, float maxRadius, int minNumObjectPerCluster, float distributeVSminimize = 0.5f) { this.maxRadius = maxRadius; this.minNumVerts = minNumVerts; this.distributeVSminimize = (float)0; this.maxNumVerts = maxNumVerts; this.minNumObjectPerCluster = 0; } // Token: 0x17000D75 RID: 3445 // (get) Token: 0x06004D93 RID: 19859 RVA: 0x00120FA4 File Offset: 0x0011F1A4 // (set) Token: 0x06004D94 RID: 19860 RVA: 0x00120FB8 File Offset: 0x0011F1B8 [Token(Token = "0x17000D75")] public ClusterTree Tree { [Token(Token = "0x6004D93")] [Address(RVA = "0x3C1220", Offset = "0x3BFC20", VA = "0x1803C1220")] get; [Token(Token = "0x6004D94")] [Address(RVA = "0x3C1260", Offset = "0x3BFC60", VA = "0x1803C1260")] private set; } // Token: 0x06004D95 RID: 19861 RVA: 0x00120FCC File Offset: 0x0011F1CC [Token(Token = "0x6004D95")] [Address(RVA = "0x1B362B0", Offset = "0x1B34CB0", VA = "0x181B362B0")] public void InitTree(List components) { int num = 0; ClusterNode clusterNode; clusterNode.components = components; int vertexCount = ClusterUtil.GetVertexCount(components, num); clusterNode.vertexCount = vertexCount; List list = new List(); ClusterTree clusterTree; clusterTree.Nodes = list; List nodes = clusterTree.Nodes; clusterTree.k__BackingField = clusterNode; nodes.Add(clusterNode); this.k__BackingField = clusterTree; Stack stack = new Stack(); ClusterTree clusterTree2 = this.k__BackingField; this.unProcessedClusters = stack; ClusterNode k__BackingField = clusterTree2.k__BackingField; stack.Push(k__BackingField); } // Token: 0x06004D96 RID: 19862 RVA: 0x00121054 File Offset: 0x0011F254 [Token(Token = "0x6004D96")] [Address(RVA = "0x1B35560", Offset = "0x1B33F60", VA = "0x181B35560")] public bool GenerateTreeCluster() { ClusterNode clusterNode = this.unProcessedClusters.Pop(); bool flag = this.SplitCluster(clusterNode); Stack stack = this.unProcessedClusters; bool flag2; return flag2; } // Token: 0x06004D97 RID: 19863 RVA: 0x00121084 File Offset: 0x0011F284 [Token(Token = "0x6004D97")] [Address(RVA = "0x1B361A0", Offset = "0x1B34BA0", VA = "0x181B361A0")] private float GetVolume(Vector3 min, Vector3 max) { float z = min.z; float z2 = max.z; Vector3 vector; float num = vector.z; float num2; num = num2; num2 = num; return num2; } // Token: 0x06004D98 RID: 19864 RVA: 0x001210B4 File Offset: 0x0011F2B4 [Token(Token = "0x6004D98")] [Address(RVA = "0x1B36100", Offset = "0x1B34B00", VA = "0x181B36100")] private float GetVolume(Vector3 size) { float num = size.z; float num2; num = num2; num2 = num; return num2; } // Token: 0x06004D99 RID: 19865 RVA: 0x001210D0 File Offset: 0x0011F2D0 [Token(Token = "0x6004D99")] [Address(RVA = "0x1B367A0", Offset = "0x1B351A0", VA = "0x181B367A0")] private bool SplitCluster(ClusterNode cluster) { int num = 0; List components = cluster.components; int num2 = this.minNumObjectPerCluster; num2 += num2; if (cluster.vertexCount < this.maxNumVerts) { float num3 = this.maxRadius; } List list = new List(); float num5; float num4 = Mathf.Max(num5, num5) * 0.3f; List components2 = cluster.components; List.Enumerator enumerator; if (enumerator != 0) { num += num; num++; float num6; num5 = num6; num5 = Mathf.Max(num6, num5); while (num5 <= num4) { } num += 19; } if (num != -1) { if (list._size <= 0) { goto IL_10F; } List.Enumerator enumerator2; if (enumerator2 != 0) { } } num++; int num7 = 0; if (num != -1) { } ClusterNode clusterNode; clusterNode.parent = cluster; clusterNode.components = num; int num8 = 0; int vertexCount = ClusterUtil.GetVertexCount(num, num8); clusterNode.vertexCount = vertexCount; cluster.child1 = clusterNode; this.k__BackingField.Nodes.Add(clusterNode); ClusterNode clusterNode2; clusterNode2.parent = cluster; clusterNode2.components = list; int num9 = 0; int vertexCount2 = ClusterUtil.GetVertexCount(list, num9); clusterNode2.vertexCount = vertexCount2; cluster.child2 = clusterNode2; List nodes = this.k__BackingField.Nodes; IL_10F: ClusterTreeGenerator.SplitResult splitResult; int bestIndex = splitResult.bestIndex; int num10 = 0; List range = list.GetRange(num10, bestIndex); ClusterNode clusterNode3; clusterNode3.parent = cluster; clusterNode3.components = range; int num11 = 0; int vertexCount3 = ClusterUtil.GetVertexCount(range, num11); clusterNode3.vertexCount = vertexCount3; cluster.child1 = clusterNode3; this.k__BackingField.Nodes.Add(clusterNode3); int num12 = list._size; num12 -= clusterNode3; ClusterNode clusterNode4; clusterNode4.parent = cluster; List list2; clusterNode4.components = list2; int num13 = 0; int vertexCount4 = ClusterUtil.GetVertexCount(list2, num13); clusterNode4.vertexCount = vertexCount4; cluster.child2 = clusterNode4; this.k__BackingField.Nodes.Add(clusterNode4); Stack stack = this.unProcessedClusters; ClusterNode child = cluster.child1; stack.Push(child); Stack stack2 = this.unProcessedClusters; ClusterNode child2 = cluster.child2; stack2.Push(child2); List nodes2 = this.k__BackingField.Nodes; ClusterNode child3 = cluster.child1; nodes2.Add(child3); List nodes3 = this.k__BackingField.Nodes; ClusterNode child4 = cluster.child2; nodes3.Add(child4); cluster.components = num7; throw new NullReferenceException(); } // Token: 0x06004D9A RID: 19866 RVA: 0x0000220F File Offset: 0x0000040F [Token(Token = "0x6004D9A")] [Address(RVA = "0x1B355D0", Offset = "0x1B33FD0", VA = "0x181B355D0")] private ClusterTreeGenerator.SplitResult GetSplitResult(List rawComponents, ClusterTreeGenerator.Axis axis) { throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method."); } // Token: 0x06004D9B RID: 19867 RVA: 0x0000220F File Offset: 0x0000040F [Token(Token = "0x6004D9B")] [Address(RVA = "0x1B36410", Offset = "0x1B34E10", VA = "0x181B36410")] private void SetupMinMaxBuffers(List components, Vector3[] minValues, Vector3[] maxValues) { throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method."); } // Token: 0x040039A5 RID: 14757 [global::Cpp2IlInjected.FieldOffset(Offset = "0x10")] [Token(Token = "0x40039A5")] private ClusterTreeGenerator.Stats stats; // Token: 0x040039A7 RID: 14759 [global::Cpp2IlInjected.FieldOffset(Offset = "0x28")] [Token(Token = "0x40039A7")] private int minNumObjectPerCluster; // Token: 0x040039A8 RID: 14760 [global::Cpp2IlInjected.FieldOffset(Offset = "0x2C")] [Token(Token = "0x40039A8")] private int minNumVerts; // Token: 0x040039A9 RID: 14761 [global::Cpp2IlInjected.FieldOffset(Offset = "0x30")] [Token(Token = "0x40039A9")] private int maxNumVerts; // Token: 0x040039AA RID: 14762 [global::Cpp2IlInjected.FieldOffset(Offset = "0x34")] [Token(Token = "0x40039AA")] private float maxRadius; // Token: 0x040039AB RID: 14763 [global::Cpp2IlInjected.FieldOffset(Offset = "0x38")] [Token(Token = "0x40039AB")] private float distributeVSminimize; // Token: 0x040039AC RID: 14764 [global::Cpp2IlInjected.FieldOffset(Offset = "0x40")] [Token(Token = "0x40039AC")] private Stack unProcessedClusters; // Token: 0x02000C99 RID: 3225 [Token(Token = "0x2000C99")] private struct Stats { // Token: 0x040039AD RID: 14765 [global::Cpp2IlInjected.FieldOffset(Offset = "0x0")] [Token(Token = "0x40039AD")] public int numOverSized; // Token: 0x040039AE RID: 14766 [global::Cpp2IlInjected.FieldOffset(Offset = "0x4")] [Token(Token = "0x40039AE")] public int xSplits; // Token: 0x040039AF RID: 14767 [global::Cpp2IlInjected.FieldOffset(Offset = "0x8")] [Token(Token = "0x40039AF")] public int ySplits; // Token: 0x040039B0 RID: 14768 [global::Cpp2IlInjected.FieldOffset(Offset = "0xC")] [Token(Token = "0x40039B0")] public int zSplits; } // Token: 0x02000C9A RID: 3226 [Token(Token = "0x2000C9A")] private struct SplitResult { // Token: 0x040039B1 RID: 14769 [global::Cpp2IlInjected.FieldOffset(Offset = "0x0")] [Token(Token = "0x40039B1")] public int bestIndex; // Token: 0x040039B2 RID: 14770 [global::Cpp2IlInjected.FieldOffset(Offset = "0x4")] [Token(Token = "0x40039B2")] public float bestVolume; // Token: 0x040039B3 RID: 14771 [global::Cpp2IlInjected.FieldOffset(Offset = "0x8")] [Token(Token = "0x40039B3")] public List components; } // Token: 0x02000C9B RID: 3227 [Token(Token = "0x2000C9B")] private enum Axis { // Token: 0x040039B5 RID: 14773 [Token(Token = "0x40039B5")] X_AXIS, // Token: 0x040039B6 RID: 14774 [Token(Token = "0x40039B6")] Y_AXIS, // Token: 0x040039B7 RID: 14775 [Token(Token = "0x40039B7")] Z_AXIS } } }