Files
2026-04-08 23:40:05 +02:00

156 lines
5.0 KiB
C#

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<ClusterMesh> 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<ClusterMesh> list = new List();
this.<Meshes>k__BackingField = list;
ClusterNode <Root>k__BackingField = tree.<Root>k__BackingField;
int num = this.UpdateVertexCount(<Root>k__BackingField);
ClusterNode <Root>k__BackingField2 = tree.<Root>k__BackingField;
this.CreateClusterMeshInstances(<Root>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<IClusterLODComponent> 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<ClusterMesh.ClusterInfo> 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<IClusterLODComponent> list = new List();
clusterInfo.components = list;
NativeClusterMesh nativeClusterMesh = new NativeClusterMesh();
clusterInfo.nativeMesh = nativeClusterMesh;
SubdivideMeshData subdivideMeshData = new SubdivideMeshData();
clusterInfo.subdivideMeshData = subdivideMeshData;
List<IClusterLODComponent> 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;
}
}