156 lines
5.0 KiB
C#
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;
|
|
}
|
|
}
|