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

317 lines
9.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Cpp2IlInjected;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x02000C98 RID: 3224
[Token(Token = "0x2000C98")]
[StructLayout(3)]
public class ClusterTreeGenerator
{
// Token: 0x06004D92 RID: 19858 RVA: 0x00120F6C File Offset: 0x0011F16C
[Token(Token = "0x6004D92")]
[Address(RVA = "0x1B37180", Offset = "0x1B35B80", VA = "0x181B37180")]
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: 0x17000D75 RID: 3445
// (get) Token: 0x06004D93 RID: 19859 RVA: 0x00120FA4 File Offset: 0x0011F1A4
// (set) Token: 0x06004D94 RID: 19860 RVA: 0x00120FB8 File Offset: 0x0011F1B8
[Token(Token = "0x17000D75")]
public ClusterTree Tree
{
[Token(Token = "0x6004D93")]
[Address(RVA = "0x3C1220", Offset = "0x3BFC20", VA = "0x1803C1220")]
get;
[Token(Token = "0x6004D94")]
[Address(RVA = "0x3C1260", Offset = "0x3BFC60", VA = "0x1803C1260")]
private set;
}
// Token: 0x06004D95 RID: 19861 RVA: 0x00120FCC File Offset: 0x0011F1CC
[Token(Token = "0x6004D95")]
[Address(RVA = "0x1B362B0", Offset = "0x1B34CB0", VA = "0x181B362B0")]
public void InitTree(List<IClusterLODComponent> components)
{
int num = 0;
ClusterNode clusterNode;
clusterNode.components = components;
int vertexCount = ClusterUtil.GetVertexCount(components, num);
clusterNode.vertexCount = vertexCount;
List<ClusterNode> list = new List();
ClusterTree clusterTree;
clusterTree.Nodes = list;
List<ClusterNode> nodes = clusterTree.Nodes;
clusterTree.<Root>k__BackingField = clusterNode;
nodes.Add(clusterNode);
this.<Tree>k__BackingField = clusterTree;
Stack<ClusterNode> stack = new Stack();
ClusterTree clusterTree2 = this.<Tree>k__BackingField;
this.unProcessedClusters = stack;
ClusterNode <Root>k__BackingField = clusterTree2.<Root>k__BackingField;
stack.Push(<Root>k__BackingField);
}
// Token: 0x06004D96 RID: 19862 RVA: 0x00121054 File Offset: 0x0011F254
[Token(Token = "0x6004D96")]
[Address(RVA = "0x1B35560", Offset = "0x1B33F60", VA = "0x181B35560")]
public bool GenerateTreeCluster()
{
ClusterNode clusterNode = this.unProcessedClusters.Pop();
bool flag = this.SplitCluster(clusterNode);
Stack<ClusterNode> stack = this.unProcessedClusters;
bool flag2;
return flag2;
}
// Token: 0x06004D97 RID: 19863 RVA: 0x00121084 File Offset: 0x0011F284
[Token(Token = "0x6004D97")]
[Address(RVA = "0x1B361A0", Offset = "0x1B34BA0", VA = "0x181B361A0")]
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: 0x06004D98 RID: 19864 RVA: 0x001210B4 File Offset: 0x0011F2B4
[Token(Token = "0x6004D98")]
[Address(RVA = "0x1B36100", Offset = "0x1B34B00", VA = "0x181B36100")]
private float GetVolume(Vector3 size)
{
float num = size.z;
float num2;
num = num2;
num2 = num;
return num2;
}
// Token: 0x06004D99 RID: 19865 RVA: 0x001210D0 File Offset: 0x0011F2D0
[Token(Token = "0x6004D99")]
[Address(RVA = "0x1B367A0", Offset = "0x1B351A0", VA = "0x181B367A0")]
private bool SplitCluster(ClusterNode cluster)
{
int num = 0;
List<IClusterLODComponent> components = cluster.components;
int num2 = this.minNumObjectPerCluster;
num2 += num2;
if (cluster.vertexCount < this.maxNumVerts)
{
float num3 = this.maxRadius;
}
List<IClusterLODComponent> list = new List();
float num5;
float num4 = Mathf.Max(num5, num5) * 0.3f;
List<IClusterLODComponent> components2 = cluster.components;
List.Enumerator enumerator;
if (enumerator != 0)
{
num += num;
num++;
float num6;
num5 = num6;
num5 = Mathf.Max(num6, num5);
while (num5 <= num4)
{
}
num += 19;
}
if (num != -1)
{
if (list._size <= 0)
{
goto IL_10F;
}
List.Enumerator enumerator2;
if (enumerator2 != 0)
{
}
}
num++;
int num7 = 0;
if (num != -1)
{
}
ClusterNode clusterNode;
clusterNode.parent = cluster;
clusterNode.components = num;
int num8 = 0;
int vertexCount = ClusterUtil.GetVertexCount(num, num8);
clusterNode.vertexCount = vertexCount;
cluster.child1 = clusterNode;
this.<Tree>k__BackingField.Nodes.Add(clusterNode);
ClusterNode clusterNode2;
clusterNode2.parent = cluster;
clusterNode2.components = list;
int num9 = 0;
int vertexCount2 = ClusterUtil.GetVertexCount(list, num9);
clusterNode2.vertexCount = vertexCount2;
cluster.child2 = clusterNode2;
List<ClusterNode> nodes = this.<Tree>k__BackingField.Nodes;
IL_10F:
ClusterTreeGenerator.SplitResult splitResult;
int bestIndex = splitResult.bestIndex;
int num10 = 0;
List<IClusterLODComponent> range = list.GetRange(num10, bestIndex);
ClusterNode clusterNode3;
clusterNode3.parent = cluster;
clusterNode3.components = range;
int num11 = 0;
int vertexCount3 = ClusterUtil.GetVertexCount(range, num11);
clusterNode3.vertexCount = vertexCount3;
cluster.child1 = clusterNode3;
this.<Tree>k__BackingField.Nodes.Add(clusterNode3);
int num12 = list._size;
num12 -= clusterNode3;
ClusterNode clusterNode4;
clusterNode4.parent = cluster;
List<IClusterLODComponent> list2;
clusterNode4.components = list2;
int num13 = 0;
int vertexCount4 = ClusterUtil.GetVertexCount(list2, num13);
clusterNode4.vertexCount = vertexCount4;
cluster.child2 = clusterNode4;
this.<Tree>k__BackingField.Nodes.Add(clusterNode4);
Stack<ClusterNode> stack = this.unProcessedClusters;
ClusterNode child = cluster.child1;
stack.Push(child);
Stack<ClusterNode> stack2 = this.unProcessedClusters;
ClusterNode child2 = cluster.child2;
stack2.Push(child2);
List<ClusterNode> nodes2 = this.<Tree>k__BackingField.Nodes;
ClusterNode child3 = cluster.child1;
nodes2.Add(child3);
List<ClusterNode> nodes3 = this.<Tree>k__BackingField.Nodes;
ClusterNode child4 = cluster.child2;
nodes3.Add(child4);
cluster.components = num7;
throw new NullReferenceException();
}
// Token: 0x06004D9A RID: 19866 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6004D9A")]
[Address(RVA = "0x1B355D0", Offset = "0x1B33FD0", VA = "0x181B355D0")]
private ClusterTreeGenerator.SplitResult GetSplitResult(List<IClusterLODComponent> rawComponents, ClusterTreeGenerator.Axis axis)
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x06004D9B RID: 19867 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6004D9B")]
[Address(RVA = "0x1B36410", Offset = "0x1B34E10", VA = "0x181B36410")]
private void SetupMinMaxBuffers(List<IClusterLODComponent> components, Vector3[] minValues, Vector3[] maxValues)
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x040039A5 RID: 14757
[global::Cpp2IlInjected.FieldOffset(Offset = "0x10")]
[Token(Token = "0x40039A5")]
private ClusterTreeGenerator.Stats stats;
// Token: 0x040039A7 RID: 14759
[global::Cpp2IlInjected.FieldOffset(Offset = "0x28")]
[Token(Token = "0x40039A7")]
private int minNumObjectPerCluster;
// Token: 0x040039A8 RID: 14760
[global::Cpp2IlInjected.FieldOffset(Offset = "0x2C")]
[Token(Token = "0x40039A8")]
private int minNumVerts;
// Token: 0x040039A9 RID: 14761
[global::Cpp2IlInjected.FieldOffset(Offset = "0x30")]
[Token(Token = "0x40039A9")]
private int maxNumVerts;
// Token: 0x040039AA RID: 14762
[global::Cpp2IlInjected.FieldOffset(Offset = "0x34")]
[Token(Token = "0x40039AA")]
private float maxRadius;
// Token: 0x040039AB RID: 14763
[global::Cpp2IlInjected.FieldOffset(Offset = "0x38")]
[Token(Token = "0x40039AB")]
private float distributeVSminimize;
// Token: 0x040039AC RID: 14764
[global::Cpp2IlInjected.FieldOffset(Offset = "0x40")]
[Token(Token = "0x40039AC")]
private Stack<ClusterNode> unProcessedClusters;
// Token: 0x02000C99 RID: 3225
[Token(Token = "0x2000C99")]
private struct Stats
{
// Token: 0x040039AD RID: 14765
[global::Cpp2IlInjected.FieldOffset(Offset = "0x0")]
[Token(Token = "0x40039AD")]
public int numOverSized;
// Token: 0x040039AE RID: 14766
[global::Cpp2IlInjected.FieldOffset(Offset = "0x4")]
[Token(Token = "0x40039AE")]
public int xSplits;
// Token: 0x040039AF RID: 14767
[global::Cpp2IlInjected.FieldOffset(Offset = "0x8")]
[Token(Token = "0x40039AF")]
public int ySplits;
// Token: 0x040039B0 RID: 14768
[global::Cpp2IlInjected.FieldOffset(Offset = "0xC")]
[Token(Token = "0x40039B0")]
public int zSplits;
}
// Token: 0x02000C9A RID: 3226
[Token(Token = "0x2000C9A")]
private struct SplitResult
{
// Token: 0x040039B1 RID: 14769
[global::Cpp2IlInjected.FieldOffset(Offset = "0x0")]
[Token(Token = "0x40039B1")]
public int bestIndex;
// Token: 0x040039B2 RID: 14770
[global::Cpp2IlInjected.FieldOffset(Offset = "0x4")]
[Token(Token = "0x40039B2")]
public float bestVolume;
// Token: 0x040039B3 RID: 14771
[global::Cpp2IlInjected.FieldOffset(Offset = "0x8")]
[Token(Token = "0x40039B3")]
public List<IClusterLODComponent> components;
}
// Token: 0x02000C9B RID: 3227
[Token(Token = "0x2000C9B")]
private enum Axis
{
// Token: 0x040039B5 RID: 14773
[Token(Token = "0x40039B5")]
X_AXIS,
// Token: 0x040039B6 RID: 14774
[Token(Token = "0x40039B6")]
Y_AXIS,
// Token: 0x040039B7 RID: 14775
[Token(Token = "0x40039B7")]
Z_AXIS
}
}
}