using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Cpp2IlInjected; using UnityEngine; namespace ClusterLOD { // Token: 0x02000C91 RID: 3217 [Token(Token = "0x2000C91")] [StructLayout(3)] public class ClusterMeshGenerator { // Token: 0x06004D68 RID: 19816 RVA: 0x00120650 File Offset: 0x0011E850 [Token(Token = "0x6004D68")] [Address(RVA = "0x1B31A30", Offset = "0x1B30430", VA = "0x181B31A30")] public ClusterMeshGenerator(int minNumVerts, int maxNumVerts, float maxRadius) { this.minNumVerts = minNumVerts; this.maxNumVerts = maxNumVerts; this.maxDiameterSq = maxRadius; } // Token: 0x17000D6E RID: 3438 // (get) Token: 0x06004D69 RID: 19817 RVA: 0x00120678 File Offset: 0x0011E878 // (set) Token: 0x06004D6A RID: 19818 RVA: 0x0012068C File Offset: 0x0011E88C [Token(Token = "0x17000D6E")] public List Meshes { [Token(Token = "0x6004D69")] [Address(RVA = "0x3C1220", Offset = "0x3BFC20", VA = "0x1803C1220")] get; [Token(Token = "0x6004D6A")] [Address(RVA = "0x3C1260", Offset = "0x3BFC60", VA = "0x1803C1260")] private set; } // Token: 0x06004D6B RID: 19819 RVA: 0x001206A0 File Offset: 0x0011E8A0 [Token(Token = "0x6004D6B")] [Address(RVA = "0x1B316E0", Offset = "0x1B300E0", VA = "0x181B316E0")] public void CreateClusterMeshInstances(ClusterTree tree) { List list = new List(); this.k__BackingField = list; ClusterNode k__BackingField = tree.k__BackingField; int num = this.UpdateVertexCount(k__BackingField); ClusterNode k__BackingField2 = tree.k__BackingField; this.CreateClusterMeshInstances(k__BackingField2); } // Token: 0x06004D6C RID: 19820 RVA: 0x001206E0 File Offset: 0x0011E8E0 [Token(Token = "0x6004D6C")] [Address(RVA = "0x1B31990", Offset = "0x1B30390", VA = "0x181B31990")] private int UpdateVertexCount(ClusterNode node) { if (node != 0) { List components = node.components; if (components != 0) { int vertexCount = ClusterUtil.GetVertexCount(components, 1); } int num = 0; node.vertexCount = num; ClusterNode child = node.child1; int num2 = this.UpdateVertexCount(child); num += num2; node.vertexCount = num; ClusterNode child2 = node.child2; int num3 = this.UpdateVertexCount(child2); num3 += num; node.vertexCount = num3; return num3; } return 0; } // Token: 0x06004D6D RID: 19821 RVA: 0x00120750 File Offset: 0x0011E950 [Token(Token = "0x6004D6D")] [Address(RVA = "0x1B31770", Offset = "0x1B30170", VA = "0x181B31770")] private void CreateClusterMeshInstances(ClusterNode node) { int num = 0; if (node != 0) { if (node.child1 != num) { int num2 = this.maxNumVerts; Vector3 vector; float z = vector.z; int num3 = this.minNumVerts; if (node.vertexCount > num3) { ClusterNode child = node.child1; this.CreateClusterMeshInstances(child); ClusterNode child2 = node.child2; this.CreateClusterMeshInstances(child2); return; } } ClusterMesh clusterMesh = new ClusterMesh(); List list = new List(); clusterMesh.Clusters = list; ClusterMeshUpdateJobData clusterMeshUpdateJobData = new ClusterMeshUpdateJobData(); clusterMesh.updateData = clusterMeshUpdateJobData; Bounds bounds = node.bounds; clusterMesh.bounds = bounds; throw new NullReferenceException(); } } // Token: 0x06004D6E RID: 19822 RVA: 0x001207EC File Offset: 0x0011E9EC [Token(Token = "0x6004D6E")] [Address(RVA = "0x1B31550", Offset = "0x1B2FF50", VA = "0x181B31550")] private void AssignNodesToMesh(ClusterNode node, ClusterMesh newClusterMesh) { if (node != 0) { if (node.components != 0) { ClusterMesh.ClusterInfo clusterInfo = new ClusterMesh.ClusterInfo(); List list = new List(); clusterInfo.components = list; NativeClusterMesh nativeClusterMesh = new NativeClusterMesh(); clusterInfo.nativeMesh = nativeClusterMesh; SubdivideMeshData subdivideMeshData = new SubdivideMeshData(); clusterInfo.subdivideMeshData = subdivideMeshData; List components = node.components; clusterInfo.components = components; Bounds bounds = node.bounds; clusterInfo.bounds = bounds; clusterInfo.requestedLod = (byte)((ulong)1L); newClusterMesh.Clusters.Add(clusterInfo); } ClusterNode child = node.child1; this.AssignNodesToMesh(child, newClusterMesh); } } // Token: 0x0400397F RID: 14719 [global::Cpp2IlInjected.FieldOffset(Offset = "0x10")] [Token(Token = "0x400397F")] private int minNumVerts; // Token: 0x04003980 RID: 14720 [global::Cpp2IlInjected.FieldOffset(Offset = "0x14")] [Token(Token = "0x4003980")] private int maxNumVerts; // Token: 0x04003981 RID: 14721 [global::Cpp2IlInjected.FieldOffset(Offset = "0x18")] [Token(Token = "0x4003981")] private float maxDiameterSq; } }