This commit is contained in:
niko
2026-04-12 16:51:38 +02:00
parent 1b6f6d81d0
commit c12fbe3fc6
17828 changed files with 2994770 additions and 0 deletions
@@ -0,0 +1,225 @@
using System;
using Cpp2IlInjected;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x02001340 RID: 4928
[Token(Token = "0x2001340")]
[CreateAssetMenu]
public class ClusterLODConfig : ScriptableObject
{
// Token: 0x06006E8D RID: 28301 RVA: 0x001841AC File Offset: 0x001823AC
[Token(Token = "0x6006E8D")]
[Address(RVA = "0x1F3CC80", Offset = "0x1F3BC80", VA = "0x181F3CC80")]
public ClusterLODConfig.LODSettings GetSettings(NPBPPKDLKDN lod)
{
if (lod != NPBPPKDLKDN.Near)
{
return this.far;
}
return this.near;
}
// Token: 0x06006E8E RID: 28302 RVA: 0x001841CC File Offset: 0x001823CC
[Token(Token = "0x6006E8E")]
[Address(RVA = "0x1F3CC60", Offset = "0x1F3BC60", VA = "0x181F3CC60")]
public int GetMaxNumActiveLOD0Verts()
{
return this.maxDynamicNearVerts;
}
// Token: 0x06006E8F RID: 28303 RVA: 0x001841E0 File Offset: 0x001823E0
[Token(Token = "0x6006E8F")]
[Address(RVA = "0x1F3CC90", Offset = "0x1F3BC90", VA = "0x181F3CC90")]
public ClusterLODConfig()
{
}
// Token: 0x040048F2 RID: 18674
[FieldOffset(Offset = "0x18")]
[Token(Token = "0x40048F2")]
[Header("Layer Settings")]
public float maxRadiusForDetailObjects = 1f;
// Token: 0x040048F3 RID: 18675
[FieldOffset(Offset = "0x1C")]
[Token(Token = "0x40048F3")]
public int maxWorldLODVerts = (int)((ulong)80000L);
// Token: 0x040048F4 RID: 18676
[FieldOffset(Offset = "0x20")]
[Token(Token = "0x40048F4")]
public int maxWorldNearVerts = (int)((ulong)30000L);
// Token: 0x040048F5 RID: 18677
[FieldOffset(Offset = "0x24")]
[Token(Token = "0x40048F5")]
public int maxDetailNearVerts = (int)((ulong)30000L);
// Token: 0x040048F6 RID: 18678
[FieldOffset(Offset = "0x28")]
[Token(Token = "0x40048F6")]
public int maxDetailFarVerts = (int)((ulong)50000L);
// Token: 0x040048F7 RID: 18679
[FieldOffset(Offset = "0x2C")]
[Token(Token = "0x40048F7")]
public int maxDynamicNearVerts = (int)((ulong)30000L);
// Token: 0x040048F8 RID: 18680
[FieldOffset(Offset = "0x30")]
[Token(Token = "0x40048F8")]
public int maxDynamicFarVerts = (int)((ulong)50000L);
// Token: 0x040048F9 RID: 18681
[FieldOffset(Offset = "0x34")]
[Token(Token = "0x40048F9")]
[Header("Creation Settings")]
public int minNumObjectPerCluster = (int)((ulong)5L);
// Token: 0x040048FA RID: 18682
[FieldOffset(Offset = "0x38")]
[Token(Token = "0x40048FA")]
public float distributeVSminimize = 0.5f;
// Token: 0x040048FB RID: 18683
[FieldOffset(Offset = "0x40")]
[Token(Token = "0x40048FB")]
[Header("Near Settings")]
public ClusterLODConfig.LODSettings near;
// Token: 0x040048FC RID: 18684
[FieldOffset(Offset = "0x48")]
[Token(Token = "0x40048FC")]
[Header("Far Settings")]
public ClusterLODConfig.LODSettings far;
// Token: 0x040048FD RID: 18685
[FieldOffset(Offset = "0x50")]
[Token(Token = "0x40048FD")]
public float backfaceCullingThreshold = 0.1f;
// Token: 0x040048FE RID: 18686
[FieldOffset(Offset = "0x54")]
[Token(Token = "0x40048FE")]
public float triangleCullingDistFactor = 150f;
// Token: 0x040048FF RID: 18687
[FieldOffset(Offset = "0x58")]
[Token(Token = "0x40048FF")]
public float LOD0VertCacheFrac = 2f;
// Token: 0x02001341 RID: 4929
[Token(Token = "0x2001341")]
[Serializable]
public class LODSettings
{
// Token: 0x170011CD RID: 4557
// (get) Token: 0x06006E90 RID: 28304 RVA: 0x00184284 File Offset: 0x00182484
[Token(Token = "0x170011CD")]
public bool ShouldSubDivide
{
[Token(Token = "0x6006E90")]
[Address(RVA = "0x1F492A0", Offset = "0x1F482A0", VA = "0x181F492A0")]
get
{
/*
An exception occurred when decompiling this method (06006E90)
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Boolean ClusterLOD.ClusterLODConfig/LODSettings::get_ShouldSubDivide()
---> System.Exception: Basic block has to end with unconditional control flow.
{
IL_0F:
stloc:float32(var_3_15, ldfld:float32(LODSettings::maxSubDivideDistance, ldloc:LODSettings(this)))
}
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1852
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 355
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
--- End of inner exception stack trace ---
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1663
*/;
}
}
// Token: 0x170011CE RID: 4558
// (get) Token: 0x06006E91 RID: 28305 RVA: 0x001842A8 File Offset: 0x001824A8
[Token(Token = "0x170011CE")]
public bool UseTangents
{
[Token(Token = "0x6006E91")]
[Address(RVA = "0x9C40B0", Offset = "0x9C30B0", VA = "0x1809C40B0")]
get
{
return this.useMaterials;
}
}
// Token: 0x06006E92 RID: 28306 RVA: 0x001842BC File Offset: 0x001824BC
[Token(Token = "0x6006E92")]
[Address(RVA = "0x1F49260", Offset = "0x1F48260", VA = "0x181F49260")]
public LODSettings()
{
}
// Token: 0x04004900 RID: 18688
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x4004900")]
public float maxRadiusOfCluster = 5f;
// Token: 0x04004901 RID: 18689
[FieldOffset(Offset = "0x14")]
[Token(Token = "0x4004901")]
public int minNumVertsInCluster = (int)((ulong)2000L);
// Token: 0x04004902 RID: 18690
[FieldOffset(Offset = "0x18")]
[Token(Token = "0x4004902")]
public int maxNumVertsInCluster = (int)((ulong)20000L);
// Token: 0x04004903 RID: 18691
[FieldOffset(Offset = "0x1C")]
[Token(Token = "0x4004903")]
public float useLowestDetailAtSmallerRadius = 0.2f;
// Token: 0x04004904 RID: 18692
[FieldOffset(Offset = "0x20")]
[Token(Token = "0x4004904")]
public float useHighestDetailAtGreaterRadius = 0.8f;
// Token: 0x04004905 RID: 18693
[FieldOffset(Offset = "0x24")]
[Token(Token = "0x4004905")]
public float maxVertSnapDist = 0.01f;
// Token: 0x04004906 RID: 18694
[FieldOffset(Offset = "0x28")]
[Token(Token = "0x4004906")]
public float vertexNormalCombineThresh = 0.8f;
// Token: 0x04004907 RID: 18695
[FieldOffset(Offset = "0x2C")]
[Token(Token = "0x4004907")]
public float maxSubDivideEdgeSize;
// Token: 0x04004908 RID: 18696
[FieldOffset(Offset = "0x30")]
[Token(Token = "0x4004908")]
public float maxSubDivideDistance;
// Token: 0x04004909 RID: 18697
[FieldOffset(Offset = "0x34")]
[Token(Token = "0x4004909")]
public bool cullEncapsulated = true;
// Token: 0x0400490A RID: 18698
[FieldOffset(Offset = "0x35")]
[Token(Token = "0x400490A")]
public bool useMaterials;
}
}
}
@@ -0,0 +1,907 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using Cpp2IlInjected;
using RecRoom.Core.Creation.Shapes;
using RecRoom.Persistence;
using Unity.Jobs;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x02001342 RID: 4930
[Token(Token = "0x2001342")]
public class ClusterLODManager : MonoBehaviour
{
// Token: 0x170011CF RID: 4559
// (get) Token: 0x06006E93 RID: 28307 RVA: 0x00184328 File Offset: 0x00182528
// (set) Token: 0x06006E94 RID: 28308 RVA: 0x0018433C File Offset: 0x0018253C
[Token(Token = "0x170011CF")]
public ClusterLODConfig Config
{
[Token(Token = "0x6006E93")]
[Address(RVA = "0x4157B0", Offset = "0x4147B0", VA = "0x1804157B0")]
get;
[Token(Token = "0x6006E94")]
[Address(RVA = "0x4157F0", Offset = "0x4147F0", VA = "0x1804157F0")]
private set;
}
// Token: 0x170011D0 RID: 4560
// (get) Token: 0x06006E95 RID: 28309 RVA: 0x0000220F File Offset: 0x0000040F
// (set) Token: 0x06006E96 RID: 28310 RVA: 0x00184350 File Offset: 0x00182550
[Token(Token = "0x170011D0")]
public Vector3 EyePos
{
[Token(Token = "0x6006E95")]
[Address(RVA = "0x169B820", Offset = "0x169A820", VA = "0x18169B820")]
[CompilerGenerated]
get
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
[Token(Token = "0x6006E96")]
[Address(RVA = "0x169B420", Offset = "0x169A420", VA = "0x18169B420")]
[CompilerGenerated]
private set
{
float z = value.z;
this.<EyePos>k__BackingField.z = z;
}
}
// Token: 0x170011D1 RID: 4561
// (get) Token: 0x06006E97 RID: 28311 RVA: 0x00184370 File Offset: 0x00182570
[Token(Token = "0x170011D1")]
public static ClusterLODManager Instance
{
[Token(Token = "0x6006E97")]
[Address(RVA = "0x1F3F680", Offset = "0x1F3E680", VA = "0x181F3F680")]
get
{
return ClusterLODManager._instance;
}
}
// Token: 0x06006E98 RID: 28312 RVA: 0x00184384 File Offset: 0x00182584
[Token(Token = "0x6006E98")]
[Address(RVA = "0x1F3DA30", Offset = "0x1F3CA30", VA = "0x181F3DA30")]
private void OnDestroy()
{
CreateMeshFromClusterJob createMeshFromClusterJob = this.ClusterMeshAssetCache.createMeshFromClusterJob;
JobHandle <jobHandle>k__BackingField = createMeshFromClusterJob.<jobHandle>k__BackingField;
createMeshFromClusterJob.sharedResultMesh.Dispose();
createMeshFromClusterJob.optimizationData.Dispose();
bool flag;
if (flag)
{
}
if (NetworkedSingletonMonoBehaviour.ONCPNMDGGKG)
{
RoomPersistenceManager instance = NetworkedSingletonMonoBehaviour.ONCPNMDGGKG;
Action action = new Action(this.OnRoomStartLoad);
instance.OEEEEIDBCDJ -= action;
RoomPersistenceManager instance2 = NetworkedSingletonMonoBehaviour.ONCPNMDGGKG;
Action action2 = new Action(this.OnRoomStartLoad);
instance2.NNKFGEALMHJ -= action2;
}
}
// Token: 0x06006E99 RID: 28313 RVA: 0x0018440C File Offset: 0x0018260C
[Token(Token = "0x6006E99")]
[Address(RVA = "0x1F3E6A0", Offset = "0x1F3D6A0", VA = "0x181F3E6A0")]
public static void SetSpawnPosition(Vector3 spawnPos)
{
ClusterLODManager instance = ClusterLODManager._instance;
int num = 0;
if (instance != num)
{
ClusterLODManager instance2 = ClusterLODManager._instance;
float z = spawnPos.z;
instance2.<EyePos>k__BackingField.z = z;
}
}
// Token: 0x170011D2 RID: 4562
// (get) Token: 0x06006E9A RID: 28314 RVA: 0x0018444C File Offset: 0x0018264C
[Token(Token = "0x170011D2")]
public static bool WorldCreated
{
[Token(Token = "0x6006E9A")]
[Address(RVA = "0x1F3F740", Offset = "0x1F3E740", VA = "0x181F3F740")]
get
{
ClusterLODManager instance = ClusterLODManager._instance;
int num = 0;
return instance == num || ClusterLODManager._instance.CurrentState == ClusterLODManager.State.Running;
}
}
// Token: 0x170011D3 RID: 4563
// (get) Token: 0x06006E9B RID: 28315 RVA: 0x00184480 File Offset: 0x00182680
[Token(Token = "0x170011D3")]
public static bool ComponentCollectionEnabled
{
[Token(Token = "0x6006E9B")]
[Address(RVA = "0x1F3F570", Offset = "0x1F3E570", VA = "0x181F3F570")]
get
{
ClusterLODManager instance = ClusterLODManager._instance;
int num = 0;
bool flag = instance != num;
if (!flag)
{
return flag;
}
return ClusterLODManager._instance.CurrentState == ClusterLODManager.State.Waiting || ClusterLODManager._instance.CurrentState == ClusterLODManager.State.Collecting;
}
}
// Token: 0x06006E9C RID: 28316 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006E9C")]
[Address(RVA = "0x1F3CE60", Offset = "0x1F3BE60", VA = "0x181F3CE60")]
private void Awake()
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x06006E9D RID: 28317 RVA: 0x001844C8 File Offset: 0x001826C8
[Token(Token = "0x6006E9D")]
[Address(RVA = "0x1F3ED50", Offset = "0x1F3DD50", VA = "0x181F3ED50")]
private void StopCreateWorld()
{
Coroutine coroutine = this.createWorldCoroutine;
if (coroutine != 0)
{
base.StopCoroutine(coroutine);
this.createWorldCoroutine = (ulong)0L;
}
Coroutine coroutine2 = this.assignLODsCoroutine;
if (coroutine2 != 0)
{
base.StopCoroutine(coroutine2);
this.assignLODsCoroutine = (ulong)0L;
}
}
// Token: 0x06006E9E RID: 28318 RVA: 0x0018450C File Offset: 0x0018270C
[Token(Token = "0x6006E9E")]
[Address(RVA = "0x1F3DC60", Offset = "0x1F3CC60", VA = "0x181F3DC60")]
private void OnRoomStartLoad()
{
ClusterMeshAssetCache clusterMeshAssetCache = this.ClusterMeshAssetCache;
CreateMeshFromClusterJob createMeshFromClusterJob = clusterMeshAssetCache.createMeshFromClusterJob;
JobHandle <jobHandle>k__BackingField = createMeshFromClusterJob.<jobHandle>k__BackingField;
int num = 0;
createMeshFromClusterJob.<cluster>k__BackingField = num;
clusterMeshAssetCache.createQueue.Clear();
OMCHJHPFBDN.KGFPNIMJHIC(this.detailRoot);
OMCHJHPFBDN.KGFPNIMJHIC(this.worldRoot);
GameObject gameObject = new GameObject("DetailRoot");
this.detailRoot = gameObject;
Transform transform = gameObject.transform;
Transform transform2 = base.transform;
transform.parent = transform2;
GameObject gameObject2 = new GameObject("WorldRoot");
this.worldRoot = gameObject2;
Transform transform3 = gameObject2.transform;
Transform transform4 = base.transform;
transform3.parent = transform4;
this.worldClusterMeshRenderers[num].Clear();
this.clusterInfos[num].Clear();
num++;
this.newAddedStaticComponents.Clear();
this.newAddedWorldComponents.Clear();
this.newAddedDetailComponents.Clear();
this.newShapeContainers.Clear();
Coroutine coroutine = this.createWorldCoroutine;
if (coroutine != 0)
{
base.StopCoroutine(coroutine);
this.createWorldCoroutine = num;
}
Coroutine coroutine2 = this.assignLODsCoroutine;
if (coroutine2 != 0)
{
base.StopCoroutine(coroutine2);
this.assignLODsCoroutine = num;
}
this.CurrentState = (ClusterLODManager.State)num;
ClusterLODManager.<CreateWorld>d__41 <CreateWorld>d__;
<CreateWorld>d__.System.IDisposable.Dispose();
<CreateWorld>d__.<>1__state = num;
<CreateWorld>d__.<>4__this = this;
Coroutine coroutine3 = base.StartCoroutine(<CreateWorld>d__);
this.createWorldCoroutine = coroutine3;
}
// Token: 0x06006E9F RID: 28319 RVA: 0x00184674 File Offset: 0x00182874
[Token(Token = "0x6006E9F")]
[Address(RVA = "0x1F3E970", Offset = "0x1F3D970", VA = "0x181F3E970")]
private void Start()
{
Transform transform = base.transform;
float z = Vector3.zero.z;
Transform transform2 = base.transform;
Quaternion identity = Quaternion.identity;
GameObject gameObject = new GameObject("DetailRoot");
this.detailRoot = gameObject;
Transform transform3 = gameObject.transform;
Transform transform4 = base.transform;
transform3.parent = transform4;
GameObject gameObject2 = new GameObject("WorldRoot");
this.worldRoot = gameObject2;
Transform transform5 = gameObject2.transform;
Transform transform6 = base.transform;
transform5.parent = transform6;
int num = 0;
List<ClusterMeshRenderer>[] array = this.worldClusterMeshRenderers;
List<ClusterMeshRenderer> list = new List();
if (list != 0)
{
}
array[0] = list;
List<ClusterMesh.ClusterInfo>[] array2 = this.clusterInfos;
List<ClusterMesh.ClusterInfo> list2 = new List();
if (list2 != 0)
{
}
num++;
array2[0] = list2;
RoomPersistenceManager instance = NetworkedSingletonMonoBehaviour.ONCPNMDGGKG;
Action action = new Action(this.OnRoomStartLoad);
instance.OEEEEIDBCDJ += action;
RoomPersistenceManager instance2 = NetworkedSingletonMonoBehaviour.ONCPNMDGGKG;
Action action2 = new Action(this.OnRoomStartLoad);
instance2.NNKFGEALMHJ += action2;
ClusterLODManager.<CreateWorld>d__41 <CreateWorld>d__;
<CreateWorld>d__.System.IDisposable.Dispose();
<CreateWorld>d__.<>1__state = (int)((ulong)0L);
<CreateWorld>d__.<>4__this = this;
Coroutine coroutine = base.StartCoroutine(<CreateWorld>d__);
this.createWorldCoroutine = coroutine;
}
// Token: 0x06006EA0 RID: 28320 RVA: 0x001847B0 File Offset: 0x001829B0
[Token(Token = "0x6006EA0")]
[Address(RVA = "0x1F3F330", Offset = "0x1F3E330", VA = "0x181F3F330")]
private void Update()
{
if (this.CurrentState == ClusterLODManager.State.Running)
{
this.UpdateLODs();
bool flag = this.ClusterMeshAssetCache.Update();
return;
}
}
// Token: 0x06006EA1 RID: 28321 RVA: 0x001847E0 File Offset: 0x001829E0
[Token(Token = "0x6006EA1")]
[Address(RVA = "0x1F3D050", Offset = "0x1F3C050", VA = "0x181F3D050")]
private IEnumerator CreateWorld()
{
/*
An exception occurred when decompiling this method (06006EA1)
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Collections.IEnumerator ClusterLOD.ClusterLODManager::CreateWorld()
---> System.Exception: Basic block has to end with unconditional control flow.
{
Block_0:
call:void('<CreateWorld>d__41'::System.IDisposable.Dispose, ldloc:'<CreateWorld>d__41'(var_0))
stfld:int32('<CreateWorld>d__41'::<>1__state, ldloc:'<CreateWorld>d__41'(var_0), conv.u8:uint64[exp:int32](ldc.i8:int64[exp:uint64](0)))
stfld:ClusterLODManager('<CreateWorld>d__41'::<>4__this, ldloc:'<CreateWorld>d__41'(var_0), ldloc:ClusterLODManager(this))
}
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1852
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 355
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
--- End of inner exception stack trace ---
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1663
*/;
}
// Token: 0x06006EA2 RID: 28322 RVA: 0x00184804 File Offset: 0x00182A04
[Token(Token = "0x6006EA2")]
[Address(RVA = "0x1F3D800", Offset = "0x1F3C800", VA = "0x181F3D800")]
public int GetDetailFromHalfSize(bool near, Vector3 halfSize)
{
ClusterLODConfig clusterLODConfig = this.<Config>k__BackingField;
if (near)
{
}
ClusterLODConfig.LODSettings far = clusterLODConfig.far;
float useHighestDetailAtGreaterRadius = far.useHighestDetailAtGreaterRadius;
int num = 0;
float useLowestDetailAtSmallerRadius = far.useLowestDetailAtSmallerRadius;
return num + 1;
}
// Token: 0x06006EA3 RID: 28323 RVA: 0x00184840 File Offset: 0x00182A40
[Token(Token = "0x6006EA3")]
[Address(RVA = "0x1F3EFA0", Offset = "0x1F3DFA0", VA = "0x181F3EFA0")]
public void UpdateLODs()
{
List<ClusterMeshRenderer>[] array = this.worldClusterMeshRenderers;
int num = 0;
int num2 = 0;
List<ClusterMeshRenderer> list = array[num2];
num2++;
uint num3;
if (num != 0 && num3 > (uint)0)
{
int num4 = this.clusterIndex;
num4++;
List<ClusterMeshRenderer>[] array2 = this.worldClusterMeshRenderers;
int num5 = 0;
this.clusterIndex = num2;
int size = array2[num5]._size;
num2 -= size;
num5++;
if (num5 < 3)
{
bool flag;
bool flag2;
if (flag || !flag2)
{
bool flag3;
if (flag3)
{
GameObject gameObject;
global::UnityEngine.Object.Destroy(gameObject);
}
List<ClusterMeshRenderer>[] array3 = this.worldClusterMeshRenderers;
List<ClusterMeshRenderer> list2;
while (list2 != 0)
{
}
throw new NullReferenceException();
}
if (array2[0] != 0)
{
uint num6;
int num7;
num6 -= (uint)num7;
}
}
}
}
// Token: 0x06006EA4 RID: 28324 RVA: 0x001848EC File Offset: 0x00182AEC
[Token(Token = "0x6006EA4")]
[Address(RVA = "0x1F3CD80", Offset = "0x1F3BD80", VA = "0x181F3CD80")]
public void AddClusterMeshRenderers(List<ClusterMeshRenderer> newClusters, ClusterLODManager.RenderLayer layer)
{
this.worldClusterMeshRenderers[(int)layer].AddRange(newClusters);
}
// Token: 0x06006EA5 RID: 28325 RVA: 0x00184914 File Offset: 0x00182B14
[Token(Token = "0x6006EA5")]
[Address(RVA = "0x1F3E160", Offset = "0x1F3D160", VA = "0x181F3E160")]
public void RemoveClusterMeshRenderers(List<ClusterMeshRenderer> newClusters, ClusterLODManager.RenderLayer layer)
{
int num;
do
{
num = 0;
bool flag;
if (flag)
{
object syncRoot = newClusters._syncRoot;
bool flag2;
if (flag2)
{
}
if (num != 0)
{
goto IL_33;
}
if ((ulong)((uint)(-1)) != (ulong)(-1L))
{
}
List<ClusterMeshRenderer> list = this.worldClusterMeshRenderers[(int)layer];
}
}
while (num != 0);
return;
IL_33:
throw new IndexOutOfRangeException();
}
// Token: 0x06006EA6 RID: 28326 RVA: 0x00184978 File Offset: 0x00182B78
[Token(Token = "0x6006EA6")]
[Address(RVA = "0x1F3D0B0", Offset = "0x1F3C0B0", VA = "0x181F3D0B0")]
public List<ClusterMeshRenderer> GenerateMeshRenderers(List<IClusterLODComponent> components, Transform root, ClusterLODManager.RenderLayer layer, bool dynamic)
{
List<ClusterMeshRenderer> list;
int num7;
do
{
list = new List();
ClusterLODConfig clusterLODConfig = this.<Config>k__BackingField;
ClusterLODConfig.LODSettings near = clusterLODConfig.near;
int maxNumVertsInCluster = near.maxNumVertsInCluster;
float maxRadiusOfCluster = near.maxRadiusOfCluster;
int minNumObjectPerCluster = clusterLODConfig.minNumObjectPerCluster;
float distributeVSminimize = clusterLODConfig.distributeVSminimize;
ClusterTreeGenerator clusterTreeGenerator;
clusterTreeGenerator.minNumVerts = clusterTreeGenerator;
clusterTreeGenerator.maxNumVerts = maxNumVertsInCluster;
clusterTreeGenerator.maxRadius = maxRadiusOfCluster;
clusterTreeGenerator.minNumObjectPerCluster = minNumObjectPerCluster;
clusterTreeGenerator.distributeVSminimize = distributeVSminimize;
ClusterNode clusterNode;
clusterNode.parent = (ulong)0L;
clusterNode.components = components;
int num = 0;
int num2 = 0;
int vertexCount = ClusterUtil.GetVertexCount(components, (NPBPPKDLKDN)num2);
clusterNode.vertexCount = vertexCount;
List<ClusterNode> list2 = new List();
ClusterTree clusterTree;
clusterTree.Nodes = list2;
int num3 = 0;
clusterTree.FieldGetter(num3, num, layer);
clusterTree.<Root>k__BackingField = num3;
clusterTree.Nodes.Add(num3);
clusterTreeGenerator.<Tree>k__BackingField = clusterTree;
Stack<ClusterNode> stack = new Stack();
clusterTreeGenerator.unProcessedClusters = stack;
ClusterNode <Root>k__BackingField = clusterTreeGenerator.<Tree>k__BackingField.<Root>k__BackingField;
stack.Push(<Root>k__BackingField);
ClusterNode clusterNode2 = clusterTreeGenerator.unProcessedClusters.Pop();
int num4 = 0;
bool flag = clusterTreeGenerator.SplitCluster(clusterNode2);
Stack<ClusterNode> unProcessedClusters = clusterTreeGenerator.unProcessedClusters;
ClusterLODConfig.LODSettings far = this.<Config>k__BackingField.far;
int minNumVertsInCluster = far.minNumVertsInCluster;
int maxNumVertsInCluster2 = far.maxNumVertsInCluster;
float maxRadiusOfCluster2 = far.maxRadiusOfCluster;
int num5 = 0;
ClusterMeshGenerator clusterMeshGenerator;
clusterMeshGenerator.FieldGetter(num5, num4, layer);
clusterMeshGenerator.minNumVerts = minNumVertsInCluster;
clusterMeshGenerator.maxNumVerts = maxNumVertsInCluster2;
clusterMeshGenerator.maxDiameterSq = maxRadiusOfCluster2;
ClusterTree <Tree>k__BackingField = clusterTreeGenerator.<Tree>k__BackingField;
List<ClusterMesh> list3 = new List();
clusterMeshGenerator.<Meshes>k__BackingField = list3;
ClusterNode <Root>k__BackingField2 = <Tree>k__BackingField.<Root>k__BackingField;
int num6 = clusterMeshGenerator.UpdateVertexCount(<Root>k__BackingField2);
ClusterNode <Root>k__BackingField3 = <Tree>k__BackingField.<Root>k__BackingField;
clusterMeshGenerator.CreateClusterMeshInstances(<Root>k__BackingField3);
List<ClusterMesh> <Meshes>k__BackingField = clusterMeshGenerator.<Meshes>k__BackingField;
num7 = 0;
bool flag2;
if (flag2)
{
ClusterMeshRenderer clusterMeshRenderer = this.clusterMeshRendererPrefab;
MeshFilter meshFilter = this.clusterPrefab;
ClusterMeshRenderer clusterMeshRenderer2;
MeshRenderer component = clusterMeshRenderer2.GetComponent<MeshRenderer>();
Material meshMaterial = ClusterLODManager._instance.GetMeshMaterial();
component.SetMaterial(meshMaterial);
clusterMeshRenderer2.<Dynamic>k__BackingField = meshMaterial != null;
clusterMeshRenderer2.Init(num7, meshFilter);
clusterMeshRenderer2.GenerateLOD();
bool flag3;
if (flag3)
{
}
if (num7 != 0)
{
goto IL_221;
}
while ((ulong)((uint)(-1)) == (ulong)(-1L))
{
}
}
}
while (num7 != 0);
return list;
IL_221:
throw new NullReferenceException();
}
// Token: 0x06006EA7 RID: 28327 RVA: 0x00184BCC File Offset: 0x00182DCC
[Token(Token = "0x6006EA7")]
[Address(RVA = "0x1F3D9F0", Offset = "0x1F3C9F0", VA = "0x181F3D9F0")]
public ClusterLODManager.RenderLayer GetRenderLayer(Vector3 extents)
{
float sqrMagnitude = extents.sqrMagnitude;
float maxRadiusForDetailObjects = this.<Config>k__BackingField.maxRadiusForDetailObjects;
throw new NullReferenceException();
}
// Token: 0x06006EA8 RID: 28328 RVA: 0x00184BF4 File Offset: 0x00182DF4
[Token(Token = "0x6006EA8")]
[Address(RVA = "0x1F3DFE0", Offset = "0x1F3CFE0", VA = "0x181F3DFE0")]
public void RegisterShapeContainer(ShapeContainer newShapeContainer)
{
this.newShapeContainers.Add(newShapeContainer);
}
// Token: 0x06006EA9 RID: 28329 RVA: 0x00184C14 File Offset: 0x00182E14
[Token(Token = "0x6006EA9")]
[Address(RVA = "0x1F3EDA0", Offset = "0x1F3DDA0", VA = "0x181F3EDA0")]
public bool TryDeRegisterShapeContainer(ShapeContainer newShapeContainer)
{
return this.newShapeContainers.Remove(newShapeContainer);
}
// Token: 0x06006EAA RID: 28330 RVA: 0x00184C34 File Offset: 0x00182E34
[Token(Token = "0x6006EAA")]
[Address(RVA = "0x1F3DF80", Offset = "0x1F3CF80", VA = "0x181F3DF80")]
public void RegisterComponent(IClusterLODComponent newComponent)
{
this.newAddedStaticComponents.Add(newComponent);
}
// Token: 0x06006EAB RID: 28331 RVA: 0x00184C54 File Offset: 0x00182E54
[Token(Token = "0x6006EAB")]
[Address(RVA = "0x1F3CCF0", Offset = "0x1F3BCF0", VA = "0x181F3CCF0")]
private void AddClusterMeshClusterInfo(ClusterMesh.ClusterInfo info, int layer)
{
this.clusterInfos[layer].Add(info);
}
// Token: 0x06006EAC RID: 28332 RVA: 0x00184C7C File Offset: 0x00182E7C
[Token(Token = "0x6006EAC")]
[Address(RVA = "0x1F3E040", Offset = "0x1F3D040", VA = "0x181F3E040")]
private void RemoveClusterMeshClusterInfo(ClusterMesh.ClusterInfo info, int layerIdx)
{
bool flag = this.clusterInfos[layerIdx].Remove(info);
}
// Token: 0x06006EAD RID: 28333 RVA: 0x00184CA4 File Offset: 0x00182EA4
[Token(Token = "0x6006EAD")]
[Address(RVA = "0x1F3E0D0", Offset = "0x1F3D0D0", VA = "0x181F3E0D0")]
public void RemoveClusterMeshClusterInfo(ClusterMesh.ClusterInfo info)
{
int num = 0;
bool flag = this.clusterInfos[num].Remove(info);
num++;
}
// Token: 0x06006EAE RID: 28334 RVA: 0x00184CD0 File Offset: 0x00182ED0
[Token(Token = "0x6006EAE")]
[Address(RVA = "0x1F3E850", Offset = "0x1F3D850", VA = "0x181F3E850")]
private void SortClusterInfos(Vector3 pos, ClusterLODManager.RenderLayer layer)
{
List<ClusterMesh.ClusterInfo> list = this.clusterInfos[(int)layer];
Comparison<ClusterMesh.ClusterInfo> <>9__55_ = ClusterLODManager.<>c.<>9__55_0;
if (<>9__55_ == 0)
{
ClusterLODManager.<>c.<>9__55_0 = delegate(ClusterMesh.ClusterInfo a, ClusterMesh.ClusterInfo b)
{
int num;
return num;
};
}
list.Sort(<>9__55_);
}
// Token: 0x06006EAF RID: 28335 RVA: 0x00184D18 File Offset: 0x00182F18
[Token(Token = "0x6006EAF")]
[Address(RVA = "0x1F3EE00", Offset = "0x1F3DE00", VA = "0x181F3EE00")]
private void UpdateClusterDistances(Vector3 pos, ClusterLODManager.RenderLayer layer)
{
int num;
do
{
num = 0;
List<ClusterMeshRenderer> list = this.worldClusterMeshRenderers[(int)layer];
bool flag;
if (flag)
{
bool flag2;
while (!flag2)
{
}
}
}
while (num != 0);
}
// Token: 0x06006EB0 RID: 28336 RVA: 0x00184D54 File Offset: 0x00182F54
[Token(Token = "0x6006EB0")]
[Address(RVA = "0x1F3CE00", Offset = "0x1F3BE00", VA = "0x181F3CE00")]
private IEnumerator AssignLODs()
{
/*
An exception occurred when decompiling this method (06006EB0)
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Collections.IEnumerator ClusterLOD.ClusterLODManager::AssignLODs()
---> System.Exception: Basic block has to end with unconditional control flow.
{
Block_0:
call:void('<AssignLODs>d__57'::System.IDisposable.Dispose, ldloc:'<AssignLODs>d__57'(var_0))
stfld:int32('<AssignLODs>d__57'::<>1__state, ldloc:'<AssignLODs>d__57'(var_0), conv.u8:uint64[exp:int32](ldc.i8:int64[exp:uint64](0)))
stfld:ClusterLODManager('<AssignLODs>d__57'::<>4__this, ldloc:'<AssignLODs>d__57'(var_0), ldloc:ClusterLODManager(this))
}
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1852
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 355
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
--- End of inner exception stack trace ---
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1663
*/;
}
// Token: 0x06006EB1 RID: 28337 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006EB1")]
[Address(RVA = "0x1F3F230", Offset = "0x1F3E230", VA = "0x181F3F230")]
private int UpdateLodRequest(int index, int budget, List<ClusterMesh.ClusterInfo> clusters, byte lod, ref int numVertsToSpare, float minDist = 0f)
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x06006EB2 RID: 28338 RVA: 0x00184D78 File Offset: 0x00182F78
[Token(Token = "0x6006EB2")]
[Address(RVA = "0x1F3E3F0", Offset = "0x1F3D3F0", VA = "0x181F3E3F0")]
public void Remove(IClusterLODComponent component)
{
int num;
do
{
num = 0;
if (num >= 3)
{
return;
}
bool flag;
if (flag)
{
bool flag2;
while (!flag2)
{
}
bool flag3;
while (!flag3)
{
}
bool flag4;
while (!flag4)
{
}
}
}
while (num != 0);
if ((ulong)((uint)(-1)) != (ulong)(-1L))
{
}
num++;
}
// Token: 0x06006EB3 RID: 28339 RVA: 0x00184DD0 File Offset: 0x00182FD0
[Token(Token = "0x6006EB3")]
[Address(RVA = "0x1F3E810", Offset = "0x1F3D810", VA = "0x181F3E810")]
public bool ShouldUpdateDetailMeshes()
{
ClusterLODConfig.LODSettings near = this.<Config>k__BackingField.near;
float maxSubDivideEdgeSize = near.maxSubDivideEdgeSize;
int num = 0;
if (maxSubDivideEdgeSize <= (float)num)
{
}
float maxSubDivideDistance = near.maxSubDivideDistance;
throw new NullReferenceException();
}
// Token: 0x06006EB4 RID: 28340 RVA: 0x00184E08 File Offset: 0x00183008
[Token(Token = "0x6006EB4")]
[Address(RVA = "0x1F3DF70", Offset = "0x1F3CF70", VA = "0x181F3DF70")]
public void RegisterAdditionalVertsChange(int change)
{
}
// Token: 0x06006EB5 RID: 28341 RVA: 0x00184E18 File Offset: 0x00183018
[Token(Token = "0x6006EB5")]
[Address(RVA = "0x1F3D950", Offset = "0x1F3C950", VA = "0x181F3D950")]
public Material GetMeshMaterial()
{
Material material = this.sharedMeshMaterial;
int num = 0;
if (material == num)
{
Material material2 = EOKPFJPCGMK.OAEGHKNCLCN(ACBDPBHGKJL.Box);
this.sharedMeshMaterial = material2;
}
return this.sharedMeshMaterial;
}
// Token: 0x06006EB6 RID: 28342 RVA: 0x00184E4C File Offset: 0x0018304C
[Token(Token = "0x6006EB6")]
[Address(RVA = "0x1F3D910", Offset = "0x1F3C910", VA = "0x181F3D910")]
public int GetMaxNumActiveLOD0Verts()
{
return this.<Config>k__BackingField.maxDynamicNearVerts;
}
// Token: 0x06006EB7 RID: 28343 RVA: 0x00184E6C File Offset: 0x0018306C
[Token(Token = "0x6006EB7")]
[Address(RVA = "0x1F3F370", Offset = "0x1F3E370", VA = "0x181F3F370")]
public ClusterLODManager()
{
ClusterMeshAssetCache clusterMeshAssetCache = new ClusterMeshAssetCache();
Queue<ClusterMesh.ClusterInfo> queue = new Queue();
clusterMeshAssetCache.createQueue = queue;
CreateMeshFromClusterJob createMeshFromClusterJob = new CreateMeshFromClusterJob();
PCIKHFEIHGO pcikhfeihgo = new PCIKHFEIHGO();
createMeshFromClusterJob.sharedResultMesh = pcikhfeihgo;
OCCMLFOBCEM occmlfobcem = new OCCMLFOBCEM();
createMeshFromClusterJob.optimizationData = occmlfobcem;
clusterMeshAssetCache.createMeshFromClusterJob = createMeshFromClusterJob;
List<ClusterMesh.ClusterInfo> list = new List();
clusterMeshAssetCache.activeClusters = list;
this.ClusterMeshAssetCache = clusterMeshAssetCache;
List<IClusterLODComponent> list2 = new List();
this.newAddedStaticComponents = list2;
List<IClusterLODComponent> list3 = new List();
this.newAddedWorldComponents = list3;
List<IClusterLODComponent> list4 = new List();
this.newAddedDetailComponents = list4;
List<ClusterMeshRenderer>[] array = new List<ClusterMeshRenderer>[3];
this.worldClusterMeshRenderers = array;
List<ClusterMesh.ClusterInfo>[] array2 = new List<ClusterMesh.ClusterInfo>[3];
this.clusterInfos = array2;
List<ShapeContainer> list5 = new List();
this.newShapeContainers = list5;
base..ctor();
}
// Token: 0x06006EB8 RID: 28344 RVA: 0x0000220F File Offset: 0x0000040F
// Note: this type is marked as 'beforefieldinit'.
[Token(Token = "0x6006EB8")]
[Address(RVA = "0x4242D0", Offset = "0x4232D0", VA = "0x1804242D0")]
static ClusterLODManager()
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x0400490B RID: 18699
[Token(Token = "0x400490B")]
public const int NUM_RENDER_LAYERS = 3;
// Token: 0x0400490D RID: 18701
[FieldOffset(Offset = "0x20")]
[Token(Token = "0x400490D")]
public ClusterMeshRenderer clusterMeshRendererPrefab;
// Token: 0x0400490E RID: 18702
[FieldOffset(Offset = "0x28")]
[Token(Token = "0x400490E")]
public MeshFilter clusterPrefab;
// Token: 0x0400490F RID: 18703
[FieldOffset(Offset = "0x30")]
[Token(Token = "0x400490F")]
private GameObject detailRoot;
// Token: 0x04004910 RID: 18704
[FieldOffset(Offset = "0x38")]
[Token(Token = "0x4004910")]
private GameObject worldRoot;
// Token: 0x04004911 RID: 18705
[FieldOffset(Offset = "0x40")]
[Token(Token = "0x4004911")]
public ClusterMeshAssetCache ClusterMeshAssetCache;
// Token: 0x04004912 RID: 18706
[FieldOffset(Offset = "0x48")]
[Token(Token = "0x4004912")]
public List<IClusterLODComponent> newAddedStaticComponents;
// Token: 0x04004913 RID: 18707
[FieldOffset(Offset = "0x50")]
[Token(Token = "0x4004913")]
public List<IClusterLODComponent> newAddedWorldComponents;
// Token: 0x04004914 RID: 18708
[FieldOffset(Offset = "0x58")]
[Token(Token = "0x4004914")]
public List<IClusterLODComponent> newAddedDetailComponents;
// Token: 0x04004915 RID: 18709
[FieldOffset(Offset = "0x60")]
[Token(Token = "0x4004915")]
private int clusterIndex;
// Token: 0x04004917 RID: 18711
[FieldOffset(Offset = "0x70")]
[Token(Token = "0x4004917")]
public ClusterLODManager.State CurrentState;
// Token: 0x04004918 RID: 18712
[FieldOffset(Offset = "0x78")]
[Token(Token = "0x4004918")]
public List<ClusterMeshRenderer>[] worldClusterMeshRenderers;
// Token: 0x04004919 RID: 18713
[FieldOffset(Offset = "0x80")]
[Token(Token = "0x4004919")]
private List<ClusterMesh.ClusterInfo>[] clusterInfos;
// Token: 0x0400491A RID: 18714
[FieldOffset(Offset = "0x88")]
[Token(Token = "0x400491A")]
private Coroutine createWorldCoroutine;
// Token: 0x0400491B RID: 18715
[FieldOffset(Offset = "0x90")]
[Token(Token = "0x400491B")]
private Coroutine assignLODsCoroutine;
// Token: 0x0400491C RID: 18716
[FieldOffset(Offset = "0x98")]
[Token(Token = "0x400491C")]
public int estimatedNumWorldLODVerts;
// Token: 0x0400491D RID: 18717
[FieldOffset(Offset = "0x9C")]
[Token(Token = "0x400491D")]
public int numWorldLODVerts;
// Token: 0x0400491E RID: 18718
[Token(Token = "0x400491E")]
private static ClusterLODManager _instance;
// Token: 0x0400491F RID: 18719
[FieldOffset(Offset = "0xA0")]
[Token(Token = "0x400491F")]
private List<ShapeContainer> newShapeContainers;
// Token: 0x04004920 RID: 18720
[FieldOffset(Offset = "0xA8")]
[Token(Token = "0x4004920")]
public int numAdditionalVerts;
// Token: 0x04004921 RID: 18721
[FieldOffset(Offset = "0xB0")]
[Token(Token = "0x4004921")]
private Material sharedMeshMaterial;
// Token: 0x02001343 RID: 4931
[Token(Token = "0x2001343")]
public enum RenderLayer
{
// Token: 0x04004923 RID: 18723
[Token(Token = "0x4004923")]
World,
// Token: 0x04004924 RID: 18724
[Token(Token = "0x4004924")]
Detail,
// Token: 0x04004925 RID: 18725
[Token(Token = "0x4004925")]
Dynamic,
// Token: 0x04004926 RID: 18726
[Token(Token = "0x4004926")]
NumLayers
}
// Token: 0x02001344 RID: 4932
[Token(Token = "0x2001344")]
public enum State
{
// Token: 0x04004928 RID: 18728
[Token(Token = "0x4004928")]
Waiting,
// Token: 0x04004929 RID: 18729
[Token(Token = "0x4004929")]
Collecting,
// Token: 0x0400492A RID: 18730
[Token(Token = "0x400492A")]
Generating,
// Token: 0x0400492B RID: 18731
[Token(Token = "0x400492B")]
Running
}
}
}
@@ -0,0 +1,18 @@
using System;
using Cpp2IlInjected;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x02001348 RID: 4936
[Token(Token = "0x2001348")]
public class ClusterLODManagerEditorDebug : MonoBehaviour
{
// Token: 0x06006ECB RID: 28363 RVA: 0x001855A0 File Offset: 0x001837A0
[Token(Token = "0x6006ECB")]
[Address(RVA = "0x428AD0", Offset = "0x427AD0", VA = "0x180428AD0")]
public ClusterLODManagerEditorDebug()
{
}
}
}
@@ -0,0 +1,121 @@
using System;
using Cpp2IlInjected;
using Unity.Burst;
using Unity.Collections;
using Unity.Jobs;
using Unity.Mathematics;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x02001349 RID: 4937
[Token(Token = "0x2001349")]
[BurstCompile]
public struct ClusterLODMergeVertsJob : IJob
{
// Token: 0x06006ECC RID: 28364 RVA: 0x001855B4 File Offset: 0x001837B4
[Token(Token = "0x6006ECC")]
[Address(RVA = "0x1F3FF80", Offset = "0x1F3EF80", VA = "0x181F3FF80")]
public ClusterLODMergeVertsJob(PCIKHFEIHGO mesh, NativeList<float3> origVerts, NativeMultiHashMap<int, int> vertexMap, NativeArray<int> indexRemap, Vector3 centerPos, float resolution)
{
NativeList<float3> ddpnlakckdp = mesh.DDPNLAKCKDP;
this.verts = ddpnlakckdp;
NativeArray<float3> cdpiecocian = mesh.CDPIECOCIAN;
this.normals = cdpiecocian;
NativeArray<float4> nmfapcbmggf = mesh.NMFAPCBMGGF;
this.tangents = nmfapcbmggf;
NativeArray<float2> maeaklfbpmo = mesh.MAEAKLFBPMO;
this.UVs = maeaklfbpmo;
NativeArray<float4> pjnfmocjcal = mesh.PJNFMOCJCAL;
this.materialIndices = pjnfmocjcal;
NativeList<int> elflbeckfef = mesh.ELFLBECKFEF;
this.indices = elflbeckfef;
float3 @float;
float z = @float.z;
this.resolution = (float)0;
this.centerPos.z = z;
}
// Token: 0x06006ECD RID: 28365 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006ECD")]
[Address(RVA = "0x1F3FC90", Offset = "0x1F3EC90", VA = "0x181F3FC90")]
private int GetKey(float3 pos)
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x06006ECE RID: 28366 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006ECE")]
[Address(RVA = "0x1F3FCF0", Offset = "0x1F3ECF0", VA = "0x181F3FCF0")]
private int GetMatch(int i, int key)
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x06006ECF RID: 28367 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006ECF")]
[Address(RVA = "0x1F3F8A0", Offset = "0x1F3E8A0", VA = "0x181F3F8A0", Slot = "4")]
public void Execute()
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x04004938 RID: 18744
[FieldOffset(Offset = "0x0")]
[Token(Token = "0x4004938")]
private NativeList<float3> verts;
// Token: 0x04004939 RID: 18745
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x4004939")]
private NativeArray<float3> normals;
// Token: 0x0400493A RID: 18746
[FieldOffset(Offset = "0x20")]
[Token(Token = "0x400493A")]
private NativeArray<float4> tangents;
// Token: 0x0400493B RID: 18747
[FieldOffset(Offset = "0x30")]
[Token(Token = "0x400493B")]
private NativeArray<float2> UVs;
// Token: 0x0400493C RID: 18748
[FieldOffset(Offset = "0x40")]
[Token(Token = "0x400493C")]
private NativeArray<float4> materialIndices;
// Token: 0x0400493D RID: 18749
[FieldOffset(Offset = "0x50")]
[Token(Token = "0x400493D")]
private NativeList<int> indices;
// Token: 0x0400493E RID: 18750
[FieldOffset(Offset = "0x60")]
[Token(Token = "0x400493E")]
[ReadOnly]
private NativeList<float3> origVerts;
// Token: 0x0400493F RID: 18751
[FieldOffset(Offset = "0x70")]
[Token(Token = "0x400493F")]
[ReadOnly]
private float3 centerPos;
// Token: 0x04004940 RID: 18752
[FieldOffset(Offset = "0x7C")]
[Token(Token = "0x4004940")]
[ReadOnly]
private float resolution;
// Token: 0x04004941 RID: 18753
[FieldOffset(Offset = "0x80")]
[Token(Token = "0x4004941")]
private NativeMultiHashMap<int, int> vertexMap;
// Token: 0x04004942 RID: 18754
[FieldOffset(Offset = "0x90")]
[Token(Token = "0x4004942")]
private NativeArray<int> indexRemap;
}
}
+502
View File
@@ -0,0 +1,502 @@
using System;
using System.Collections.Generic;
using Cpp2IlInjected;
using Unity.Collections;
using Unity.Jobs;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x0200134D RID: 4941
[Token(Token = "0x200134D")]
public class ClusterMesh : IDisposable
{
// Token: 0x170011D8 RID: 4568
// (get) Token: 0x06006EDF RID: 28383 RVA: 0x00185934 File Offset: 0x00183B34
// (set) Token: 0x06006EE0 RID: 28384 RVA: 0x00185948 File Offset: 0x00183B48
[Token(Token = "0x170011D8")]
public Mesh Mesh
{
[Token(Token = "0x6006EDF")]
[Address(RVA = "0x4157D0", Offset = "0x4147D0", VA = "0x1804157D0")]
get;
[Token(Token = "0x6006EE0")]
[Address(RVA = "0x415820", Offset = "0x414820", VA = "0x180415820")]
private set;
}
// Token: 0x170011D9 RID: 4569
// (get) Token: 0x06006EE1 RID: 28385 RVA: 0x0018595C File Offset: 0x00183B5C
// (set) Token: 0x06006EE2 RID: 28386 RVA: 0x00185970 File Offset: 0x00183B70
[Token(Token = "0x170011D9")]
public bool Dirty
{
[Token(Token = "0x6006EE1")]
[Address(RVA = "0x41CF00", Offset = "0x41BF00", VA = "0x18041CF00")]
get;
[Token(Token = "0x6006EE2")]
[Address(RVA = "0x41D000", Offset = "0x41C000", VA = "0x18041D000")]
private set;
}
// Token: 0x170011DA RID: 4570
// (get) Token: 0x06006EE3 RID: 28387 RVA: 0x00185984 File Offset: 0x00183B84
[Token(Token = "0x170011DA")]
public int MaxNumLOD1Indices
{
[Token(Token = "0x6006EE3")]
[Address(RVA = "0x1F44BA0", Offset = "0x1F43BA0", VA = "0x181F44BA0")]
get
{
ClusterMeshUpdateJobData clusterMeshUpdateJobData = this.updateData;
int num;
return num;
}
}
// Token: 0x06006EE4 RID: 28388 RVA: 0x001859A0 File Offset: 0x00183BA0
[Token(Token = "0x6006EE4")]
[Address(RVA = "0x1F43A50", Offset = "0x1F42A50", VA = "0x181F43A50", Slot = "4")]
public void Dispose()
{
int num;
do
{
num = 0;
OMCHJHPFBDN.KBFLHNONOHF(this.<Mesh>k__BackingField);
this.<Mesh>k__BackingField = num;
List<ClusterMesh.ClusterInfo> clusters = this.Clusters;
bool flag;
if (flag)
{
}
}
while (num != 0);
this.Clusters.Clear();
this.updateData.Dispose();
}
// Token: 0x06006EE5 RID: 28389 RVA: 0x001859F4 File Offset: 0x00183BF4
[Token(Token = "0x6006EE5")]
[Address(RVA = "0x1F44410", Offset = "0x1F43410", VA = "0x181F44410")]
public int GetLod(int clusterIdx)
{
NativeArray<int> componentLod = this.updateData.componentLod;
throw new NullReferenceException();
}
// Token: 0x06006EE6 RID: 28390 RVA: 0x00185A14 File Offset: 0x00183C14
[Token(Token = "0x6006EE6")]
[Address(RVA = "0x1F43900", Offset = "0x1F42900", VA = "0x181F43900")]
public void AddClusterNode(ClusterNode ownerNode)
{
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 = ownerNode.components;
clusterInfo.components = components;
Bounds bounds = ownerNode.bounds;
clusterInfo.bounds = bounds;
clusterInfo.requestedLod = (byte)((ulong)1L);
this.Clusters.Add(clusterInfo);
int num = this.componentCount;
int num2 = clusterInfo.components._size;
num2 += num;
this.componentCount = num2;
}
// Token: 0x06006EE7 RID: 28391 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006EE7")]
[Address(RVA = "0x1F43D40", Offset = "0x1F42D40", VA = "0x181F43D40")]
public void GenerateLODMesh(Transform rootTransform, bool dynamicCluster)
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x06006EE8 RID: 28392 RVA: 0x00185AB0 File Offset: 0x00183CB0
[Token(Token = "0x6006EE8")]
[Address(RVA = "0x1F43B90", Offset = "0x1F42B90", VA = "0x181F43B90")]
public bool FinalizeUpdate(bool setOrigIndices)
{
ClusterMeshUpdateJobData clusterMeshUpdateJobData = this.updateData;
if (!clusterMeshUpdateJobData.<IsActive>k__BackingField)
{
}
clusterMeshUpdateJobData.<IsActive>k__BackingField = false;
Mesh mesh = this.<Mesh>k__BackingField;
int num = 0;
if (!(mesh == num))
{
this.<Mesh>k__BackingField.subMeshCount = 2;
NativeList<int> indices = clusterMeshUpdateJobData.indices;
Mesh mesh2 = this.<Mesh>k__BackingField;
if (setOrigIndices)
{
NativeList<int> origIndices = clusterMeshUpdateJobData.origIndices;
Mesh mesh3 = this.<Mesh>k__BackingField;
}
}
throw new NullReferenceException();
}
// Token: 0x06006EE9 RID: 28393 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006EE9")]
[Address(RVA = "0x1F446C0", Offset = "0x1F436C0", VA = "0x181F446C0")]
public void UpdateMesh(Transform root, bool dynamicCluster)
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x06006EEA RID: 28394 RVA: 0x00185B20 File Offset: 0x00183D20
[Token(Token = "0x6006EEA")]
[Address(RVA = "0x1F44440", Offset = "0x1F43440", VA = "0x181F44440")]
public bool Remove(IClusterLODComponent component)
{
int num;
do
{
num = 0;
List<ClusterMesh.ClusterInfo> clusters = this.Clusters;
bool flag;
if (flag)
{
int num2;
while (num2 == -1)
{
}
this.updateData.<IsActive>k__BackingField = false;
this.<Dirty>k__BackingField = true;
int num3 = this.componentCount;
this.componentCount = num3;
}
}
while (num != 0);
if (num != -1)
{
}
throw new NullReferenceException();
}
// Token: 0x06006EEB RID: 28395 RVA: 0x00185BA8 File Offset: 0x00183DA8
[Token(Token = "0x6006EEB")]
[Address(RVA = "0x1F44B20", Offset = "0x1F43B20", VA = "0x181F44B20")]
public ClusterMesh()
{
List<ClusterMesh.ClusterInfo> list = new List();
this.Clusters = list;
ClusterMeshUpdateJobData clusterMeshUpdateJobData = new ClusterMeshUpdateJobData();
this.updateData = clusterMeshUpdateJobData;
base..ctor();
}
// Token: 0x0400495C RID: 18780
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x400495C")]
public Bounds bounds;
// Token: 0x0400495E RID: 18782
[FieldOffset(Offset = "0x30")]
[Token(Token = "0x400495E")]
public List<ClusterMesh.ClusterInfo> Clusters;
// Token: 0x0400495F RID: 18783
[FieldOffset(Offset = "0x38")]
[Token(Token = "0x400495F")]
public ClusterMeshUpdateJobData updateData;
// Token: 0x04004961 RID: 18785
[FieldOffset(Offset = "0x48")]
[Token(Token = "0x4004961")]
public ClusterMeshRenderer owner;
// Token: 0x04004962 RID: 18786
[FieldOffset(Offset = "0x50")]
[Token(Token = "0x4004962")]
private int componentCount;
// Token: 0x0200134E RID: 4942
[Token(Token = "0x200134E")]
public class ClusterInfo : IDisposable
{
// Token: 0x06006EEC RID: 28396 RVA: 0x00185BD8 File Offset: 0x00183DD8
[Token(Token = "0x6006EEC")]
[Address(RVA = "0x1F3C820", Offset = "0x1F3B820", VA = "0x181F3C820")]
public void GetRequiredCounts(NPBPPKDLKDN lod, out int vertexCount, out int indexCount)
{
int num;
do
{
num = 0;
vertexCount.m_value = num;
indexCount.m_value = num;
List<IClusterLODComponent> list = this.components;
bool flag;
if (flag)
{
num += num;
num++;
vertexCount.m_value = (flag ? 1 : 0);
uint num2;
if (num < (int)num2)
{
num += num;
num++;
}
indexCount.m_value = num;
int num3 = (int)(lod + (int)lod);
num++;
num += 19;
num3 += num3;
num += 2;
num += 19;
}
}
while (num != 0);
}
// Token: 0x06006EED RID: 28397 RVA: 0x00185C4C File Offset: 0x00183E4C
[Token(Token = "0x6006EED")]
[Address(RVA = "0x1F3BF70", Offset = "0x1F3AF70", VA = "0x181F3BF70")]
public JobHandle AppendToMesh(NPBPPKDLKDN lod, PCIKHFEIHGO destMesh, int startVertex, int startIndex, Transform rootTransform, OCCMLFOBCEM optimizationData, NativeList<CJJFNIHNLBD> occlusion)
{
int num;
do
{
num = 0;
bool flag;
if (flag)
{
num += num;
num++;
uint num2;
if (num < (int)num2)
{
num += num;
num++;
}
uint num3;
if (num < (int)num3)
{
num += num;
num++;
}
num += num;
num++;
bool flag2;
if (flag2)
{
}
int num4 = 0;
JobHandle.ScheduleBatchedJobs();
num4 += num4;
num4 += num4;
num4 += num4;
num4 += num4;
}
}
while (num != 0);
throw new NullReferenceException();
}
// Token: 0x06006EEE RID: 28398 RVA: 0x00185CCC File Offset: 0x00183ECC
[Token(Token = "0x6006EEE")]
[Address(RVA = "0x1F3BC70", Offset = "0x1F3AC70", VA = "0x181F3BC70")]
public void AppendOcclusionData(NativeList<CJJFNIHNLBD> occlusion, Transform rootTransform)
{
int num;
do
{
num = 0;
List<IClusterLODComponent> list = this.components;
bool flag;
if (flag)
{
num += num;
num++;
int num2 = 0;
bool flag2;
while (!flag2)
{
}
occlusion.Add(num2);
num2 += num2;
}
}
while (num != 0);
}
// Token: 0x170011DB RID: 4571
// (get) Token: 0x06006EEF RID: 28399 RVA: 0x00185D10 File Offset: 0x00183F10
[Token(Token = "0x170011DB")]
public int ComponentCount
{
[Token(Token = "0x6006EEF")]
[Address(RVA = "0x1F3CC20", Offset = "0x1F3BC20", VA = "0x181F3CC20")]
get
{
return this.components._size;
}
}
// Token: 0x170011DC RID: 4572
// (get) Token: 0x06006EF0 RID: 28400 RVA: 0x00185D30 File Offset: 0x00183F30
// (set) Token: 0x06006EF1 RID: 28401 RVA: 0x00185D44 File Offset: 0x00183F44
[Token(Token = "0x170011DC")]
public Mesh RequestedMesh
{
[Token(Token = "0x6006EF0")]
[Address(RVA = "0x4157E0", Offset = "0x4147E0", VA = "0x1804157E0")]
get;
[Token(Token = "0x6006EF1")]
[Address(RVA = "0x415830", Offset = "0x414830", VA = "0x180415830")]
private set;
}
// Token: 0x170011DD RID: 4573
// (get) Token: 0x06006EF2 RID: 28402 RVA: 0x00185D58 File Offset: 0x00183F58
// (set) Token: 0x06006EF3 RID: 28403 RVA: 0x00185D6C File Offset: 0x00183F6C
[Token(Token = "0x170011DD")]
public Mesh ActiveMesh
{
[Token(Token = "0x6006EF2")]
[Address(RVA = "0x41CEF0", Offset = "0x41BEF0", VA = "0x18041CEF0")]
get;
[Token(Token = "0x6006EF3")]
[Address(RVA = "0x41CFF0", Offset = "0x41BFF0", VA = "0x18041CFF0")]
set;
}
// Token: 0x06006EF4 RID: 28404 RVA: 0x00185D80 File Offset: 0x00183F80
[Token(Token = "0x6006EF4")]
[Address(RVA = "0x1F3CA50", Offset = "0x1F3BA50", VA = "0x181F3CA50")]
public void RequestNewMesh(Mesh mesh)
{
Mesh mesh2 = this.<RequestedMesh>k__BackingField;
Mesh mesh3 = this.<ActiveMesh>k__BackingField;
if (mesh2 != mesh3)
{
OMCHJHPFBDN.KBFLHNONOHF(this.<RequestedMesh>k__BackingField);
}
this.<RequestedMesh>k__BackingField = mesh;
}
// Token: 0x06006EF5 RID: 28405 RVA: 0x00185DB8 File Offset: 0x00183FB8
[Token(Token = "0x6006EF5")]
[Address(RVA = "0x1F3CAF0", Offset = "0x1F3BAF0", VA = "0x181F3CAF0")]
public void RequestRemoveMesh()
{
Mesh mesh = this.<RequestedMesh>k__BackingField;
Mesh mesh2 = this.<ActiveMesh>k__BackingField;
if (mesh != mesh2)
{
OMCHJHPFBDN.KBFLHNONOHF(this.<RequestedMesh>k__BackingField);
}
this.<RequestedMesh>k__BackingField = (ulong)0L;
}
// Token: 0x06006EF6 RID: 28406 RVA: 0x00185DF4 File Offset: 0x00183FF4
[Token(Token = "0x6006EF6")]
[Address(RVA = "0x1F3C610", Offset = "0x1F3B610", VA = "0x181F3C610", Slot = "4")]
public void Dispose()
{
ClusterLODManager instance = ClusterLODManager._instance;
int num = 0;
if (instance != num)
{
ClusterLODManager._instance.ClusterMeshAssetCache.Remove(this);
}
Mesh mesh = this.<RequestedMesh>k__BackingField;
Mesh mesh2 = this.<ActiveMesh>k__BackingField;
if (mesh != mesh2)
{
OMCHJHPFBDN.KBFLHNONOHF(this.<RequestedMesh>k__BackingField);
}
OMCHJHPFBDN.KBFLHNONOHF(this.<ActiveMesh>k__BackingField);
PCIKHFEIHGO pcikhfeihgo = this.nativeMesh;
int num2 = 0;
this.<RequestedMesh>k__BackingField = num2;
this.<ActiveMesh>k__BackingField = num2;
pcikhfeihgo.Dispose();
this.subdivideMeshData.Dispose();
}
// Token: 0x06006EF7 RID: 28407 RVA: 0x00185E84 File Offset: 0x00184084
[Token(Token = "0x6006EF7")]
[Address(RVA = "0x1F3CB80", Offset = "0x1F3BB80", VA = "0x181F3CB80")]
public ClusterInfo()
{
List<IClusterLODComponent> list = new List();
this.components = list;
PCIKHFEIHGO pcikhfeihgo = new PCIKHFEIHGO();
this.nativeMesh = pcikhfeihgo;
SubdivideMeshData subdivideMeshData = new SubdivideMeshData();
this.subdivideMeshData = subdivideMeshData;
base..ctor();
}
// Token: 0x04004963 RID: 18787
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x4004963")]
public Bounds bounds;
// Token: 0x04004964 RID: 18788
[FieldOffset(Offset = "0x28")]
[Token(Token = "0x4004964")]
public List<IClusterLODComponent> components;
// Token: 0x04004967 RID: 18791
[FieldOffset(Offset = "0x40")]
[Token(Token = "0x4004967")]
public Vector3 closestPos;
// Token: 0x04004968 RID: 18792
[FieldOffset(Offset = "0x4C")]
[Token(Token = "0x4004968")]
public float closestDist;
// Token: 0x04004969 RID: 18793
[FieldOffset(Offset = "0x50")]
[Token(Token = "0x4004969")]
public byte requestedLod;
// Token: 0x0400496A RID: 18794
[FieldOffset(Offset = "0x54")]
[Token(Token = "0x400496A")]
public Vector3 prevUpdatedEyePos;
// Token: 0x0400496B RID: 18795
[FieldOffset(Offset = "0x60")]
[Token(Token = "0x400496B")]
public int numLOD0Verts;
// Token: 0x0400496C RID: 18796
[FieldOffset(Offset = "0x64")]
[Token(Token = "0x400496C")]
public int numLOD1Verts;
// Token: 0x0400496D RID: 18797
[FieldOffset(Offset = "0x68")]
[Token(Token = "0x400496D")]
public int numAdditionalVerts;
// Token: 0x0400496E RID: 18798
[FieldOffset(Offset = "0x70")]
[Token(Token = "0x400496E")]
public PCIKHFEIHGO nativeMesh;
// Token: 0x0400496F RID: 18799
[FieldOffset(Offset = "0x78")]
[Token(Token = "0x400496F")]
public SubdivideMeshData subdivideMeshData;
// Token: 0x04004970 RID: 18800
[FieldOffset(Offset = "0x80")]
[Token(Token = "0x4004970")]
public Transform root;
}
}
}
@@ -0,0 +1,236 @@
using System;
using System.Collections.Generic;
using Cpp2IlInjected;
using Unity.Jobs;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x0200134F RID: 4943
[Token(Token = "0x200134F")]
public class ClusterMeshAssetCache : IDisposable
{
// Token: 0x06006EF8 RID: 28408 RVA: 0x00185EC0 File Offset: 0x001840C0
[Token(Token = "0x6006EF8")]
[Address(RVA = "0x1F401C0", Offset = "0x1F3F1C0", VA = "0x181F401C0", Slot = "4")]
public void Dispose()
{
CreateMeshFromClusterJob createMeshFromClusterJob = this.createMeshFromClusterJob;
JobHandle <jobHandle>k__BackingField = createMeshFromClusterJob.<jobHandle>k__BackingField;
createMeshFromClusterJob.sharedResultMesh.Dispose();
createMeshFromClusterJob.optimizationData.Dispose();
bool flag;
if (flag)
{
}
}
// Token: 0x06006EF9 RID: 28409 RVA: 0x00185EFC File Offset: 0x001840FC
[Token(Token = "0x6006EF9")]
[Address(RVA = "0x1F40140", Offset = "0x1F3F140", VA = "0x181F40140")]
public void Clear()
{
CreateMeshFromClusterJob createMeshFromClusterJob = this.createMeshFromClusterJob;
JobHandle <jobHandle>k__BackingField = createMeshFromClusterJob.<jobHandle>k__BackingField;
createMeshFromClusterJob.<cluster>k__BackingField = (ulong)0L;
this.createQueue.Clear();
}
// Token: 0x06006EFA RID: 28410 RVA: 0x00185F34 File Offset: 0x00184134
[Token(Token = "0x6006EFA")]
[Address(RVA = "0x1F400A0", Offset = "0x1F3F0A0", VA = "0x181F400A0")]
public void Add(ClusterMesh.ClusterInfo cluster, Transform root)
{
List<IClusterLODComponent> components = cluster.components;
cluster.root = root;
if (!this.createQueue.Contains(cluster))
{
this.createQueue.Enqueue(cluster);
}
}
// Token: 0x06006EFB RID: 28411 RVA: 0x00185F70 File Offset: 0x00184170
[Token(Token = "0x6006EFB")]
[Address(RVA = "0x1F40530", Offset = "0x1F3F530", VA = "0x181F40530")]
public void Remove(ClusterMesh.ClusterInfo cluster)
{
if (this.createQueue.Contains(cluster))
{
Queue<ClusterMesh.ClusterInfo> queue = new Queue();
ClusterMesh.ClusterInfo clusterInfo = this.createQueue.Dequeue();
if (clusterInfo != cluster)
{
queue.Enqueue(clusterInfo);
}
Queue<ClusterMesh.ClusterInfo> queue2 = this.createQueue;
this.createQueue = queue;
}
CreateMeshFromClusterJob createMeshFromClusterJob = this.createMeshFromClusterJob;
ClusterMesh.ClusterInfo <cluster>k__BackingField = createMeshFromClusterJob.<cluster>k__BackingField;
JobHandle <jobHandle>k__BackingField = createMeshFromClusterJob.<jobHandle>k__BackingField;
createMeshFromClusterJob.<cluster>k__BackingField = (ulong)0L;
if (this.activeClusters.Contains(cluster))
{
bool flag = this.activeClusters.Remove(cluster);
int numLOD0Verts = cluster.numLOD0Verts;
}
}
// Token: 0x06006EFC RID: 28412 RVA: 0x00186004 File Offset: 0x00184204
[Token(Token = "0x6006EFC")]
[Address(RVA = "0x1F402D0", Offset = "0x1F3F2D0", VA = "0x181F402D0")]
private ClusterMesh.ClusterInfo GetWorstActiveCluster()
{
int num;
do
{
num = 0;
List<ClusterMesh.ClusterInfo> list = this.activeClusters;
bool flag;
if (flag)
{
}
}
while (num != 0);
throw new NullReferenceException();
}
// Token: 0x06006EFD RID: 28413 RVA: 0x00186030 File Offset: 0x00184230
[Token(Token = "0x6006EFD")]
[Address(RVA = "0x1F40400", Offset = "0x1F3F400", VA = "0x181F40400")]
private bool IsClusterActive(ClusterMesh.ClusterInfo cluster)
{
return this.activeClusters.Contains(cluster);
}
// Token: 0x06006EFE RID: 28414 RVA: 0x00186050 File Offset: 0x00184250
[Token(Token = "0x6006EFE")]
[Address(RVA = "0x1F404A0", Offset = "0x1F3F4A0", VA = "0x181F404A0")]
private bool RemoveActiveCluster(ClusterMesh.ClusterInfo cluster)
{
bool flag = this.activeClusters.Contains(cluster);
if (!flag)
{
return flag;
}
bool flag2 = this.activeClusters.Remove(cluster);
throw new NullReferenceException();
}
// Token: 0x06006EFF RID: 28415 RVA: 0x00186084 File Offset: 0x00184284
[Token(Token = "0x6006EFF")]
[Address(RVA = "0x1F40040", Offset = "0x1F3F040", VA = "0x181F40040")]
private void AddActiveCluster(ClusterMesh.ClusterInfo cluster)
{
this.activeClusters.Add(cluster);
int numLOD0Verts = cluster.numLOD0Verts;
}
// Token: 0x06006F00 RID: 28416 RVA: 0x001860AC File Offset: 0x001842AC
[Token(Token = "0x6006F00")]
[Address(RVA = "0x1F40460", Offset = "0x1F3F460", VA = "0x181F40460")]
public bool IsProcessing(ClusterMesh.ClusterInfo cluster)
{
ClusterMesh.ClusterInfo <cluster>k__BackingField = this.createMeshFromClusterJob.<cluster>k__BackingField;
bool flag;
return flag;
}
// Token: 0x06006F01 RID: 28417 RVA: 0x001860D0 File Offset: 0x001842D0
[Token(Token = "0x6006F01")]
[Address(RVA = "0x1F406C0", Offset = "0x1F3F6C0", VA = "0x181F406C0")]
public bool Update()
{
ClusterMesh.ClusterInfo clusterInfo;
ClusterMesh.ClusterInfo worstActiveCluster;
do
{
CreateMeshFromClusterJob createMeshFromClusterJob = this.createMeshFromClusterJob;
if (createMeshFromClusterJob.<cluster>k__BackingField > (ulong)0L)
{
if (!JobHandle.ScheduleBatchedJobsAndIsCompleted(createMeshFromClusterJob.<jobHandle>k__BackingField))
{
}
ClusterMesh.ClusterInfo <cluster>k__BackingField = this.createMeshFromClusterJob.<cluster>k__BackingField;
bool flag = this.RemoveActiveCluster(<cluster>k__BackingField);
this.createMeshFromClusterJob.CreateMesh();
this.activeClusters.Add(<cluster>k__BackingField);
}
clusterInfo = this.createQueue.Dequeue();
while (clusterInfo == 0)
{
}
int num = this.numActiveVerts;
int maxDynamicNearVerts = ClusterLODManager._instance.<Config>k__BackingField.maxDynamicNearVerts;
if (num <= maxDynamicNearVerts)
{
goto IL_B2;
}
worstActiveCluster = this.GetWorstActiveCluster();
if (worstActiveCluster == 0)
{
goto IL_B2;
}
}
while (clusterInfo.closestDist > worstActiveCluster.closestDist);
bool flag2 = this.RemoveActiveCluster(worstActiveCluster);
worstActiveCluster.RequestRemoveMesh();
IL_B2:
CreateMeshFromClusterJob createMeshFromClusterJob2 = this.createMeshFromClusterJob;
if (createMeshFromClusterJob2.<cluster>k__BackingField <= (ulong)0L)
{
List<IClusterLODComponent> components = clusterInfo.components;
Transform root = clusterInfo.root;
createMeshFromClusterJob2.Init(clusterInfo, root);
JobHandle.ScheduleBatchedJobs();
}
throw new NullReferenceException();
}
// Token: 0x06006F02 RID: 28418 RVA: 0x001861D0 File Offset: 0x001843D0
[Token(Token = "0x6006F02")]
[Address(RVA = "0x1F40270", Offset = "0x1F3F270", VA = "0x181F40270")]
private ClusterMesh.ClusterInfo GetClusterToCreate()
{
return this.createQueue.Dequeue();
}
// Token: 0x06006F03 RID: 28419 RVA: 0x001861F0 File Offset: 0x001843F0
[Token(Token = "0x6006F03")]
[Address(RVA = "0x1F40950", Offset = "0x1F3F950", VA = "0x181F40950")]
public ClusterMeshAssetCache()
{
Queue<ClusterMesh.ClusterInfo> queue = new Queue();
this.createQueue = queue;
CreateMeshFromClusterJob createMeshFromClusterJob = new CreateMeshFromClusterJob();
PCIKHFEIHGO pcikhfeihgo = new PCIKHFEIHGO();
createMeshFromClusterJob.sharedResultMesh = pcikhfeihgo;
OCCMLFOBCEM occmlfobcem = new OCCMLFOBCEM();
createMeshFromClusterJob.optimizationData = occmlfobcem;
this.createMeshFromClusterJob = createMeshFromClusterJob;
List<ClusterMesh.ClusterInfo> list = new List();
this.activeClusters = list;
base..ctor();
}
// Token: 0x04004971 RID: 18801
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x4004971")]
private Queue<ClusterMesh.ClusterInfo> createQueue;
// Token: 0x04004972 RID: 18802
[FieldOffset(Offset = "0x18")]
[Token(Token = "0x4004972")]
private CreateMeshFromClusterJob createMeshFromClusterJob;
// Token: 0x04004973 RID: 18803
[FieldOffset(Offset = "0x20")]
[Token(Token = "0x4004973")]
private readonly List<ClusterMesh.ClusterInfo> activeClusters;
// Token: 0x04004974 RID: 18804
[FieldOffset(Offset = "0x28")]
[Token(Token = "0x4004974")]
private int numActiveVerts;
}
}
@@ -0,0 +1,18 @@
using System;
using Cpp2IlInjected;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x02001350 RID: 4944
[Token(Token = "0x2001350")]
public class ClusterMeshAssetEditorDebug : MonoBehaviour
{
// Token: 0x06006F04 RID: 28420 RVA: 0x00186248 File Offset: 0x00184448
[Token(Token = "0x6006F04")]
[Address(RVA = "0x428AD0", Offset = "0x427AD0", VA = "0x180428AD0")]
public ClusterMeshAssetEditorDebug()
{
}
}
}
@@ -0,0 +1,164 @@
using System;
using System.Collections.Generic;
using Cpp2IlInjected;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x02001351 RID: 4945
[Token(Token = "0x2001351")]
public class ClusterMeshGenerator
{
// Token: 0x06006F05 RID: 28421 RVA: 0x0018625C File Offset: 0x0018445C
[Token(Token = "0x6006F05")]
[Address(RVA = "0x1F40F60", Offset = "0x1F3FF60", VA = "0x181F40F60")]
public ClusterMeshGenerator(int minNumVerts, int maxNumVerts, float maxRadius)
{
this.minNumVerts = minNumVerts;
this.maxNumVerts = maxNumVerts;
this.maxDiameterSq = maxRadius;
}
// Token: 0x170011DE RID: 4574
// (get) Token: 0x06006F06 RID: 28422 RVA: 0x00186284 File Offset: 0x00184484
// (set) Token: 0x06006F07 RID: 28423 RVA: 0x00186298 File Offset: 0x00184498
[Token(Token = "0x170011DE")]
public List<ClusterMesh> Meshes
{
[Token(Token = "0x6006F06")]
[Address(RVA = "0x4157C0", Offset = "0x4147C0", VA = "0x1804157C0")]
get;
[Token(Token = "0x6006F07")]
[Address(RVA = "0x415810", Offset = "0x414810", VA = "0x180415810")]
private set;
}
// Token: 0x06006F08 RID: 28424 RVA: 0x001862AC File Offset: 0x001844AC
[Token(Token = "0x6006F08")]
[Address(RVA = "0x1F40C10", Offset = "0x1F3FC10", VA = "0x181F40C10")]
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: 0x06006F09 RID: 28425 RVA: 0x001862EC File Offset: 0x001844EC
[Token(Token = "0x6006F09")]
[Address(RVA = "0x1F40EC0", Offset = "0x1F3FEC0", VA = "0x181F40EC0")]
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: 0x06006F0A RID: 28426 RVA: 0x0018635C File Offset: 0x0018455C
[Token(Token = "0x6006F0A")]
[Address(RVA = "0x1F40CA0", Offset = "0x1F3FCA0", VA = "0x181F40CA0")]
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: 0x06006F0B RID: 28427 RVA: 0x00186414 File Offset: 0x00184614
[Token(Token = "0x6006F0B")]
[Address(RVA = "0x1F40A50", Offset = "0x1F3FA50", VA = "0x181F40A50")]
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: 0x04004975 RID: 18805
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x4004975")]
private int minNumVerts;
// Token: 0x04004976 RID: 18806
[FieldOffset(Offset = "0x14")]
[Token(Token = "0x4004976")]
private int maxNumVerts;
// Token: 0x04004977 RID: 18807
[FieldOffset(Offset = "0x18")]
[Token(Token = "0x4004977")]
private float maxDiameterSq;
}
}
@@ -0,0 +1,226 @@
using System;
using System.Collections.Generic;
using Cpp2IlInjected;
using RecRoom.Core.Rendering;
using Unity.Collections;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x02001352 RID: 4946
[Token(Token = "0x2001352")]
public class ClusterMeshRenderer : MonoBehaviour
{
// Token: 0x06006F0C RID: 28428 RVA: 0x001864C8 File Offset: 0x001846C8
[Token(Token = "0x6006F0C")]
[Address(RVA = "0x1F40FB0", Offset = "0x1F3FFB0", VA = "0x181F40FB0")]
public static ClusterMeshRenderer Create(ClusterMesh mesh, ClusterMeshRenderer clusterMeshRendererPrefab, MeshFilter clusterPrefab, Transform root, bool dynamic)
{
ClusterMeshRenderer clusterMeshRenderer = global::UnityEngine.Object.Instantiate<ClusterMeshRenderer>(clusterMeshRendererPrefab, root);
MeshRenderer component = clusterMeshRenderer.GetComponent<MeshRenderer>();
Material meshMaterial = ClusterLODManager._instance.GetMeshMaterial();
component.SetMaterial(meshMaterial);
clusterMeshRenderer.<Dynamic>k__BackingField = false;
clusterMeshRenderer.Init(mesh, clusterPrefab);
return clusterMeshRenderer;
}
// Token: 0x06006F0D RID: 28429 RVA: 0x0018650C File Offset: 0x0018470C
[Token(Token = "0x6006F0D")]
[Address(RVA = "0x1F41570", Offset = "0x1F40570", VA = "0x181F41570")]
private void OnDestroy()
{
this.<Clusters>k__BackingField.Clear();
this.<Mesh>k__BackingField.Dispose();
}
// Token: 0x170011DF RID: 4575
// (get) Token: 0x06006F0E RID: 28430 RVA: 0x00186538 File Offset: 0x00184738
// (set) Token: 0x06006F0F RID: 28431 RVA: 0x0018654C File Offset: 0x0018474C
[Token(Token = "0x170011DF")]
public List<MeshFilter> Clusters
{
[Token(Token = "0x6006F0E")]
[Address(RVA = "0x4157B0", Offset = "0x4147B0", VA = "0x1804157B0")]
get;
[Token(Token = "0x6006F0F")]
[Address(RVA = "0x4157F0", Offset = "0x4147F0", VA = "0x1804157F0")]
private set;
}
// Token: 0x170011E0 RID: 4576
// (get) Token: 0x06006F10 RID: 28432 RVA: 0x00186560 File Offset: 0x00184760
// (set) Token: 0x06006F11 RID: 28433 RVA: 0x00186574 File Offset: 0x00184774
[Token(Token = "0x170011E0")]
public ClusterMesh Mesh
{
[Token(Token = "0x6006F10")]
[Address(RVA = "0x4157C0", Offset = "0x4147C0", VA = "0x1804157C0")]
get;
[Token(Token = "0x6006F11")]
[Address(RVA = "0x415810", Offset = "0x414810", VA = "0x180415810")]
private set;
}
// Token: 0x170011E1 RID: 4577
// (get) Token: 0x06006F12 RID: 28434 RVA: 0x00186588 File Offset: 0x00184788
// (set) Token: 0x06006F13 RID: 28435 RVA: 0x0018659C File Offset: 0x0018479C
[Token(Token = "0x170011E1")]
public bool Dynamic
{
[Token(Token = "0x6006F12")]
[Address(RVA = "0x51F260", Offset = "0x51E260", VA = "0x18051F260")]
get;
[Token(Token = "0x6006F13")]
[Address(RVA = "0x51F2B0", Offset = "0x51E2B0", VA = "0x18051F2B0")]
private set;
}
// Token: 0x06006F14 RID: 28436 RVA: 0x001865B0 File Offset: 0x001847B0
[Token(Token = "0x6006F14")]
[Address(RVA = "0x1F412A0", Offset = "0x1F402A0", VA = "0x181F412A0")]
public void Init(ClusterMesh mesh, MeshFilter clusterPrefab)
{
for (;;)
{
int num = 0;
mesh.owner = this;
this.<Mesh>k__BackingField = mesh;
List<MeshFilter> list = new List(mesh.Clusters._size);
this.<Clusters>k__BackingField = list;
List<ClusterMesh.ClusterInfo> clusters = mesh.Clusters;
List<MeshFilter>.Enumerator enumerator = list.GetEnumerator();
bool flag;
if (flag)
{
break;
}
if (num == 0)
{
return;
}
}
Transform transform = base.transform;
MeshFilter meshFilter = global::UnityEngine.Object.Instantiate<MeshFilter>(clusterPrefab, transform);
MeshRenderer component = meshFilter.GetComponent<MeshRenderer>();
Material[] sharedMaterialArray = meshFilter.GetComponent<MeshRenderer>().GetSharedMaterialArray();
throw new ArrayTypeMismatchException();
}
// Token: 0x06006F15 RID: 28437 RVA: 0x0018668C File Offset: 0x0018488C
[Token(Token = "0x6006F15")]
[Address(RVA = "0x1F41110", Offset = "0x1F40110", VA = "0x181F41110")]
public void GenerateLOD()
{
int num;
do
{
num = 0;
ClusterMesh clusterMesh = this.<Mesh>k__BackingField;
Transform transform = base.transform;
bool flag = this.<Dynamic>k__BackingField;
clusterMesh.GenerateLODMesh(transform, flag);
MeshFilter component = base.GetComponent<MeshFilter>();
Mesh mesh = this.<Mesh>k__BackingField.<Mesh>k__BackingField;
component.sharedMesh = mesh;
List<MeshFilter> list = this.<Clusters>k__BackingField;
bool flag2;
if (flag2)
{
GameObject gameObject = component.gameObject;
int num2 = 0;
gameObject.SetActive(num2 != 0);
}
}
while (num != 0);
}
// Token: 0x06006F16 RID: 28438 RVA: 0x00186708 File Offset: 0x00184908
[Token(Token = "0x6006F16")]
[Address(RVA = "0x1F41910", Offset = "0x1F40910", VA = "0x181F41910")]
public void UpdateClusterDistances(Vector3 pos)
{
int num;
do
{
num = 0;
if ((this.<Dynamic>k__BackingField ? 1 : 0) != num)
{
Transform transform = base.transform;
Vector3 vector;
float z = vector.z;
pos.z = z;
}
List<ClusterMesh.ClusterInfo> clusters = this.<Mesh>k__BackingField.Clusters;
bool flag;
if (flag)
{
List<ClusterMesh.ClusterInfo>.Enumerator enumerator;
int index = enumerator.index;
float z2 = pos.z;
}
}
while (num != 0);
}
// Token: 0x06006F17 RID: 28439 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006F17")]
[Address(RVA = "0x1F41B50", Offset = "0x1F40B50", VA = "0x181F41B50")]
public bool UpdateVisibility()
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x06006F18 RID: 28440 RVA: 0x00186764 File Offset: 0x00184964
[Token(Token = "0x6006F18")]
[Address(RVA = "0x1F415F0", Offset = "0x1F405F0", VA = "0x181F415F0")]
public void RenderOutline(OutlineRendererEffect.HLEDHCIGMPJ outlineType)
{
OEIHLPKBJKH nextOutlineRenderHandle = OutlineRendererEffect.GetNextOutlineRenderHandle();
List<MeshFilter> list = this.<Clusters>k__BackingField;
int num = 0;
NativeArray<int> componentLod = this.<Mesh>k__BackingField.updateData.componentLod;
GameObject gameObject;
Renderer component = gameObject.GetComponent<Renderer>();
num++;
num += 4;
}
// Token: 0x06006F19 RID: 28441 RVA: 0x001867AC File Offset: 0x001849AC
[Token(Token = "0x6006F19")]
[Address(RVA = "0x1F41760", Offset = "0x1F40760", VA = "0x181F41760")]
public void SetupTagAndLayer(string tag, int layer)
{
int num;
do
{
num = 0;
base.gameObject.layer = layer;
base.gameObject.tag = tag;
List<MeshFilter> list = this.<Clusters>k__BackingField;
bool flag;
if (flag)
{
base.gameObject.layer = layer;
base.gameObject.tag = tag;
}
}
while (num != 0);
}
// Token: 0x06006F1A RID: 28442 RVA: 0x0018680C File Offset: 0x00184A0C
[Token(Token = "0x6006F1A")]
[Address(RVA = "0x1F415D0", Offset = "0x1F405D0", VA = "0x181F415D0")]
public bool Remove(IClusterLODComponent component)
{
return this.<Mesh>k__BackingField.Remove(component);
}
// Token: 0x06006F1B RID: 28443 RVA: 0x0018682C File Offset: 0x00184A2C
[Token(Token = "0x6006F1B")]
[Address(RVA = "0x428AD0", Offset = "0x427AD0", VA = "0x180428AD0")]
public ClusterMeshRenderer()
{
}
}
}
@@ -0,0 +1,124 @@
using System;
using Cpp2IlInjected;
using Unity.Burst;
using Unity.Collections;
using Unity.Jobs;
using Unity.Mathematics;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x02001355 RID: 4949
[Token(Token = "0x2001355")]
[BurstCompile]
public struct ClusterMeshUpdateJob : IJob
{
// Token: 0x06006F25 RID: 28453 RVA: 0x00186988 File Offset: 0x00184B88
[Token(Token = "0x6006F25")]
[Address(RVA = "0x1F43830", Offset = "0x1F42830", VA = "0x181F43830")]
public ClusterMeshUpdateJob(ClusterMeshUpdateJobData jobData, Vector3 eyePos, bool dynamicCluster, float faceFactor, float meshScale, float distFactor)
{
NativeList<float3> nativeList = jobData.verts;
float z = eyePos.z;
this.verts = nativeList;
NativeList<int> nativeList2 = jobData.origIndices;
this.origIndices = nativeList2;
NativeList<int> nativeList3 = jobData.indices;
this.indices = nativeList3;
NativeList<MeshComponentInfo> componentInfo = jobData.componentInfo;
this.clusterInfo = componentInfo;
NativeArray<int> nativeArray = jobData.componentLod;
this.componentLod = nativeArray;
NativeArray<float3> nativeArray2 = jobData.triNormals;
this.triNormals = nativeArray2;
NativeArray<float> nativeArray3 = jobData.triSizes;
this.triSizes = nativeArray3;
this.meshScale = (float)0;
this.dynamicCluster = dynamicCluster;
float3 @float;
float z2 = @float.z;
this.faceFactor = (float)0;
this.distFactor = (float)0;
this.eyePos.z = z2;
}
// Token: 0x06006F26 RID: 28454 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006F26")]
[Address(RVA = "0x1F43390", Offset = "0x1F42390", VA = "0x181F43390", Slot = "4")]
public void Execute()
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x04004989 RID: 18825
[FieldOffset(Offset = "0x0")]
[Token(Token = "0x4004989")]
[ReadOnly]
private NativeList<float3> verts;
// Token: 0x0400498A RID: 18826
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x400498A")]
[ReadOnly]
public NativeList<int> origIndices;
// Token: 0x0400498B RID: 18827
[FieldOffset(Offset = "0x20")]
[Token(Token = "0x400498B")]
[ReadOnly]
private NativeList<MeshComponentInfo> clusterInfo;
// Token: 0x0400498C RID: 18828
[FieldOffset(Offset = "0x30")]
[Token(Token = "0x400498C")]
[ReadOnly]
private NativeArray<int> componentLod;
// Token: 0x0400498D RID: 18829
[FieldOffset(Offset = "0x40")]
[Token(Token = "0x400498D")]
[ReadOnly]
private float3 eyePos;
// Token: 0x0400498E RID: 18830
[FieldOffset(Offset = "0x50")]
[Token(Token = "0x400498E")]
[ReadOnly]
private NativeArray<float3> triNormals;
// Token: 0x0400498F RID: 18831
[FieldOffset(Offset = "0x60")]
[Token(Token = "0x400498F")]
[ReadOnly]
private NativeArray<float> triSizes;
// Token: 0x04004990 RID: 18832
[FieldOffset(Offset = "0x70")]
[Token(Token = "0x4004990")]
[ReadOnly]
private bool dynamicCluster;
// Token: 0x04004991 RID: 18833
[FieldOffset(Offset = "0x74")]
[Token(Token = "0x4004991")]
[ReadOnly]
private float faceFactor;
// Token: 0x04004992 RID: 18834
[FieldOffset(Offset = "0x78")]
[Token(Token = "0x4004992")]
[ReadOnly]
private float meshScale;
// Token: 0x04004993 RID: 18835
[FieldOffset(Offset = "0x7C")]
[Token(Token = "0x4004993")]
[ReadOnly]
private float distFactor;
// Token: 0x04004994 RID: 18836
[FieldOffset(Offset = "0x80")]
[Token(Token = "0x4004994")]
private NativeList<int> indices;
}
}
@@ -0,0 +1,141 @@
using System;
using Cpp2IlInjected;
using Unity.Collections;
using Unity.Jobs;
using Unity.Mathematics;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x02001354 RID: 4948
[Token(Token = "0x2001354")]
public class ClusterMeshUpdateJobData : IDisposable
{
// Token: 0x170011E2 RID: 4578
// (get) Token: 0x06006F1D RID: 28445 RVA: 0x0018686C File Offset: 0x00184A6C
// (set) Token: 0x06006F1E RID: 28446 RVA: 0x00186880 File Offset: 0x00184A80
[Token(Token = "0x170011E2")]
public bool IsActive
{
[Token(Token = "0x6006F1D")]
[Address(RVA = "0x4A9720", Offset = "0x4A8720", VA = "0x1804A9720")]
get;
[Token(Token = "0x6006F1E")]
[Address(RVA = "0x497010", Offset = "0x496010", VA = "0x180497010")]
private set;
}
// Token: 0x06006F1F RID: 28447 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006F1F")]
[Address(RVA = "0x1F427A0", Offset = "0x1F417A0", VA = "0x181F427A0")]
public void Init(PCIKHFEIHGO srcMesh, NativeList<MeshComponentInfo> componentInfo, float scale)
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x06006F20 RID: 28448 RVA: 0x00186894 File Offset: 0x00184A94
[Token(Token = "0x6006F20")]
[Address(RVA = "0x1F42280", Offset = "0x1F41280", VA = "0x181F42280")]
public void CreateUpdateJob(Transform root, bool dynamicCluster)
{
float z = ClusterLODManager._instance.<EyePos>k__BackingField.z;
Vector3 vector;
float z2 = vector.z;
ClusterLODConfig <Config>k__BackingField = ClusterLODManager._instance.<Config>k__BackingField;
float backfaceCullingThreshold = <Config>k__BackingField.backfaceCullingThreshold;
float triangleCullingDistFactor = <Config>k__BackingField.triangleCullingDistFactor;
JobHandle.ScheduleBatchedJobs();
this.<IsActive>k__BackingField = true;
}
// Token: 0x06006F21 RID: 28449 RVA: 0x001868EC File Offset: 0x00184AEC
[Token(Token = "0x6006F21")]
[Address(RVA = "0x1F42610", Offset = "0x1F41610", VA = "0x181F42610")]
public void FinalizeUpdate(ClusterMesh owner, bool setOrigIndices)
{
this.<IsActive>k__BackingField = false;
if (owner != 0)
{
Mesh <Mesh>k__BackingField = owner.<Mesh>k__BackingField;
int num = 0;
if (!(<Mesh>k__BackingField == num))
{
owner.<Mesh>k__BackingField.subMeshCount = 2;
NativeList<int> nativeList = this.indices;
Mesh <Mesh>k__BackingField2 = owner.<Mesh>k__BackingField;
if (setOrigIndices)
{
NativeList<int> nativeList2 = this.origIndices;
Mesh <Mesh>k__BackingField3 = owner.<Mesh>k__BackingField;
}
}
}
}
// Token: 0x06006F22 RID: 28450 RVA: 0x0018694C File Offset: 0x00184B4C
[Token(Token = "0x6006F22")]
[Address(RVA = "0x1F42540", Offset = "0x1F41540", VA = "0x181F42540", Slot = "4")]
public void Dispose()
{
bool flag;
if (flag)
{
}
}
// Token: 0x06006F23 RID: 28451 RVA: 0x00186960 File Offset: 0x00184B60
[Token(Token = "0x6006F23")]
[Address(RVA = "0x1F42250", Offset = "0x1F41250", VA = "0x181F42250")]
public void Clear()
{
this.<IsActive>k__BackingField = false;
}
// Token: 0x06006F24 RID: 28452 RVA: 0x00186974 File Offset: 0x00184B74
[Token(Token = "0x6006F24")]
[Address(RVA = "0x412370", Offset = "0x411370", VA = "0x180412370")]
public ClusterMeshUpdateJobData()
{
}
// Token: 0x04004980 RID: 18816
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x4004980")]
public NativeList<float3> verts;
// Token: 0x04004981 RID: 18817
[FieldOffset(Offset = "0x20")]
[Token(Token = "0x4004981")]
public NativeList<int> origIndices;
// Token: 0x04004982 RID: 18818
[FieldOffset(Offset = "0x30")]
[Token(Token = "0x4004982")]
public NativeList<int> indices;
// Token: 0x04004983 RID: 18819
[FieldOffset(Offset = "0x40")]
[Token(Token = "0x4004983")]
public NativeList<MeshComponentInfo> componentInfo;
// Token: 0x04004984 RID: 18820
[FieldOffset(Offset = "0x50")]
[Token(Token = "0x4004984")]
public NativeArray<int> componentLod;
// Token: 0x04004985 RID: 18821
[FieldOffset(Offset = "0x60")]
[Token(Token = "0x4004985")]
public NativeArray<float3> triNormals;
// Token: 0x04004986 RID: 18822
[FieldOffset(Offset = "0x70")]
[Token(Token = "0x4004986")]
public NativeArray<float> triSizes;
// Token: 0x04004987 RID: 18823
[FieldOffset(Offset = "0x80")]
[Token(Token = "0x4004987")]
public JobHandle jobHandle;
}
}
+55
View File
@@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Cpp2IlInjected;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x02001357 RID: 4951
[Token(Token = "0x2001357")]
public class ClusterNode
{
// Token: 0x06006F29 RID: 28457 RVA: 0x00186A40 File Offset: 0x00184C40
[Token(Token = "0x6006F29")]
[Address(RVA = "0x1F44BF0", Offset = "0x1F43BF0", VA = "0x181F44BF0")]
public ClusterNode(List<IClusterLODComponent> components, [Optional] ClusterNode parent)
{
this.parent = parent;
int num = 0;
this.components = components;
int num2 = ClusterUtil.GetVertexCount(components, (NPBPPKDLKDN)num);
this.vertexCount = num2;
}
// Token: 0x04004995 RID: 18837
[global::Cpp2IlInjected.FieldOffset(Offset = "0x10")]
[Token(Token = "0x4004995")]
public List<IClusterLODComponent> components;
// Token: 0x04004996 RID: 18838
[global::Cpp2IlInjected.FieldOffset(Offset = "0x18")]
[Token(Token = "0x4004996")]
public ClusterNode parent;
// Token: 0x04004997 RID: 18839
[global::Cpp2IlInjected.FieldOffset(Offset = "0x20")]
[Token(Token = "0x4004997")]
public ClusterNode child1;
// Token: 0x04004998 RID: 18840
[global::Cpp2IlInjected.FieldOffset(Offset = "0x28")]
[Token(Token = "0x4004998")]
public ClusterNode child2;
// Token: 0x04004999 RID: 18841
[global::Cpp2IlInjected.FieldOffset(Offset = "0x30")]
[Token(Token = "0x4004999")]
public int vertexCount;
// Token: 0x0400499A RID: 18842
[global::Cpp2IlInjected.FieldOffset(Offset = "0x34")]
[Token(Token = "0x400499A")]
public Bounds bounds;
}
}
+43
View File
@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using Cpp2IlInjected;
namespace ClusterLOD
{
// Token: 0x02001358 RID: 4952
[Token(Token = "0x2001358")]
public class ClusterTree
{
// Token: 0x170011E5 RID: 4581
// (get) Token: 0x06006F2A RID: 28458 RVA: 0x00186A74 File Offset: 0x00184C74
// (set) Token: 0x06006F2B RID: 28459 RVA: 0x00186A88 File Offset: 0x00184C88
[Token(Token = "0x170011E5")]
public ClusterNode Root
{
[Token(Token = "0x6006F2A")]
[Address(RVA = "0x411530", Offset = "0x410530", VA = "0x180411530")]
get;
[Token(Token = "0x6006F2B")]
[Address(RVA = "0x415800", Offset = "0x414800", VA = "0x180415800")]
private set;
}
// Token: 0x06006F2C RID: 28460 RVA: 0x00186A9C File Offset: 0x00184C9C
[Token(Token = "0x6006F2C")]
[Address(RVA = "0x1F46840", Offset = "0x1F45840", VA = "0x181F46840")]
public ClusterTree(ClusterNode root)
{
List<ClusterNode> list = new List();
this.Nodes = list;
base..ctor();
List<ClusterNode> nodes = this.Nodes;
this.Root = root;
nodes.Add(root);
}
// Token: 0x0400499C RID: 18844
[FieldOffset(Offset = "0x18")]
[Token(Token = "0x400499C")]
public List<ClusterNode> Nodes;
}
}
@@ -0,0 +1,317 @@
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
}
}
}
+54
View File
@@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using Cpp2IlInjected;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x0200135E RID: 4958
[Token(Token = "0x200135E")]
internal static class ClusterUtil
{
// Token: 0x06006F3C RID: 28476 RVA: 0x00186F78 File Offset: 0x00185178
[Token(Token = "0x6006F3C")]
[Address(RVA = "0x1F468D0", Offset = "0x1F458D0", VA = "0x181F468D0")]
public static Bounds GetBounds(List<IClusterLODComponent> components)
{
int num;
do
{
num = 0;
bool flag;
if (!flag || (ulong)1L == 0UL)
{
}
}
while (num != 0);
throw new NullReferenceException();
}
// Token: 0x06006F3D RID: 28477 RVA: 0x00186FA8 File Offset: 0x001851A8
[Token(Token = "0x6006F3D")]
[Address(RVA = "0x1F46A80", Offset = "0x1F45A80", VA = "0x181F46A80")]
public static int GetVertexCount(List<IClusterLODComponent> components, NPBPPKDLKDN lod)
{
int num;
do
{
num = 0;
bool flag;
if (flag)
{
num += num;
num++;
num += num;
int num2 = (int)(lod + (int)lod);
num++;
num += 19;
}
}
while (num != 0);
return num;
}
}
}
@@ -0,0 +1,250 @@
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using Cpp2IlInjected;
using Unity.Collections;
using Unity.Jobs;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x0200135F RID: 4959
[Token(Token = "0x200135F")]
public class CreateMeshFromClusterJob : IDisposable
{
// Token: 0x170011E7 RID: 4583
// (get) Token: 0x06006F3E RID: 28478 RVA: 0x0000220F File Offset: 0x0000040F
// (set) Token: 0x06006F3F RID: 28479 RVA: 0x00186FE8 File Offset: 0x001851E8
[Token(Token = "0x170011E7")]
public JobHandle jobHandle
{
[Token(Token = "0x6006F3E")]
[Address(RVA = "0x814AB0", Offset = "0x813AB0", VA = "0x180814AB0")]
[CompilerGenerated]
get
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
[Token(Token = "0x6006F3F")]
[Address(RVA = "0x814BD0", Offset = "0x813BD0", VA = "0x180814BD0")]
[CompilerGenerated]
private set
{
}
}
// Token: 0x170011E8 RID: 4584
// (get) Token: 0x06006F40 RID: 28480 RVA: 0x00186FF8 File Offset: 0x001851F8
// (set) Token: 0x06006F41 RID: 28481 RVA: 0x0018700C File Offset: 0x0018520C
[Token(Token = "0x170011E8")]
public ClusterMesh.ClusterInfo cluster
{
[Token(Token = "0x6006F40")]
[Address(RVA = "0x4157C0", Offset = "0x4147C0", VA = "0x1804157C0")]
get;
[Token(Token = "0x6006F41")]
[Address(RVA = "0x415810", Offset = "0x414810", VA = "0x180415810")]
private set;
}
// Token: 0x170011E9 RID: 4585
// (get) Token: 0x06006F42 RID: 28482 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x170011E9")]
public bool Active
{
[Token(Token = "0x6006F42")]
[Address(RVA = "0xA4CD20", Offset = "0xA4BD20", VA = "0x180A4CD20")]
get
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
}
// Token: 0x06006F43 RID: 28483 RVA: 0x00187020 File Offset: 0x00185220
[Token(Token = "0x6006F43")]
[Address(RVA = "0x1F47EB0", Offset = "0x1F46EB0", VA = "0x181F47EB0")]
public void Init(ClusterMesh.ClusterInfo clusterInfo, Transform rootTranform)
{
this.<cluster>k__BackingField = clusterInfo;
ClusterLODConfig.LODSettings near = ClusterLODManager._instance.<Config>k__BackingField.near;
float maxSubDivideEdgeSize = near.maxSubDivideEdgeSize;
int num = 0;
if (maxSubDivideEdgeSize <= (float)num)
{
}
float maxSubDivideDistance = near.maxSubDivideDistance;
bool useMaterials = near.useMaterials;
PCIKHFEIHGO pcikhfeihgo = this.sharedResultMesh;
this.resultMesh = pcikhfeihgo;
if (pcikhfeihgo.MEBGJGNMIMG)
{
List<IClusterLODComponent> components = this.<cluster>k__BackingField.components;
ClusterMesh.ClusterInfo clusterInfo2 = this.<cluster>k__BackingField;
NativeList<CJJFNIHNLBD> nativeList = this.occlusion;
PCIKHFEIHGO pcikhfeihgo2 = this.resultMesh;
OCCMLFOBCEM occmlfobcem = this.optimizationData;
ClusterMesh.ClusterInfo clusterInfo3 = this.<cluster>k__BackingField;
OCCMLFOBCEM occmlfobcem2 = this.optimizationData;
NativeList<CJJFNIHNLBD> nativeList2 = this.occlusion;
OCCMLFOBCEM occmlfobcem3 = this.optimizationData;
PCIKHFEIHGO pcikhfeihgo3 = this.resultMesh;
JobHandle jobHandle = this.<jobHandle>k__BackingField;
SubdivideMeshData subdivideMeshData = clusterInfo.subdivideMeshData;
bool flag;
if (!flag)
{
}
bool flag2;
if (flag2)
{
}
bool flag3;
if (flag3)
{
}
int num2 = 0;
subdivideMeshData.origIndices = num2;
bool flag4;
if (!flag4)
{
int num3 = 0;
int num4 = 0;
SubdivideMeshData.vertexMap = num3;
SubdivideMeshData.indexRemap = num4;
}
PCIKHFEIHGO pcikhfeihgo4 = this.resultMesh;
SubdivideMeshData subdivideMeshData2 = clusterInfo.subdivideMeshData;
JobHandle jobHandle2 = this.<jobHandle>k__BackingField;
}
if (CreateMeshFromClusterJob.SharedAdditionalMesh.MEBGJGNMIMG)
{
PCIKHFEIHGO sharedAdditionalMesh = CreateMeshFromClusterJob.SharedAdditionalMesh;
}
PCIKHFEIHGO sharedAdditionalMesh2 = CreateMeshFromClusterJob.SharedAdditionalMesh;
PCIKHFEIHGO sharedAdditionalMesh3 = CreateMeshFromClusterJob.SharedAdditionalMesh;
float z = ClusterLODManager._instance.<EyePos>k__BackingField.z;
Vector3 vector;
float z2 = vector.z;
float maxSubDivideEdgeSize2 = near.maxSubDivideEdgeSize;
float maxSubDivideDistance2 = near.maxSubDivideDistance;
JobHandle jobHandle3 = this.<jobHandle>k__BackingField;
PCIKHFEIHGO pcikhfeihgo5 = this.resultMesh;
NativeArray<int> indexRemap = SubdivideMeshData.indexRemap;
NativeMultiHashMap<int, int> vertexMap = SubdivideMeshData.vertexMap;
JobHandle jobHandle4 = this.<jobHandle>k__BackingField;
SubdivideMeshData.vertexMap = jobHandle4;
SubdivideMeshData.indexRemap = vertexMap;
SubdivideMeshData.refCount = jobHandle4;
}
// Token: 0x06006F44 RID: 28484 RVA: 0x001871C8 File Offset: 0x001853C8
[Token(Token = "0x6006F44")]
[Address(RVA = "0x1F47750", Offset = "0x1F46750", VA = "0x181F47750")]
public void CreateMesh()
{
ClusterLODConfig.LODSettings near = ClusterLODManager._instance.<Config>k__BackingField.near;
float maxSubDivideEdgeSize = near.maxSubDivideEdgeSize;
int num = 0;
if (maxSubDivideEdgeSize <= (float)num)
{
}
float maxSubDivideDistance = near.maxSubDivideDistance;
Mesh mesh = new Mesh();
ulong num2;
bool flag = this.resultMesh.KDBPJKOOMGC(mesh, num2 != 0UL);
PCIKHFEIHGO pcikhfeihgo = this.resultMesh;
PCIKHFEIHGO sharedAdditionalMesh = CreateMeshFromClusterJob.SharedAdditionalMesh;
ulong num3;
bool flag2 = pcikhfeihgo.NFNAPELMHNM(mesh, sharedAdditionalMesh, num3 != 0UL);
ClusterMesh.ClusterInfo clusterInfo = this.<cluster>k__BackingField;
int num4 = this.resultMesh.KHFAJBCGLCL;
clusterInfo.numLOD0Verts = num4;
ClusterMesh.ClusterInfo clusterInfo2 = this.<cluster>k__BackingField;
Mesh <RequestedMesh>k__BackingField = clusterInfo2.<RequestedMesh>k__BackingField;
Mesh <ActiveMesh>k__BackingField = clusterInfo2.<ActiveMesh>k__BackingField;
if (<RequestedMesh>k__BackingField != <ActiveMesh>k__BackingField)
{
OMCHJHPFBDN.KBFLHNONOHF(clusterInfo2.<RequestedMesh>k__BackingField);
}
clusterInfo2.<RequestedMesh>k__BackingField = mesh;
ulong num5;
mesh.UploadMeshData(num5 != 0UL);
this.<cluster>k__BackingField.numAdditionalVerts = (int)((ulong)0L);
PCIKHFEIHGO sharedAdditionalMesh2 = CreateMeshFromClusterJob.SharedAdditionalMesh;
bool flag3;
int num6;
if (flag3)
{
num6 = CreateMeshFromClusterJob.SharedAdditionalMesh.KHFAJBCGLCL;
}
ClusterLODManager instance = ClusterLODManager._instance;
int numAdditionalVerts = this.<cluster>k__BackingField.numAdditionalVerts;
num6 -= numAdditionalVerts;
this.<cluster>k__BackingField.numAdditionalVerts = num6;
if (SingletonMonoBehaviour.ONCPNMDGGKG.SystemMemorySizeMB() == 0)
{
}
object[] array = new object[5];
throw new ArrayTypeMismatchException();
}
// Token: 0x06006F45 RID: 28485 RVA: 0x001873E8 File Offset: 0x001855E8
[Token(Token = "0x6006F45")]
[Address(RVA = "0x1F47E10", Offset = "0x1F46E10", VA = "0x181F47E10", Slot = "4")]
public void Dispose()
{
JobHandle jobHandle = this.<jobHandle>k__BackingField;
this.sharedResultMesh.Dispose();
this.optimizationData.Dispose();
bool flag;
if (flag)
{
}
}
// Token: 0x06006F46 RID: 28486 RVA: 0x0018741C File Offset: 0x0018561C
[Token(Token = "0x6006F46")]
[Address(RVA = "0x1F47720", Offset = "0x1F46720", VA = "0x181F47720")]
public void Clear()
{
JobHandle jobHandle = this.<jobHandle>k__BackingField;
this.<cluster>k__BackingField = (ulong)0L;
}
// Token: 0x06006F47 RID: 28487 RVA: 0x0018743C File Offset: 0x0018563C
[Token(Token = "0x6006F47")]
[Address(RVA = "0x1F48960", Offset = "0x1F47960", VA = "0x181F48960")]
public CreateMeshFromClusterJob()
{
PCIKHFEIHGO pcikhfeihgo = new PCIKHFEIHGO();
this.sharedResultMesh = pcikhfeihgo;
OCCMLFOBCEM occmlfobcem = new OCCMLFOBCEM();
this.optimizationData = occmlfobcem;
base..ctor();
}
// Token: 0x040049B6 RID: 18870
[FieldOffset(Offset = "0x28")]
[Token(Token = "0x40049B6")]
private PCIKHFEIHGO sharedResultMesh;
// Token: 0x040049B7 RID: 18871
[FieldOffset(Offset = "0x30")]
[Token(Token = "0x40049B7")]
private PCIKHFEIHGO resultMesh;
// Token: 0x040049B8 RID: 18872
[Token(Token = "0x40049B8")]
public static readonly PCIKHFEIHGO SharedAdditionalMesh = new PCIKHFEIHGO();
// Token: 0x040049B9 RID: 18873
[FieldOffset(Offset = "0x38")]
[Token(Token = "0x40049B9")]
private OCCMLFOBCEM optimizationData;
// Token: 0x040049BA RID: 18874
[FieldOffset(Offset = "0x40")]
[Token(Token = "0x40049BA")]
private NativeList<CJJFNIHNLBD> occlusion;
}
}
@@ -0,0 +1,31 @@
using System;
using Cpp2IlInjected;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x02001356 RID: 4950
[Token(Token = "0x2001356")]
public interface IClusterLODComponent : IPMIEGJGMGN
{
// Token: 0x170011E3 RID: 4579
// (get) Token: 0x06006F27 RID: 28455
[Token(Token = "0x170011E3")]
Bounds ClusterLODBounds
{
[Token(Token = "0x6006F27")]
[Address(Slot = "0")]
get;
}
// Token: 0x170011E4 RID: 4580
// (get) Token: 0x06006F28 RID: 28456
[Token(Token = "0x170011E4")]
CJJFNIHNLBD OcclusionData
{
[Token(Token = "0x6006F28")]
[Address(Slot = "1")]
get;
}
}
}
@@ -0,0 +1,49 @@
using System;
using Cpp2IlInjected;
using Unity.Burst;
using Unity.Collections;
using Unity.Jobs;
namespace ClusterLOD
{
// Token: 0x0200134B RID: 4939
[Token(Token = "0x200134B")]
[BurstCompile]
public struct InitSubdivideMeshData : IJob
{
// Token: 0x06006ED3 RID: 28371 RVA: 0x001856A4 File Offset: 0x001838A4
[Token(Token = "0x6006ED3")]
[Address(RVA = "0x1F48CF0", Offset = "0x1F47CF0", VA = "0x181F48CF0")]
public InitSubdivideMeshData(SubdivideMeshData subdivideData, PCIKHFEIHGO mesh)
{
NativeList<int> elflbeckfef = mesh.ELFLBECKFEF;
this.srcIndices = elflbeckfef;
NativeList<int> origIndices = subdivideData.origIndices;
this.destIndices = origIndices;
}
// Token: 0x06006ED4 RID: 28372 RVA: 0x001856D4 File Offset: 0x001838D4
[Token(Token = "0x6006ED4")]
[Address(RVA = "0x1F48C60", Offset = "0x1F47C60", VA = "0x181F48C60", Slot = "4")]
public void Execute()
{
int num = 0;
int num2;
if (num2 > 0)
{
num++;
}
}
// Token: 0x04004947 RID: 18759
[FieldOffset(Offset = "0x0")]
[Token(Token = "0x4004947")]
[ReadOnly]
public NativeList<int> srcIndices;
// Token: 0x04004948 RID: 18760
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x4004948")]
public NativeList<int> destIndices;
}
}
@@ -0,0 +1,41 @@
using System;
using Cpp2IlInjected;
namespace ClusterLOD
{
// Token: 0x02001353 RID: 4947
[Token(Token = "0x2001353")]
public struct MeshComponentInfo
{
// Token: 0x06006F1C RID: 28444 RVA: 0x00186840 File Offset: 0x00184A40
[Token(Token = "0x6006F1C")]
[Address(RVA = "0x1F49380", Offset = "0x1F48380", VA = "0x181F49380")]
public MeshComponentInfo(int startIndex, int indexCount, int startVertex, int vertexCount)
{
this.vertexCount = 0;
this.startIndex = startIndex;
this.indexCount = indexCount;
this.startVertex = startVertex;
}
// Token: 0x0400497C RID: 18812
[FieldOffset(Offset = "0x0")]
[Token(Token = "0x400497C")]
public int startVertex;
// Token: 0x0400497D RID: 18813
[FieldOffset(Offset = "0x4")]
[Token(Token = "0x400497D")]
public int startIndex;
// Token: 0x0400497E RID: 18814
[FieldOffset(Offset = "0x8")]
[Token(Token = "0x400497E")]
public int indexCount;
// Token: 0x0400497F RID: 18815
[FieldOffset(Offset = "0xC")]
[Token(Token = "0x400497F")]
public int vertexCount;
}
}
@@ -0,0 +1,76 @@
using System;
using Cpp2IlInjected;
using Unity.Collections;
namespace ClusterLOD
{
// Token: 0x0200134A RID: 4938
[Token(Token = "0x200134A")]
public class SubdivideMeshData : IDisposable
{
// Token: 0x06006ED0 RID: 28368 RVA: 0x0018563C File Offset: 0x0018383C
[Token(Token = "0x6006ED0")]
[Address(RVA = "0x1F4CAB0", Offset = "0x1F4BAB0", VA = "0x181F4CAB0")]
public void InitMemory(int numIndices, Allocator allocator)
{
bool flag;
if (!flag)
{
}
bool flag2;
if (flag2)
{
}
bool flag3;
if (flag3)
{
}
int num = 0;
this.origIndices = num;
bool flag4;
if (!flag4)
{
int num2 = 0;
int num3 = 0;
SubdivideMeshData.vertexMap = num2;
SubdivideMeshData.indexRemap = num3;
}
}
// Token: 0x06006ED1 RID: 28369 RVA: 0x0018567C File Offset: 0x0018387C
[Token(Token = "0x6006ED1")]
[Address(RVA = "0x1F4CA00", Offset = "0x1F4BA00", VA = "0x181F4CA00", Slot = "4")]
public void Dispose()
{
bool flag;
if (flag)
{
return;
}
}
// Token: 0x06006ED2 RID: 28370 RVA: 0x00185690 File Offset: 0x00183890
[Token(Token = "0x6006ED2")]
[Address(RVA = "0x412370", Offset = "0x411370", VA = "0x180412370")]
public SubdivideMeshData()
{
}
// Token: 0x04004943 RID: 18755
[Token(Token = "0x4004943")]
public static NativeMultiHashMap<int, int> vertexMap;
// Token: 0x04004944 RID: 18756
[Token(Token = "0x4004944")]
public static NativeArray<int> indexRemap;
// Token: 0x04004945 RID: 18757
[Token(Token = "0x4004945")]
private static int refCount;
// Token: 0x04004946 RID: 18758
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x4004946")]
public NativeList<int> origIndices;
}
}
@@ -0,0 +1,297 @@
using System;
using Cpp2IlInjected;
using Unity.Burst;
using Unity.Collections;
using Unity.Jobs;
using Unity.Mathematics;
using UnityEngine;
namespace ClusterLOD
{
// Token: 0x0200134C RID: 4940
[Token(Token = "0x200134C")]
[BurstCompile]
public struct SubdivideMeshJob : IJob
{
// Token: 0x06006ED5 RID: 28373 RVA: 0x001856EC File Offset: 0x001838EC
[Token(Token = "0x6006ED5")]
[Address(RVA = "0x1F4E2D0", Offset = "0x1F4D2D0", VA = "0x181F4E2D0")]
public SubdivideMeshJob(SubdivideMeshData subdiveData, PCIKHFEIHGO mesh, PCIKHFEIHGO additionalMesh, float maxEdgeSize, float maxDistance, Vector3 eyePos, float rootScale)
{
NativeList<float3> ddpnlakckdp = mesh.DDPNLAKCKDP;
this.srcVerts = ddpnlakckdp;
NativeArray<float3> cdpiecocian = mesh.CDPIECOCIAN;
this.srcNormals = cdpiecocian;
NativeArray<float4> nmfapcbmggf = mesh.NMFAPCBMGGF;
this.srcTangents = nmfapcbmggf;
NativeArray<float2> maeaklfbpmo = mesh.MAEAKLFBPMO;
this.srcUVs = maeaklfbpmo;
NativeArray<float4> pjnfmocjcal = mesh.PJNFMOCJCAL;
this.srcMaterialIndices = pjnfmocjcal;
NativeList<int> elflbeckfef = mesh.ELFLBECKFEF;
this.srcIndices = elflbeckfef;
NativeList<int> nativeList = subdiveData.origIndices;
this.origIndices = nativeList;
NativeList<float3> ddpnlakckdp2 = additionalMesh.DDPNLAKCKDP;
this.newVerts = ddpnlakckdp2;
NativeArray<float3> cdpiecocian2 = additionalMesh.CDPIECOCIAN;
this.maxEdgeSize = (float)0;
this.newNormals = cdpiecocian2;
NativeArray<float4> nmfapcbmggf2 = additionalMesh.NMFAPCBMGGF;
this.newTangents = nmfapcbmggf2;
NativeArray<float4> pjnfmocjcal2 = additionalMesh.PJNFMOCJCAL;
this.maxEdgeSizeSq = (float)0;
this.newMaterialIndices = pjnfmocjcal2;
NativeArray<float2> maeaklfbpmo2 = additionalMesh.MAEAKLFBPMO;
this.newUVs = maeaklfbpmo2;
NativeList<int> elflbeckfef2 = additionalMesh.ELFLBECKFEF;
this.newIndices = elflbeckfef2;
this.maxDistance = (float)0;
this.maxDistanceSq = (float)0;
float3 @float;
float z = @float.z;
this.rootScale = (float)0;
this.eyePos.z = z;
}
// Token: 0x06006ED6 RID: 28374 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006ED6")]
[Address(RVA = "0x1F4DEA0", Offset = "0x1F4CEA0", VA = "0x181F4DEA0")]
private float3 GetVert(int i)
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x06006ED7 RID: 28375 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006ED7")]
[Address(RVA = "0x1F4DF40", Offset = "0x1F4CF40", VA = "0x181F4DF40")]
private void SetupVertFromIndex(int i, out float3 newVert, out float3 newNormal, out float4 newTangent, out float4 newMatIdx, out float2 newUV)
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x06006ED8 RID: 28376 RVA: 0x00185800 File Offset: 0x00183A00
[Token(Token = "0x6006ED8")]
[Address(RVA = "0x1F4D170", Offset = "0x1F4C170", VA = "0x181F4D170")]
private int CreateVert(int i1, int i2)
{
int num = 0;
NativeArray<float3> nativeArray = this.newNormals;
int num3;
int num2 = num3 - 1;
nativeArray.m_Length = num;
bool flag;
if (flag)
{
this.newTangents.m_Buffer = num;
}
NativeArray<float4> nativeArray2 = this.newMaterialIndices;
this.newUVs.m_Buffer = num;
int num4;
num4 += num2;
return num4;
}
// Token: 0x06006ED9 RID: 28377 RVA: 0x00185854 File Offset: 0x00183A54
[Token(Token = "0x6006ED9")]
[Address(RVA = "0x1F4CF70", Offset = "0x1F4BF70", VA = "0x181F4CF70")]
private void AddTriangle(int i1, int i2, int i3)
{
float3 @float;
float z = @float.z;
float3 float2;
float z2 = float2.z;
float3 float3;
float z3 = float3.z;
}
// Token: 0x06006EDA RID: 28378 RVA: 0x00185878 File Offset: 0x00183A78
[Token(Token = "0x6006EDA")]
[Address(RVA = "0x1F4E120", Offset = "0x1F4D120", VA = "0x181F4E120")]
private bool ShouldSplit(int i1, int i2, float splitSizeSq)
{
/*
An exception occurred when decompiling this method (06006EDA)
ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Boolean ClusterLOD.SubdivideMeshJob::ShouldSplit(System.Int32,System.Int32,System.Single)
---> System.Exception: Basic block has to end with unconditional control flow.
{
Block_0:
stloc:float32(var_1_06, ldfld:float32(float3::z, ldloc:float3[exp:valuetype [Unity.Mathematics]Unity.Mathematics.float3&](var_0)))
stloc:float32(var_3_0D, ldfld:float32(float3::z, ldloc:float3[exp:valuetype [Unity.Mathematics]Unity.Mathematics.float3&](var_2)))
stloc:float32(var_4_19, ldfld:float32(float3::z, ldfld:float3[exp:valuetype [Unity.Mathematics]Unity.Mathematics.float3&](SubdivideMeshJob::eyePos, ldloc:valuetype ClusterLOD.SubdivideMeshJob&(this))))
}
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1852
at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 355
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
--- End of inner exception stack trace ---
at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1663
*/;
}
// Token: 0x06006EDB RID: 28379 RVA: 0x001858A4 File Offset: 0x00183AA4
[Token(Token = "0x6006EDB")]
[Address(RVA = "0x1F4CEB0", Offset = "0x1F4BEB0", VA = "0x181F4CEB0")]
private bool Add2SideSplitTriangle(int i1, int i2, int i3, float splitSizeSq, bool add)
{
bool flag;
if (!flag)
{
this.AddTriangle(i1, i2, i3);
}
int num = this.CreateVert(i1, i2);
this.AddTriangle(i1, i2, i3);
this.AddTriangle(i1, i2, i3);
return true;
}
// Token: 0x06006EDC RID: 28380 RVA: 0x001858DC File Offset: 0x00183ADC
[Token(Token = "0x6006EDC")]
[Address(RVA = "0x1F4CC50", Offset = "0x1F4BC50", VA = "0x181F4CC50")]
private bool Add1SideSplitTriangle(int i1, int i2, int i3, float splitSizeSq, bool add)
{
bool flag;
if (!flag)
{
}
bool flag2;
if (flag2)
{
float3 @float;
float z = @float.z;
float3 float2;
float z2 = float2.z;
float3 float3;
float z3 = float3.z;
int num = this.CreateVert(i3, i2);
}
int num2 = this.CreateVert(i1, i2);
return true;
}
// Token: 0x06006EDD RID: 28381 RVA: 0x00185924 File Offset: 0x00183B24
[Token(Token = "0x6006EDD")]
[Address(RVA = "0x1F4E2B0", Offset = "0x1F4D2B0", VA = "0x181F4E2B0")]
private void SwapOrder(int i1, int i2, int i3, out int i1o, out int i2o, out int i3o)
{
}
// Token: 0x06006EDE RID: 28382 RVA: 0x0000220F File Offset: 0x0000040F
[Token(Token = "0x6006EDE")]
[Address(RVA = "0x1F4D540", Offset = "0x1F4C540", VA = "0x181F4D540", Slot = "4")]
public void Execute()
{
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
}
// Token: 0x04004949 RID: 18761
[FieldOffset(Offset = "0x0")]
[Token(Token = "0x4004949")]
[ReadOnly]
private NativeList<float3> srcVerts;
// Token: 0x0400494A RID: 18762
[FieldOffset(Offset = "0x10")]
[Token(Token = "0x400494A")]
[ReadOnly]
private NativeArray<float3> srcNormals;
// Token: 0x0400494B RID: 18763
[FieldOffset(Offset = "0x20")]
[Token(Token = "0x400494B")]
[ReadOnly]
private NativeArray<float4> srcTangents;
// Token: 0x0400494C RID: 18764
[FieldOffset(Offset = "0x30")]
[Token(Token = "0x400494C")]
[ReadOnly]
private NativeArray<float2> srcUVs;
// Token: 0x0400494D RID: 18765
[FieldOffset(Offset = "0x40")]
[Token(Token = "0x400494D")]
[ReadOnly]
private NativeArray<float4> srcMaterialIndices;
// Token: 0x0400494E RID: 18766
[FieldOffset(Offset = "0x50")]
[Token(Token = "0x400494E")]
private NativeList<int> origIndices;
// Token: 0x0400494F RID: 18767
[FieldOffset(Offset = "0x60")]
[Token(Token = "0x400494F")]
private NativeList<int> srcIndices;
// Token: 0x04004950 RID: 18768
[FieldOffset(Offset = "0x70")]
[Token(Token = "0x4004950")]
private NativeList<float3> newVerts;
// Token: 0x04004951 RID: 18769
[FieldOffset(Offset = "0x80")]
[Token(Token = "0x4004951")]
private NativeArray<float3> newNormals;
// Token: 0x04004952 RID: 18770
[FieldOffset(Offset = "0x90")]
[Token(Token = "0x4004952")]
private NativeArray<float4> newTangents;
// Token: 0x04004953 RID: 18771
[FieldOffset(Offset = "0xA0")]
[Token(Token = "0x4004953")]
private NativeArray<float4> newMaterialIndices;
// Token: 0x04004954 RID: 18772
[FieldOffset(Offset = "0xB0")]
[Token(Token = "0x4004954")]
private NativeArray<float2> newUVs;
// Token: 0x04004955 RID: 18773
[FieldOffset(Offset = "0xC0")]
[Token(Token = "0x4004955")]
private NativeList<int> newIndices;
// Token: 0x04004956 RID: 18774
[FieldOffset(Offset = "0xD0")]
[Token(Token = "0x4004956")]
[ReadOnly]
private float maxEdgeSizeSq;
// Token: 0x04004957 RID: 18775
[FieldOffset(Offset = "0xD4")]
[Token(Token = "0x4004957")]
[ReadOnly]
public float maxDistanceSq;
// Token: 0x04004958 RID: 18776
[FieldOffset(Offset = "0xD8")]
[Token(Token = "0x4004958")]
[ReadOnly]
private float3 eyePos;
// Token: 0x04004959 RID: 18777
[FieldOffset(Offset = "0xE4")]
[Token(Token = "0x4004959")]
[ReadOnly]
private float rootScale;
// Token: 0x0400495A RID: 18778
[FieldOffset(Offset = "0xE8")]
[Token(Token = "0x400495A")]
[ReadOnly]
private float maxEdgeSize;
// Token: 0x0400495B RID: 18779
[FieldOffset(Offset = "0xEC")]
[Token(Token = "0x400495B")]
[ReadOnly]
public float maxDistance;
}
}