using System; using System.Collections.Generic; using Cpp2IlInjected; using UnityEngine; namespace ClusterLOD { // Token: 0x02001359 RID: 4953 [Token(Token = "0x2001359")] public class ClusterTreeGenerator { // Token: 0x06006F2D RID: 28461 RVA: 0x00186AD8 File Offset: 0x00184CD8 [Token(Token = "0x6006F2D")] [Address(RVA = "0x1F467E0", Offset = "0x1F457E0", VA = "0x181F467E0")] 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: 0x170011E6 RID: 4582 // (get) Token: 0x06006F2E RID: 28462 RVA: 0x00186B10 File Offset: 0x00184D10 // (set) Token: 0x06006F2F RID: 28463 RVA: 0x00186B24 File Offset: 0x00184D24 [Token(Token = "0x170011E6")] public ClusterTree Tree { [Token(Token = "0x6006F2E")] [Address(RVA = "0x4157C0", Offset = "0x4147C0", VA = "0x1804157C0")] get; [Token(Token = "0x6006F2F")] [Address(RVA = "0x415810", Offset = "0x414810", VA = "0x180415810")] private set; } // Token: 0x06006F30 RID: 28464 RVA: 0x00186B38 File Offset: 0x00184D38 [Token(Token = "0x6006F30")] [Address(RVA = "0x1F459B0", Offset = "0x1F449B0", VA = "0x181F459B0")] public void InitTree(List components) { int num = 0; ClusterNode clusterNode; clusterNode.components = components; int vertexCount = ClusterUtil.GetVertexCount(components, (NPBPPKDLKDN)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: 0x06006F31 RID: 28465 RVA: 0x00186BC0 File Offset: 0x00184DC0 [Token(Token = "0x6006F31")] [Address(RVA = "0x1F44C60", Offset = "0x1F43C60", VA = "0x181F44C60")] public bool GenerateTreeCluster() { ClusterNode clusterNode = this.unProcessedClusters.Pop(); bool flag = this.SplitCluster(clusterNode); Stack stack = this.unProcessedClusters; bool flag2; return flag2; } // Token: 0x06006F32 RID: 28466 RVA: 0x00186BF0 File Offset: 0x00184DF0 [Token(Token = "0x6006F32")] [Address(RVA = "0x1F458A0", Offset = "0x1F448A0", VA = "0x181F458A0")] 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: 0x06006F33 RID: 28467 RVA: 0x00186C20 File Offset: 0x00184E20 [Token(Token = "0x6006F33")] [Address(RVA = "0x1F45800", Offset = "0x1F44800", VA = "0x181F45800")] private float GetVolume(Vector3 size) { float num = size.z; float num2; num = num2; num2 = num; return num2; } // Token: 0x06006F34 RID: 28468 RVA: 0x00186C3C File Offset: 0x00184E3C [Token(Token = "0x6006F34")] [Address(RVA = "0x1F45EA0", Offset = "0x1F44EA0", VA = "0x181F45EA0")] private bool SplitCluster(ClusterNode cluster) { int num; List list; int num8; do { num = 0; List components = cluster.components; int num2 = this.minNumObjectPerCluster; num2 += num2; float num3; if (cluster.vertexCount < this.maxNumVerts && this.maxRadius > num3) { goto IL_20D; } list = new List(); float num5; float num4 = Mathf.Max(num5, num5) * 0.3f; List components2 = cluster.components; bool flag; if (flag) { num += num; num++; Vector3 vector; float num6 = vector.z; float num7; num5 = num7; num5 = Mathf.Max(num7, num5); while (num5 <= num4) { } num6 += 2.7E-44f; } if (num != 0) { goto IL_21F; } if (num != -1) { } if (list._size <= 0) { goto IL_EA; } bool flag2; if (flag2) { } num8 = 0; } while (num != 0); ClusterNode clusterNode = new ClusterNode(num, cluster); cluster.child1 = clusterNode; this.k__BackingField.Nodes.Add(clusterNode); ClusterNode clusterNode2 = new ClusterNode(list, cluster); cluster.child2 = clusterNode2; List nodes = this.k__BackingField.Nodes; IL_EA: ClusterTreeGenerator.SplitResult splitResult; int bestIndex = splitResult.bestIndex; int num9 = 0; List range = list.GetRange(num9, bestIndex); ClusterNode clusterNode3; clusterNode3.parent = cluster; clusterNode3.components = range; int num10 = 0; int vertexCount = ClusterUtil.GetVertexCount(range, (NPBPPKDLKDN)num10); clusterNode3.vertexCount = vertexCount; cluster.child1 = clusterNode3; this.k__BackingField.Nodes.Add(clusterNode3); int num11 = list._size; num11 -= clusterNode3; ClusterNode clusterNode4; clusterNode4.parent = cluster; List list2; clusterNode4.components = list2; int num12 = 0; int vertexCount2 = ClusterUtil.GetVertexCount(list2, (NPBPPKDLKDN)num12); clusterNode4.vertexCount = vertexCount2; 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 = num8; IL_20D: throw new NullReferenceException(); IL_21F: throw new NullReferenceException(); } // Token: 0x06006F35 RID: 28469 RVA: 0x0000220F File Offset: 0x0000040F [Token(Token = "0x6006F35")] [Address(RVA = "0x1F44CD0", Offset = "0x1F43CD0", VA = "0x181F44CD0")] private ClusterTreeGenerator.SplitResult GetSplitResult(List rawComponents, ClusterTreeGenerator.Axis axis) { throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method."); } // Token: 0x06006F36 RID: 28470 RVA: 0x0000220F File Offset: 0x0000040F [Token(Token = "0x6006F36")] [Address(RVA = "0x1F45B10", Offset = "0x1F44B10", VA = "0x181F45B10")] private void SetupMinMaxBuffers(List components, Vector3[] minValues, Vector3[] maxValues) { throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method."); } // Token: 0x0400499D RID: 18845 [FieldOffset(Offset = "0x10")] [Token(Token = "0x400499D")] private ClusterTreeGenerator.Stats stats; // Token: 0x0400499F RID: 18847 [FieldOffset(Offset = "0x28")] [Token(Token = "0x400499F")] private int minNumObjectPerCluster; // Token: 0x040049A0 RID: 18848 [FieldOffset(Offset = "0x2C")] [Token(Token = "0x40049A0")] private int minNumVerts; // Token: 0x040049A1 RID: 18849 [FieldOffset(Offset = "0x30")] [Token(Token = "0x40049A1")] private int maxNumVerts; // Token: 0x040049A2 RID: 18850 [FieldOffset(Offset = "0x34")] [Token(Token = "0x40049A2")] private float maxRadius; // Token: 0x040049A3 RID: 18851 [FieldOffset(Offset = "0x38")] [Token(Token = "0x40049A3")] private float distributeVSminimize; // Token: 0x040049A4 RID: 18852 [FieldOffset(Offset = "0x40")] [Token(Token = "0x40049A4")] private Stack unProcessedClusters; // Token: 0x0200135A RID: 4954 [Token(Token = "0x200135A")] private struct Stats { // Token: 0x040049A5 RID: 18853 [FieldOffset(Offset = "0x0")] [Token(Token = "0x40049A5")] public int numOverSized; // Token: 0x040049A6 RID: 18854 [FieldOffset(Offset = "0x4")] [Token(Token = "0x40049A6")] public int xSplits; // Token: 0x040049A7 RID: 18855 [FieldOffset(Offset = "0x8")] [Token(Token = "0x40049A7")] public int ySplits; // Token: 0x040049A8 RID: 18856 [FieldOffset(Offset = "0xC")] [Token(Token = "0x40049A8")] public int zSplits; } // Token: 0x0200135B RID: 4955 [Token(Token = "0x200135B")] private struct SplitResult { // Token: 0x040049A9 RID: 18857 [FieldOffset(Offset = "0x0")] [Token(Token = "0x40049A9")] public int bestIndex; // Token: 0x040049AA RID: 18858 [FieldOffset(Offset = "0x4")] [Token(Token = "0x40049AA")] public float bestVolume; // Token: 0x040049AB RID: 18859 [FieldOffset(Offset = "0x8")] [Token(Token = "0x40049AB")] public List components; } // Token: 0x0200135C RID: 4956 [Token(Token = "0x200135C")] private enum Axis { // Token: 0x040049AD RID: 18861 [Token(Token = "0x40049AD")] X_AXIS, // Token: 0x040049AE RID: 18862 [Token(Token = "0x40049AE")] Y_AXIS, // Token: 0x040049AF RID: 18863 [Token(Token = "0x40049AF")] Z_AXIS } } }