Files
niko c12fbe3fc6 m
2026-04-12 16:51:38 +02:00

318 lines
9.3 KiB
C#

using System;
using System.Collections.Generic;
using Cpp2IlInjected;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x02001359 RID: 4953
[Token(Token = "0x2001359")]
public class ClusterTreeGenerator
{
// Token: 0x06006F2D RID: 28461 RVA: 0x00186AD8 File Offset: 0x00184CD8
[Token(Token = "0x6006F2D")]
[Address(RVA = "0x1F467E0", Offset = "0x1F457E0", VA = "0x181F467E0")]
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: 0x170011E6 RID: 4582
// (get) Token: 0x06006F2E RID: 28462 RVA: 0x00186B10 File Offset: 0x00184D10
// (set) Token: 0x06006F2F RID: 28463 RVA: 0x00186B24 File Offset: 0x00184D24
[Token(Token = "0x170011E6")]
public ClusterTree Tree
{
[Token(Token = "0x6006F2E")]
[Address(RVA = "0x4157C0", Offset = "0x4147C0", VA = "0x1804157C0")]
get;
[Token(Token = "0x6006F2F")]
[Address(RVA = "0x415810", Offset = "0x414810", VA = "0x180415810")]
private set;
}
// Token: 0x06006F30 RID: 28464 RVA: 0x00186B38 File Offset: 0x00184D38
[Token(Token = "0x6006F30")]
[Address(RVA = "0x1F459B0", Offset = "0x1F449B0", VA = "0x181F459B0")]
public void InitTree(List<IClusterLODComponent> components)
{
int num = 0;
ClusterNode clusterNode;
clusterNode.components = components;
int vertexCount = ClusterUtil.GetVertexCount(components, (NPBPPKDLKDN)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: 0x06006F31 RID: 28465 RVA: 0x00186BC0 File Offset: 0x00184DC0
[Token(Token = "0x6006F31")]
[Address(RVA = "0x1F44C60", Offset = "0x1F43C60", VA = "0x181F44C60")]
public bool GenerateTreeCluster()
{
ClusterNode clusterNode = this.unProcessedClusters.Pop();
bool flag = this.SplitCluster(clusterNode);
Stack<ClusterNode> stack = this.unProcessedClusters;
bool flag2;
return flag2;
}
// Token: 0x06006F32 RID: 28466 RVA: 0x00186BF0 File Offset: 0x00184DF0
[Token(Token = "0x6006F32")]
[Address(RVA = "0x1F458A0", Offset = "0x1F448A0", VA = "0x181F458A0")]
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: 0x06006F33 RID: 28467 RVA: 0x00186C20 File Offset: 0x00184E20
[Token(Token = "0x6006F33")]
[Address(RVA = "0x1F45800", Offset = "0x1F44800", VA = "0x181F45800")]
private float GetVolume(Vector3 size)
{
float num = size.z;
float num2;
num = num2;
num2 = num;
return num2;
}
// Token: 0x06006F34 RID: 28468 RVA: 0x00186C3C File Offset: 0x00184E3C
[Token(Token = "0x6006F34")]
[Address(RVA = "0x1F45EA0", Offset = "0x1F44EA0", VA = "0x181F45EA0")]
private bool SplitCluster(ClusterNode cluster)
{
int num;
List<IClusterLODComponent> list;
int num8;
do
{
num = 0;
List<IClusterLODComponent> components = cluster.components;
int num2 = this.minNumObjectPerCluster;
num2 += num2;
float num3;
if (cluster.vertexCount < this.maxNumVerts && this.maxRadius > num3)
{
goto IL_20D;
}
list = new List();
float num5;
float num4 = Mathf.Max(num5, num5) * 0.3f;
List<IClusterLODComponent> components2 = cluster.components;
bool flag;
if (flag)
{
num += num;
num++;
Vector3 vector;
float num6 = vector.z;
float num7;
num5 = num7;
num5 = Mathf.Max(num7, num5);
while (num5 <= num4)
{
}
num6 += 2.7E-44f;
}
if (num != 0)
{
goto IL_21F;
}
if (num != -1)
{
}
if (list._size <= 0)
{
goto IL_EA;
}
bool flag2;
if (flag2)
{
}
num8 = 0;
}
while (num != 0);
ClusterNode clusterNode = new ClusterNode(num, cluster);
cluster.child1 = clusterNode;
this.<Tree>k__BackingField.Nodes.Add(clusterNode);
ClusterNode clusterNode2 = new ClusterNode(list, cluster);
cluster.child2 = clusterNode2;
List<ClusterNode> nodes = this.<Tree>k__BackingField.Nodes;
IL_EA:
ClusterTreeGenerator.SplitResult splitResult;
int bestIndex = splitResult.bestIndex;
int num9 = 0;
List<IClusterLODComponent> range = list.GetRange(num9, bestIndex);
ClusterNode clusterNode3;
clusterNode3.parent = cluster;
clusterNode3.components = range;
int num10 = 0;
int vertexCount = ClusterUtil.GetVertexCount(range, (NPBPPKDLKDN)num10);
clusterNode3.vertexCount = vertexCount;
cluster.child1 = clusterNode3;
this.<Tree>k__BackingField.Nodes.Add(clusterNode3);
int num11 = list._size;
num11 -= clusterNode3;
ClusterNode clusterNode4;
clusterNode4.parent = cluster;
List<IClusterLODComponent> list2;
clusterNode4.components = list2;
int num12 = 0;
int vertexCount2 = ClusterUtil.GetVertexCount(list2, (NPBPPKDLKDN)num12);
clusterNode4.vertexCount = vertexCount2;
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 = num8;
IL_20D:
throw new NullReferenceException();
IL_21F:
throw new NullReferenceException();
}
// Token: 0x06006F35 RID: 28469 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006F35")]
[Address(RVA = "0x1F44CD0", Offset = "0x1F43CD0", VA = "0x181F44CD0")]
private ClusterTreeGenerator.SplitResult GetSplitResult(List<IClusterLODComponent> rawComponents, ClusterTreeGenerator.Axis axis)
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x06006F36 RID: 28470 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006F36")]
[Address(RVA = "0x1F45B10", Offset = "0x1F44B10", VA = "0x181F45B10")]
private void SetupMinMaxBuffers(List<IClusterLODComponent> components, Vector3[] minValues, Vector3[] maxValues)
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x0400499D RID: 18845
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x400499D")]
private ClusterTreeGenerator.Stats stats;
// Token: 0x0400499F RID: 18847
[FieldOffset(Offset = "0x28")]
[Token(Token = "0x400499F")]
private int minNumObjectPerCluster;
// Token: 0x040049A0 RID: 18848
[FieldOffset(Offset = "0x2C")]
[Token(Token = "0x40049A0")]
private int minNumVerts;
// Token: 0x040049A1 RID: 18849
[FieldOffset(Offset = "0x30")]
[Token(Token = "0x40049A1")]
private int maxNumVerts;
// Token: 0x040049A2 RID: 18850
[FieldOffset(Offset = "0x34")]
[Token(Token = "0x40049A2")]
private float maxRadius;
// Token: 0x040049A3 RID: 18851
[FieldOffset(Offset = "0x38")]
[Token(Token = "0x40049A3")]
private float distributeVSminimize;
// Token: 0x040049A4 RID: 18852
[FieldOffset(Offset = "0x40")]
[Token(Token = "0x40049A4")]
private Stack<ClusterNode> unProcessedClusters;
// Token: 0x0200135A RID: 4954
[Token(Token = "0x200135A")]
private struct Stats
{
// Token: 0x040049A5 RID: 18853
[FieldOffset(Offset = "0x0")]
[Token(Token = "0x40049A5")]
public int numOverSized;
// Token: 0x040049A6 RID: 18854
[FieldOffset(Offset = "0x4")]
[Token(Token = "0x40049A6")]
public int xSplits;
// Token: 0x040049A7 RID: 18855
[FieldOffset(Offset = "0x8")]
[Token(Token = "0x40049A7")]
public int ySplits;
// Token: 0x040049A8 RID: 18856
[FieldOffset(Offset = "0xC")]
[Token(Token = "0x40049A8")]
public int zSplits;
}
// Token: 0x0200135B RID: 4955
[Token(Token = "0x200135B")]
private struct SplitResult
{
// Token: 0x040049A9 RID: 18857
[FieldOffset(Offset = "0x0")]
[Token(Token = "0x40049A9")]
public int bestIndex;
// Token: 0x040049AA RID: 18858
[FieldOffset(Offset = "0x4")]
[Token(Token = "0x40049AA")]
public float bestVolume;
// Token: 0x040049AB RID: 18859
[FieldOffset(Offset = "0x8")]
[Token(Token = "0x40049AB")]
public List<IClusterLODComponent> components;
}
// Token: 0x0200135C RID: 4956
[Token(Token = "0x200135C")]
private enum Axis
{
// Token: 0x040049AD RID: 18861
[Token(Token = "0x40049AD")]
X_AXIS,
// Token: 0x040049AE RID: 18862
[Token(Token = "0x40049AE")]
Y_AXIS,
// Token: 0x040049AF RID: 18863
[Token(Token = "0x40049AF")]
Z_AXIS
}
}
}