317 lines
9.8 KiB
C#
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
|
|
}
|
|
}
|
|
}
|