m
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user