165 lines
5.1 KiB
C#
165 lines
5.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Cpp2IlInjected;
|
|
using UnityEngine;
|
|
|
|
namespace ClusterLOD
|
|
{
|
|
// Token: 0x02001281 RID: 4737
|
|
[Token(Token = "0x2001281")]
|
|
public class ClusterMeshGenerator
|
|
{
|
|
// Token: 0x06006B92 RID: 27538 RVA: 0x0017DCBC File Offset: 0x0017BEBC
|
|
[Token(Token = "0x6006B92")]
|
|
[Address(RVA = "0x1465B30", Offset = "0x1464930", VA = "0x181465B30")]
|
|
public ClusterMeshGenerator(int minNumVerts, int maxNumVerts, float maxRadius)
|
|
{
|
|
this.minNumVerts = minNumVerts;
|
|
this.maxNumVerts = maxNumVerts;
|
|
this.maxDiameterSq = maxRadius;
|
|
}
|
|
|
|
// Token: 0x17001162 RID: 4450
|
|
// (get) Token: 0x06006B93 RID: 27539 RVA: 0x0017DCE4 File Offset: 0x0017BEE4
|
|
// (set) Token: 0x06006B94 RID: 27540 RVA: 0x0017DCF8 File Offset: 0x0017BEF8
|
|
[Token(Token = "0x17001162")]
|
|
public List<ClusterMesh> Meshes
|
|
{
|
|
[Token(Token = "0x6006B93")]
|
|
[Address(RVA = "0x3F6400", Offset = "0x3F5200", VA = "0x1803F6400")]
|
|
get;
|
|
[Token(Token = "0x6006B94")]
|
|
[Address(RVA = "0x460F90", Offset = "0x45FD90", VA = "0x180460F90")]
|
|
private set;
|
|
}
|
|
|
|
// Token: 0x06006B95 RID: 27541 RVA: 0x0017DD0C File Offset: 0x0017BF0C
|
|
[Token(Token = "0x6006B95")]
|
|
[Address(RVA = "0x14657E0", Offset = "0x14645E0", VA = "0x1814657E0")]
|
|
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: 0x06006B96 RID: 27542 RVA: 0x0017DD4C File Offset: 0x0017BF4C
|
|
[Token(Token = "0x6006B96")]
|
|
[Address(RVA = "0x1465A90", Offset = "0x1464890", VA = "0x181465A90")]
|
|
private int UpdateVertexCount(ClusterNode node)
|
|
{
|
|
if (node != 0)
|
|
{
|
|
List<IClusterLODComponent> components = node.components;
|
|
if (components != 0)
|
|
{
|
|
int vertexCount = ClusterUtil.GetVertexCount(components, NPBPPKDLKDN.Far);
|
|
}
|
|
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: 0x06006B97 RID: 27543 RVA: 0x0017DDBC File Offset: 0x0017BFBC
|
|
[Token(Token = "0x6006B97")]
|
|
[Address(RVA = "0x1465870", Offset = "0x1464670", VA = "0x181465870")]
|
|
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;
|
|
Vector3 vector2;
|
|
float z2 = vector2.z;
|
|
Vector3 vector3;
|
|
float z3 = vector3.z;
|
|
float num3;
|
|
if (num3 > this.maxDiameterSq)
|
|
{
|
|
int num4 = this.minNumVerts;
|
|
if (node.vertexCount > num4)
|
|
{
|
|
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: 0x06006B98 RID: 27544 RVA: 0x0017DE74 File Offset: 0x0017C074
|
|
[Token(Token = "0x6006B98")]
|
|
[Address(RVA = "0x1465620", Offset = "0x1464420", VA = "0x181465620")]
|
|
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;
|
|
PCIKHFEIHGO pcikhfeihgo = new PCIKHFEIHGO();
|
|
clusterInfo.nativeMesh = pcikhfeihgo;
|
|
SubdivideMeshData subdivideMeshData = new SubdivideMeshData();
|
|
clusterInfo.subdivideMeshData = subdivideMeshData;
|
|
List<IClusterLODComponent> components = node.components;
|
|
clusterInfo.components = components;
|
|
Bounds bounds = node.bounds;
|
|
clusterInfo.bounds = bounds;
|
|
newClusterMesh.Clusters.Add(clusterInfo);
|
|
int componentCount = newClusterMesh.componentCount;
|
|
int num = clusterInfo.components._size;
|
|
num += componentCount;
|
|
newClusterMesh.componentCount = num;
|
|
}
|
|
ClusterNode child = node.child1;
|
|
this.AssignNodesToMesh(child, newClusterMesh);
|
|
}
|
|
}
|
|
|
|
// Token: 0x040047F3 RID: 18419
|
|
[FieldOffset(Offset = "0x10")]
|
|
[Token(Token = "0x40047F3")]
|
|
private int minNumVerts;
|
|
|
|
// Token: 0x040047F4 RID: 18420
|
|
[FieldOffset(Offset = "0x14")]
|
|
[Token(Token = "0x40047F4")]
|
|
private int maxNumVerts;
|
|
|
|
// Token: 0x040047F5 RID: 18421
|
|
[FieldOffset(Offset = "0x18")]
|
|
[Token(Token = "0x40047F5")]
|
|
private float maxDiameterSq;
|
|
}
|
|
}
|