451 lines
15 KiB
C#
451 lines
15 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using Cpp2IlInjected;
|
|
using UnityEngine;
|
|
|
|
namespace Obi
|
|
{
|
|
// Token: 0x020004F2 RID: 1266
|
|
[Token(Token = "0x20004F2")]
|
|
[ExecuteInEditMode]
|
|
[DisallowMultipleComponent]
|
|
[AddComponentMenu("Physics/Obi/Obi Cloth Proxy")]
|
|
public class ObiClothProxy : MonoBehaviour
|
|
{
|
|
// Token: 0x17000307 RID: 775
|
|
// (get) Token: 0x06002C32 RID: 11314 RVA: 0x0005F378 File Offset: 0x0005D578
|
|
[Token(Token = "0x17000307")]
|
|
public bool SelfSkinning
|
|
{
|
|
[Token(Token = "0x6002C32")]
|
|
[Address(RVA = "0x10CDF30", Offset = "0x10CC730", VA = "0x1810CDF30")]
|
|
get
|
|
{
|
|
ObiClothBase obiClothBase = this.source;
|
|
int num = 0;
|
|
bool flag = obiClothBase != num;
|
|
if (!flag)
|
|
{
|
|
return flag;
|
|
}
|
|
GameObject gameObject = this.source.gameObject;
|
|
GameObject gameObject2 = base.gameObject;
|
|
return gameObject == gameObject2;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000308 RID: 776
|
|
// (get) Token: 0x06002C34 RID: 11316 RVA: 0x0005F47C File Offset: 0x0005D67C
|
|
// (set) Token: 0x06002C33 RID: 11315 RVA: 0x0005F3C0 File Offset: 0x0005D5C0
|
|
[Token(Token = "0x17000308")]
|
|
public ObiClothBase Proxy
|
|
{
|
|
[Token(Token = "0x6002C34")]
|
|
[Address(RVA = "0x4FC850", Offset = "0x4FB050", VA = "0x1804FC850")]
|
|
get
|
|
{
|
|
return this.source;
|
|
}
|
|
[Token(Token = "0x6002C33")]
|
|
[Address(RVA = "0x10CE000", Offset = "0x10CC800", VA = "0x1810CE000")]
|
|
set
|
|
{
|
|
ObiClothBase obiClothBase = this.source;
|
|
int num = 0;
|
|
if (obiClothBase != num)
|
|
{
|
|
ObiClothBase obiClothBase2 = this.source;
|
|
EventHandler eventHandler = new EventHandler(this.Source_OnAddedToSolver);
|
|
obiClothBase2.OnDeformableMeshSetup -= eventHandler;
|
|
ObiClothBase obiClothBase3 = this.source;
|
|
EventHandler eventHandler2 = new EventHandler(this.Source_OnRemovedFromSolver);
|
|
obiClothBase3.OnDeformableMeshTeardown -= eventHandler2;
|
|
}
|
|
this.source = value;
|
|
ObiClothBase obiClothBase4 = this.source;
|
|
int num2 = 0;
|
|
if (obiClothBase4 != num2)
|
|
{
|
|
ObiClothBase obiClothBase5 = this.source;
|
|
EventHandler eventHandler3 = new EventHandler(this.Source_OnAddedToSolver);
|
|
obiClothBase5.OnDeformableMeshSetup += eventHandler3;
|
|
ObiClothBase obiClothBase6 = this.source;
|
|
EventHandler eventHandler4 = new EventHandler(this.Source_OnRemovedFromSolver);
|
|
obiClothBase6.OnDeformableMeshTeardown += eventHandler4;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002C35 RID: 11317 RVA: 0x0005F490 File Offset: 0x0005D690
|
|
[Token(Token = "0x6002C35")]
|
|
[Address(RVA = "0x10CD070", Offset = "0x10CB870", VA = "0x1810CD070")]
|
|
private void OnEnable()
|
|
{
|
|
SkinnedMeshRenderer component = base.GetComponent<SkinnedMeshRenderer>();
|
|
this.skinnedMeshRenderer = component;
|
|
if (!this.SelfSkinning)
|
|
{
|
|
SkinnedMeshRenderer skinnedMeshRenderer = this.skinnedMeshRenderer;
|
|
int num = 0;
|
|
if (!(skinnedMeshRenderer == num))
|
|
{
|
|
ObiMeshTopology obiMeshTopology = this.targetTopology;
|
|
int num2 = 0;
|
|
if (!(obiMeshTopology != num2))
|
|
{
|
|
Debug.LogError("You need to provide a mesh topology in order to use a SkinnedMeshRenderer as a proxy target.");
|
|
}
|
|
Mesh input = this.targetTopology.input;
|
|
this.sharedMesh = input;
|
|
Mesh mesh = UnityEngine.Object.Instantiate<Mesh>(this.sharedMesh);
|
|
this.skinnedMesh = mesh;
|
|
int num3 = 0;
|
|
Mesh mesh2 = this.skinnedMesh;
|
|
BoneWeight[] array = new BoneWeight[num3];
|
|
mesh2.SetBoneWeightsImpl(array);
|
|
this.skinnedMesh.MarkDynamic();
|
|
if (!Application.isPlaying)
|
|
{
|
|
goto IL_CB;
|
|
}
|
|
SkinnedMeshRenderer skinnedMeshRenderer2 = this.skinnedMeshRenderer;
|
|
Mesh mesh3 = this.skinnedMesh;
|
|
skinnedMeshRenderer2.sharedMesh = mesh3;
|
|
}
|
|
this.InitializeWithRegularMesh();
|
|
}
|
|
IL_CB:
|
|
ObiClothBase obiClothBase = this.source;
|
|
int num4 = 0;
|
|
if (obiClothBase != num4)
|
|
{
|
|
ObiClothBase obiClothBase2 = this.source;
|
|
EventHandler eventHandler = new EventHandler(this.Source_OnAddedToSolver);
|
|
obiClothBase2.OnDeformableMeshSetup += eventHandler;
|
|
ObiClothBase obiClothBase3 = this.source;
|
|
EventHandler eventHandler2 = new EventHandler(this.Source_OnRemovedFromSolver);
|
|
obiClothBase3.OnDeformableMeshTeardown += eventHandler2;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002C36 RID: 11318 RVA: 0x0005F5C4 File Offset: 0x0005D7C4
|
|
[Token(Token = "0x6002C36")]
|
|
[Address(RVA = "0x10CCE70", Offset = "0x10CB670", VA = "0x1810CCE70")]
|
|
private void OnDisable()
|
|
{
|
|
if (!this.SelfSkinning)
|
|
{
|
|
MeshFilter meshFilter = this.meshFilter;
|
|
int num = 0;
|
|
if (meshFilter != num)
|
|
{
|
|
MeshFilter meshFilter2 = this.meshFilter;
|
|
Mesh mesh = this.sharedMesh;
|
|
meshFilter2.mesh = mesh;
|
|
}
|
|
SkinnedMeshRenderer skinnedMeshRenderer = this.skinnedMeshRenderer;
|
|
int num2 = 0;
|
|
if (skinnedMeshRenderer != num2)
|
|
{
|
|
SkinnedMeshRenderer skinnedMeshRenderer2 = this.skinnedMeshRenderer;
|
|
Mesh mesh2 = this.sharedMesh;
|
|
skinnedMeshRenderer2.sharedMesh = mesh2;
|
|
}
|
|
UnityEngine.Object.DestroyImmediate(this.skinnedMesh);
|
|
}
|
|
ObiClothBase obiClothBase = this.source;
|
|
int num3 = 0;
|
|
if (obiClothBase != num3)
|
|
{
|
|
ObiClothBase obiClothBase2 = this.source;
|
|
EventHandler eventHandler = new EventHandler(this.Source_OnAddedToSolver);
|
|
obiClothBase2.OnDeformableMeshSetup -= eventHandler;
|
|
ObiClothBase obiClothBase3 = this.source;
|
|
EventHandler eventHandler2 = new EventHandler(this.Source_OnRemovedFromSolver);
|
|
obiClothBase3.OnDeformableMeshTeardown -= eventHandler2;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002C37 RID: 11319 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002C37")]
|
|
[Address(RVA = "0x10CDB50", Offset = "0x10CC350", VA = "0x1810CDB50")]
|
|
private void UpdateTransformData()
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x06002C38 RID: 11320 RVA: 0x0005F698 File Offset: 0x0005D898
|
|
[Token(Token = "0x6002C38")]
|
|
[Address(RVA = "0x10CD630", Offset = "0x10CBE30", VA = "0x1810CD630")]
|
|
private void Source_OnAddedToSolver(object sender, EventArgs e)
|
|
{
|
|
this.UpdateTransformData();
|
|
bool selfSkinning = this.SelfSkinning;
|
|
ObiClothBase obiClothBase = this.source;
|
|
if (!selfSkinning)
|
|
{
|
|
IntPtr oniSolver = obiClothBase.solver.oniSolver;
|
|
ObiMeshTopology obiMeshTopology = this.targetTopology;
|
|
int num = 0;
|
|
if (obiMeshTopology != num)
|
|
{
|
|
ObiMeshTopology obiMeshTopology2 = this.targetTopology;
|
|
}
|
|
int num2 = 0;
|
|
Mesh mesh = this.sharedMesh;
|
|
float[] array = this.transformData;
|
|
int vertexCount = mesh.vertexCount;
|
|
int vertexCount2 = this.sharedMesh.vertexCount;
|
|
int num3 = 0;
|
|
ulong num4;
|
|
IntPtr intPtr = Oni.CreateDeformableMesh(oniSolver, (IntPtr)num2, (IntPtr)num3, array, (IntPtr)num4, vertexCount, vertexCount2);
|
|
this.deformableMesh = intPtr;
|
|
Mesh mesh2 = this.skinnedMesh;
|
|
this.GetMeshDataArrays(mesh2);
|
|
this.SetSkinnedMeshAnimationInfo();
|
|
}
|
|
IntPtr intPtr2 = obiClothBase.deformableMesh;
|
|
this.deformableMesh = intPtr2;
|
|
IntPtr triangleSkinMap = this.skinMap.triangleSkinMap;
|
|
IntPtr intPtr3 = obiClothBase.deformableMesh;
|
|
Oni.SetDeformableMeshSkinMap(this.deformableMesh, intPtr3, triangleSkinMap);
|
|
ObiSolver solver = this.source.solver;
|
|
EventHandler eventHandler = new EventHandler(this.Source_Solver_OnFrameEnd);
|
|
solver.OnFrameEnd += eventHandler;
|
|
ObiSolver solver2 = this.source.solver;
|
|
EventHandler eventHandler2 = new EventHandler(this.Source_Solver_OnStepEnd);
|
|
solver2.OnStepEnd += eventHandler2;
|
|
}
|
|
|
|
// Token: 0x06002C39 RID: 11321 RVA: 0x0005F7CC File Offset: 0x0005D9CC
|
|
[Token(Token = "0x6002C39")]
|
|
[Address(RVA = "0x10CD8A0", Offset = "0x10CC0A0", VA = "0x1810CD8A0")]
|
|
private void Source_OnRemovedFromSolver(object sender, EventArgs e)
|
|
{
|
|
ObiSolver solver = this.source.solver;
|
|
EventHandler eventHandler = new EventHandler(this.Source_Solver_OnFrameEnd);
|
|
solver.OnFrameEnd -= eventHandler;
|
|
ObiSolver solver2 = this.source.solver;
|
|
EventHandler eventHandler2 = new EventHandler(this.Source_Solver_OnStepEnd);
|
|
solver2.OnStepEnd -= eventHandler2;
|
|
if (!this.SelfSkinning)
|
|
{
|
|
ObiSolver solver3 = this.source.solver;
|
|
IntPtr intPtr = this.deformableMesh;
|
|
Oni.DestroyDeformableMesh(solver3.oniSolver, intPtr);
|
|
Oni.UnpinMemory(this.meshVerticesHandle);
|
|
Oni.UnpinMemory(this.meshNormalsHandle);
|
|
Oni.UnpinMemory(this.meshTangentsHandle);
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002C3A RID: 11322 RVA: 0x0005F86C File Offset: 0x0005DA6C
|
|
[Token(Token = "0x6002C3A")]
|
|
[Address(RVA = "0x10CD9F0", Offset = "0x10CC1F0", VA = "0x1810CD9F0")]
|
|
private void Source_Solver_OnFrameEnd(object sender, EventArgs e)
|
|
{
|
|
if (!this.SelfSkinning)
|
|
{
|
|
Mesh mesh = this.skinnedMesh;
|
|
int num = 0;
|
|
if (mesh != num && this.skinnedMesh.isReadable)
|
|
{
|
|
Mesh mesh2 = this.skinnedMesh;
|
|
Vector3[] array = this.meshVertices;
|
|
mesh2.vertices = array;
|
|
Mesh mesh3 = this.skinnedMesh;
|
|
Vector3[] array2 = this.meshNormals;
|
|
mesh3.normals = array2;
|
|
Mesh mesh4 = this.skinnedMesh;
|
|
Vector4[] array3 = this.meshTangents;
|
|
mesh4.tangents = array3;
|
|
this.skinnedMesh.RecalculateBounds();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002C3B RID: 11323 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002C3B")]
|
|
[Address(RVA = "0x10CDAE0", Offset = "0x10CC2E0", VA = "0x1810CDAE0")]
|
|
private void Source_Solver_OnStepEnd(object sender, EventArgs e)
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x06002C3C RID: 11324 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002C3C")]
|
|
[Address(RVA = "0x10CC5A0", Offset = "0x10CADA0", VA = "0x1810CC5A0", Slot = "4")]
|
|
public virtual void GetMeshDataArrays(Mesh mesh)
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x06002C3D RID: 11325 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002C3D")]
|
|
[Address(RVA = "0x10CCB40", Offset = "0x10CB340", VA = "0x1810CCB40")]
|
|
private void InitializeWithRegularMesh()
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x06002C3E RID: 11326 RVA: 0x0005F8FC File Offset: 0x0005DAFC
|
|
[Token(Token = "0x6002C3E")]
|
|
[Address(RVA = "0x10CCD50", Offset = "0x10CB550", VA = "0x1810CCD50")]
|
|
protected void InitializeWithSkinnedMesh()
|
|
{
|
|
Mesh input = this.targetTopology.input;
|
|
this.sharedMesh = input;
|
|
Mesh mesh = UnityEngine.Object.Instantiate<Mesh>(this.sharedMesh);
|
|
this.skinnedMesh = mesh;
|
|
int num = 0;
|
|
Mesh mesh2 = this.skinnedMesh;
|
|
BoneWeight[] array = new BoneWeight[num];
|
|
mesh2.SetBoneWeightsImpl(array);
|
|
this.skinnedMesh.MarkDynamic();
|
|
if (Application.isPlaying)
|
|
{
|
|
SkinnedMeshRenderer skinnedMeshRenderer = this.skinnedMeshRenderer;
|
|
Mesh mesh3 = this.skinnedMesh;
|
|
skinnedMeshRenderer.sharedMesh = mesh3;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002C3F RID: 11327 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002C3F")]
|
|
[Address(RVA = "0x10CD390", Offset = "0x10CBB90", VA = "0x1810CD390")]
|
|
protected void SetSkinnedMeshAnimationInfo()
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x06002C40 RID: 11328 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002C40")]
|
|
[Address(RVA = "0x10CC7D0", Offset = "0x10CAFD0", VA = "0x1810CC7D0")]
|
|
public void GrabSkeletonBones()
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x06002C41 RID: 11329 RVA: 0x0005F980 File Offset: 0x0005DB80
|
|
[Token(Token = "0x6002C41")]
|
|
[Address(RVA = "0x10CDE70", Offset = "0x10CC670", VA = "0x1810CDE70")]
|
|
public void Update()
|
|
{
|
|
this.UpdateTransformData();
|
|
IntPtr intPtr = this.deformableMesh;
|
|
int num = 0;
|
|
if (intPtr != (IntPtr)num)
|
|
{
|
|
float[] array = this.transformData;
|
|
Oni.SetDeformableMeshTransform(this.deformableMesh, array);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002C42 RID: 11330 RVA: 0x0005F9BC File Offset: 0x0005DBBC
|
|
[Token(Token = "0x6002C42")]
|
|
[Address(RVA = "0x10CDED0", Offset = "0x10CC6D0", VA = "0x1810CDED0")]
|
|
public ObiClothProxy()
|
|
{
|
|
float[] array = new float[16];
|
|
this.transformData = array;
|
|
base..ctor();
|
|
}
|
|
|
|
// Token: 0x040034AC RID: 13484
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x18")]
|
|
[Token(Token = "0x40034AC")]
|
|
public ObiTriangleSkinMap skinMap;
|
|
|
|
// Token: 0x040034AD RID: 13485
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x20")]
|
|
[Token(Token = "0x40034AD")]
|
|
public ObiMeshTopology targetTopology;
|
|
|
|
// Token: 0x040034AE RID: 13486
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x28")]
|
|
[Token(Token = "0x40034AE")]
|
|
[SerializeField]
|
|
[HideInInspector]
|
|
private ObiClothBase source;
|
|
|
|
// Token: 0x040034AF RID: 13487
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x30")]
|
|
[Token(Token = "0x40034AF")]
|
|
[HideInInspector]
|
|
public Mesh skinnedMesh;
|
|
|
|
// Token: 0x040034B0 RID: 13488
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x38")]
|
|
[Token(Token = "0x40034B0")]
|
|
[HideInInspector]
|
|
public Mesh sharedMesh;
|
|
|
|
// Token: 0x040034B1 RID: 13489
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x40")]
|
|
[Token(Token = "0x40034B1")]
|
|
protected int[] meshTriangles;
|
|
|
|
// Token: 0x040034B2 RID: 13490
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x48")]
|
|
[Token(Token = "0x40034B2")]
|
|
protected Vector3[] meshVertices;
|
|
|
|
// Token: 0x040034B3 RID: 13491
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x50")]
|
|
[Token(Token = "0x40034B3")]
|
|
protected Vector3[] meshNormals;
|
|
|
|
// Token: 0x040034B4 RID: 13492
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x58")]
|
|
[Token(Token = "0x40034B4")]
|
|
protected Vector4[] meshTangents;
|
|
|
|
// Token: 0x040034B5 RID: 13493
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x60")]
|
|
[Token(Token = "0x40034B5")]
|
|
protected IntPtr deformableMesh;
|
|
|
|
// Token: 0x040034B6 RID: 13494
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x68")]
|
|
[Token(Token = "0x40034B6")]
|
|
protected GCHandle meshTrianglesHandle;
|
|
|
|
// Token: 0x040034B7 RID: 13495
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x6C")]
|
|
[Token(Token = "0x40034B7")]
|
|
protected GCHandle meshVerticesHandle;
|
|
|
|
// Token: 0x040034B8 RID: 13496
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x70")]
|
|
[Token(Token = "0x40034B8")]
|
|
protected GCHandle meshNormalsHandle;
|
|
|
|
// Token: 0x040034B9 RID: 13497
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x74")]
|
|
[Token(Token = "0x40034B9")]
|
|
protected GCHandle meshTangentsHandle;
|
|
|
|
// Token: 0x040034BA RID: 13498
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x78")]
|
|
[Token(Token = "0x40034BA")]
|
|
private MeshRenderer meshRenderer;
|
|
|
|
// Token: 0x040034BB RID: 13499
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x80")]
|
|
[Token(Token = "0x40034BB")]
|
|
private MeshFilter meshFilter;
|
|
|
|
// Token: 0x040034BC RID: 13500
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x88")]
|
|
[Token(Token = "0x40034BC")]
|
|
private SkinnedMeshRenderer skinnedMeshRenderer;
|
|
|
|
// Token: 0x040034BD RID: 13501
|
|
[Cpp2IlInjected.FieldOffset(Offset = "0x90")]
|
|
[Token(Token = "0x40034BD")]
|
|
protected float[] transformData;
|
|
}
|
|
}
|