510 lines
15 KiB
C#
510 lines
15 KiB
C#
using System;
|
|
using System.Collections;
|
|
using Cpp2IlInjected;
|
|
using UnityEngine;
|
|
|
|
namespace RootMotion.FinalIK
|
|
{
|
|
// Token: 0x02000465 RID: 1125
|
|
[Token(Token = "0x2000465")]
|
|
[RequireComponent(typeof(Animator))]
|
|
public class RagdollUtility : MonoBehaviour
|
|
{
|
|
// Token: 0x06002860 RID: 10336 RVA: 0x00059208 File Offset: 0x00057408
|
|
[Token(Token = "0x6002860")]
|
|
[Address(RVA = "0xCB40D0", Offset = "0xCB28D0", VA = "0x180CB40D0")]
|
|
public void EnableRagdoll()
|
|
{
|
|
if (this.rigidbones[0].r.isKinematic || this.animator.enabled)
|
|
{
|
|
base.StopAllCoroutines();
|
|
this.enableRagdollFlag = true;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002861 RID: 10337 RVA: 0x00059250 File Offset: 0x00057450
|
|
[Token(Token = "0x6002861")]
|
|
[Address(RVA = "0xCB3F80", Offset = "0xCB2780", VA = "0x180CB3F80")]
|
|
public void DisableRagdoll()
|
|
{
|
|
if (!this.rigidbones[0].r.isKinematic && !this.animator.enabled)
|
|
{
|
|
RagdollUtility.Child[] array = this.children;
|
|
int num = 0;
|
|
int length = array.Length;
|
|
if (num < length)
|
|
{
|
|
array[num].StoreLocalState();
|
|
num++;
|
|
}
|
|
base.StopAllCoroutines();
|
|
int num2;
|
|
RagdollUtility.<DisableRagdollSmooth>d__21 <DisableRagdollSmooth>d__ = new RagdollUtility.<DisableRagdollSmooth>d__21(num2);
|
|
num2 = 0;
|
|
<DisableRagdollSmooth>d__.<>4__this = this;
|
|
Coroutine coroutine = base.StartCoroutine(<DisableRagdollSmooth>d__);
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002862 RID: 10338 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002862")]
|
|
[Address(RVA = "0xCB4940", Offset = "0xCB3140", VA = "0x180CB4940")]
|
|
public void Start()
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x06002863 RID: 10339 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002863")]
|
|
[Address(RVA = "0xCB3F10", Offset = "0xCB2710", VA = "0x180CB3F10")]
|
|
private IEnumerator DisableRagdollSmooth()
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x06002864 RID: 10340 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002864")]
|
|
[Address(RVA = "0xCB4EB0", Offset = "0xCB36B0", VA = "0x180CB4EB0")]
|
|
private void Update()
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x06002865 RID: 10341 RVA: 0x000592D0 File Offset: 0x000574D0
|
|
[Token(Token = "0x6002865")]
|
|
[Address(RVA = "0xCB41C0", Offset = "0xCB29C0", VA = "0x180CB41C0")]
|
|
private void FixedUpdate()
|
|
{
|
|
if (!this.rigidbones[0].r.isKinematic)
|
|
{
|
|
bool enabled = this.animator.enabled;
|
|
if (!enabled && this.applyIkOnRagdoll != enabled)
|
|
{
|
|
this.FixTransforms(1f);
|
|
}
|
|
}
|
|
this.fixedFrame = true;
|
|
}
|
|
|
|
// Token: 0x06002866 RID: 10342 RVA: 0x00059328 File Offset: 0x00057528
|
|
[Token(Token = "0x6002866")]
|
|
[Address(RVA = "0xCB4250", Offset = "0xCB2A50", VA = "0x180CB4250")]
|
|
private void LateUpdate()
|
|
{
|
|
if (this.animator.updateMode != AnimatorUpdateMode.AnimatePhysics || (this.animator.updateMode == AnimatorUpdateMode.AnimatePhysics && this.fixedFrame))
|
|
{
|
|
if (!this.rigidbones[0].r.isKinematic && !this.animator.enabled)
|
|
{
|
|
RagdollUtility.Child[] array = this.children;
|
|
int num = 0;
|
|
int length = array.Length;
|
|
if (num >= length)
|
|
{
|
|
goto IL_7E;
|
|
}
|
|
array[num].StoreLocalState();
|
|
num++;
|
|
}
|
|
float num2 = this.ragdollWeight;
|
|
this.FixTransforms(num2);
|
|
}
|
|
IL_7E:
|
|
this.fixedFrame = false;
|
|
if (!this.ikUsed)
|
|
{
|
|
this.OnFinalPose();
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002867 RID: 10343 RVA: 0x000593D0 File Offset: 0x000575D0
|
|
[Token(Token = "0x6002867")]
|
|
[Address(RVA = "0xCB3EE0", Offset = "0xCB26E0", VA = "0x180CB3EE0")]
|
|
private void AfterLastIK()
|
|
{
|
|
if (this.ikUsed)
|
|
{
|
|
this.OnFinalPose();
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002868 RID: 10344 RVA: 0x000593F0 File Offset: 0x000575F0
|
|
[Token(Token = "0x6002868")]
|
|
[Address(RVA = "0xCB3E10", Offset = "0xCB2610", VA = "0x180CB3E10")]
|
|
private void AfterAnimation()
|
|
{
|
|
if (!this.rigidbones[0].r.isKinematic && !this.animator.enabled)
|
|
{
|
|
RagdollUtility.Child[] array = this.children;
|
|
int num = 0;
|
|
int length = array.Length;
|
|
if (num >= length)
|
|
{
|
|
return;
|
|
}
|
|
array[num].StoreLocalState();
|
|
num++;
|
|
}
|
|
float num2 = this.ragdollWeight;
|
|
this.FixTransforms(num2);
|
|
}
|
|
|
|
// Token: 0x06002869 RID: 10345 RVA: 0x0005945C File Offset: 0x0005765C
|
|
[Token(Token = "0x6002869")]
|
|
[Address(RVA = "0xCB44C0", Offset = "0xCB2CC0", VA = "0x180CB44C0")]
|
|
private void OnFinalPose()
|
|
{
|
|
if (this.rigidbones[0].r.isKinematic || this.animator.enabled)
|
|
{
|
|
RagdollUtility.Rigidbone[] array = this.rigidbones;
|
|
int num = 0;
|
|
int length = array.Length;
|
|
if (num < length)
|
|
{
|
|
array[num].RecordVelocity();
|
|
num++;
|
|
}
|
|
}
|
|
if (this.enableRagdollFlag)
|
|
{
|
|
this.RagdollEnabler();
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600286A RID: 10346 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x600286A")]
|
|
[Address(RVA = "0xCB45A0", Offset = "0xCB2DA0", VA = "0x180CB45A0")]
|
|
private void RagdollEnabler()
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x1700027F RID: 639
|
|
// (get) Token: 0x0600286B RID: 10347 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x1700027F")]
|
|
private bool isRagdoll
|
|
{
|
|
[Token(Token = "0x600286B")]
|
|
[Address(RVA = "0xCB5490", Offset = "0xCB3C90", VA = "0x180CB5490")]
|
|
get
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600286C RID: 10348 RVA: 0x000594CC File Offset: 0x000576CC
|
|
[Token(Token = "0x600286C")]
|
|
[Address(RVA = "0xCB48E0", Offset = "0xCB30E0", VA = "0x180CB48E0")]
|
|
private void RecordVelocities()
|
|
{
|
|
RagdollUtility.Rigidbone[] array = this.rigidbones;
|
|
int num = 0;
|
|
int length = array.Length;
|
|
if (num < length)
|
|
{
|
|
array[num].RecordVelocity();
|
|
num++;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000280 RID: 640
|
|
// (get) Token: 0x0600286D RID: 10349 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x17000280")]
|
|
private bool ikUsed
|
|
{
|
|
[Token(Token = "0x600286D")]
|
|
[Address(RVA = "0xCB5340", Offset = "0xCB3B40", VA = "0x180CB5340")]
|
|
get
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600286E RID: 10350 RVA: 0x00059504 File Offset: 0x00057704
|
|
[Token(Token = "0x600286E")]
|
|
[Address(RVA = "0xCB4E50", Offset = "0xCB3650", VA = "0x180CB4E50")]
|
|
private void StoreLocalState()
|
|
{
|
|
RagdollUtility.Child[] array = this.children;
|
|
int num = 0;
|
|
int length = array.Length;
|
|
if (num < length)
|
|
{
|
|
array[num].StoreLocalState();
|
|
num++;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600286F RID: 10351 RVA: 0x0005953C File Offset: 0x0005773C
|
|
[Token(Token = "0x600286F")]
|
|
[Address(RVA = "0xCB4150", Offset = "0xCB2950", VA = "0x180CB4150")]
|
|
private void FixTransforms(float weight)
|
|
{
|
|
RagdollUtility.Child[] array = this.children;
|
|
int num = 0;
|
|
int length = array.Length;
|
|
if (num < length)
|
|
{
|
|
array[num].FixTransform(weight);
|
|
num++;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002870 RID: 10352 RVA: 0x00059574 File Offset: 0x00057774
|
|
[Token(Token = "0x6002870")]
|
|
[Address(RVA = "0xCB4390", Offset = "0xCB2B90", VA = "0x180CB4390")]
|
|
private void OnDestroy()
|
|
{
|
|
IK ik = this.ik;
|
|
int num = 0;
|
|
if (ik != num)
|
|
{
|
|
IKSolver iksolver = this.ik.GetIKSolver();
|
|
IKSolver.UpdateDelegate onPostUpdate = iksolver.OnPostUpdate;
|
|
IKSolver.UpdateDelegate updateDelegate = new IKSolver.UpdateDelegate(this.AfterLastIK);
|
|
Delegate @delegate = Delegate.Remove(onPostUpdate, updateDelegate);
|
|
int num2 = 0;
|
|
if (@delegate != 0 && @delegate == 0)
|
|
{
|
|
throw new InvalidCastException();
|
|
}
|
|
iksolver.OnPostUpdate = num2;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06002871 RID: 10353 RVA: 0x000595E0 File Offset: 0x000577E0
|
|
[Token(Token = "0x6002871")]
|
|
[Address(RVA = "0xCB5240", Offset = "0xCB3A40", VA = "0x180CB5240")]
|
|
public RagdollUtility()
|
|
{
|
|
int num = 0;
|
|
this.applyVelocity = 1f;
|
|
this.applyAngularVelocity = 1f;
|
|
RagdollUtility.Rigidbone[] array = new RagdollUtility.Rigidbone[num];
|
|
this.rigidbones = array;
|
|
RagdollUtility.Child[] array2 = new RagdollUtility.Child[0];
|
|
this.children = array2;
|
|
IK[] array3 = new IK[0];
|
|
this.allIKComponents = array3;
|
|
bool[] array4 = new bool[0];
|
|
this.fixTransforms = array4;
|
|
bool[] array5 = new bool[0];
|
|
this.disabledIKComponents = array5;
|
|
base..ctor();
|
|
}
|
|
|
|
// Token: 0x040031CC RID: 12748
|
|
[FieldOffset(Offset = "0x18")]
|
|
[Token(Token = "0x40031CC")]
|
|
[Tooltip("If you have multiple IK components, then this should be the one that solves last each frame.")]
|
|
public IK ik;
|
|
|
|
// Token: 0x040031CD RID: 12749
|
|
[FieldOffset(Offset = "0x20")]
|
|
[Token(Token = "0x40031CD")]
|
|
[Tooltip("How long does it take to blend from ragdoll to animation?")]
|
|
public float ragdollToAnimationTime = 0.2f;
|
|
|
|
// Token: 0x040031CE RID: 12750
|
|
[FieldOffset(Offset = "0x24")]
|
|
[Token(Token = "0x40031CE")]
|
|
[Tooltip("If true, IK can be used on top of physical ragdoll simulation.")]
|
|
public bool applyIkOnRagdoll;
|
|
|
|
// Token: 0x040031CF RID: 12751
|
|
[FieldOffset(Offset = "0x28")]
|
|
[Token(Token = "0x40031CF")]
|
|
[Tooltip("How much velocity transfer from animation to ragdoll?")]
|
|
public float applyVelocity;
|
|
|
|
// Token: 0x040031D0 RID: 12752
|
|
[FieldOffset(Offset = "0x2C")]
|
|
[Token(Token = "0x40031D0")]
|
|
[Tooltip("How much angular velocity to transfer from animation to ragdoll?")]
|
|
public float applyAngularVelocity;
|
|
|
|
// Token: 0x040031D1 RID: 12753
|
|
[FieldOffset(Offset = "0x30")]
|
|
[Token(Token = "0x40031D1")]
|
|
private Animator animator;
|
|
|
|
// Token: 0x040031D2 RID: 12754
|
|
[FieldOffset(Offset = "0x38")]
|
|
[Token(Token = "0x40031D2")]
|
|
private RagdollUtility.Rigidbone[] rigidbones;
|
|
|
|
// Token: 0x040031D3 RID: 12755
|
|
[FieldOffset(Offset = "0x40")]
|
|
[Token(Token = "0x40031D3")]
|
|
private RagdollUtility.Child[] children;
|
|
|
|
// Token: 0x040031D4 RID: 12756
|
|
[FieldOffset(Offset = "0x48")]
|
|
[Token(Token = "0x40031D4")]
|
|
private bool enableRagdollFlag;
|
|
|
|
// Token: 0x040031D5 RID: 12757
|
|
[FieldOffset(Offset = "0x4C")]
|
|
[Token(Token = "0x40031D5")]
|
|
private AnimatorUpdateMode animatorUpdateMode;
|
|
|
|
// Token: 0x040031D6 RID: 12758
|
|
[FieldOffset(Offset = "0x50")]
|
|
[Token(Token = "0x40031D6")]
|
|
private IK[] allIKComponents;
|
|
|
|
// Token: 0x040031D7 RID: 12759
|
|
[FieldOffset(Offset = "0x58")]
|
|
[Token(Token = "0x40031D7")]
|
|
private bool[] fixTransforms;
|
|
|
|
// Token: 0x040031D8 RID: 12760
|
|
[FieldOffset(Offset = "0x60")]
|
|
[Token(Token = "0x40031D8")]
|
|
private float ragdollWeight;
|
|
|
|
// Token: 0x040031D9 RID: 12761
|
|
[FieldOffset(Offset = "0x64")]
|
|
[Token(Token = "0x40031D9")]
|
|
private float ragdollWeightV;
|
|
|
|
// Token: 0x040031DA RID: 12762
|
|
[FieldOffset(Offset = "0x68")]
|
|
[Token(Token = "0x40031DA")]
|
|
private bool fixedFrame;
|
|
|
|
// Token: 0x040031DB RID: 12763
|
|
[FieldOffset(Offset = "0x70")]
|
|
[Token(Token = "0x40031DB")]
|
|
private bool[] disabledIKComponents;
|
|
|
|
// Token: 0x02000466 RID: 1126
|
|
[Token(Token = "0x2000466")]
|
|
public class Rigidbone
|
|
{
|
|
// Token: 0x06002872 RID: 10354 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002872")]
|
|
[Address(RVA = "0x699DA0", Offset = "0x6985A0", VA = "0x180699DA0")]
|
|
public Rigidbone(Rigidbody r)
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x06002873 RID: 10355 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002873")]
|
|
[Address(RVA = "0x6999D0", Offset = "0x6981D0", VA = "0x1806999D0")]
|
|
public void RecordVelocity()
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x06002874 RID: 10356 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002874")]
|
|
[Address(RVA = "0x699B10", Offset = "0x698310", VA = "0x180699B10")]
|
|
public void WakeUp(float velocityWeight, float angularVelocityWeight)
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x040031DC RID: 12764
|
|
[FieldOffset(Offset = "0x10")]
|
|
[Token(Token = "0x40031DC")]
|
|
public Rigidbody r;
|
|
|
|
// Token: 0x040031DD RID: 12765
|
|
[FieldOffset(Offset = "0x18")]
|
|
[Token(Token = "0x40031DD")]
|
|
public Transform t;
|
|
|
|
// Token: 0x040031DE RID: 12766
|
|
[FieldOffset(Offset = "0x20")]
|
|
[Token(Token = "0x40031DE")]
|
|
public Collider collider;
|
|
|
|
// Token: 0x040031DF RID: 12767
|
|
[FieldOffset(Offset = "0x28")]
|
|
[Token(Token = "0x40031DF")]
|
|
public Joint joint;
|
|
|
|
// Token: 0x040031E0 RID: 12768
|
|
[FieldOffset(Offset = "0x30")]
|
|
[Token(Token = "0x40031E0")]
|
|
public Rigidbody c;
|
|
|
|
// Token: 0x040031E1 RID: 12769
|
|
[FieldOffset(Offset = "0x38")]
|
|
[Token(Token = "0x40031E1")]
|
|
public bool updateAnchor;
|
|
|
|
// Token: 0x040031E2 RID: 12770
|
|
[FieldOffset(Offset = "0x3C")]
|
|
[Token(Token = "0x40031E2")]
|
|
public Vector3 deltaPosition;
|
|
|
|
// Token: 0x040031E3 RID: 12771
|
|
[FieldOffset(Offset = "0x48")]
|
|
[Token(Token = "0x40031E3")]
|
|
public Quaternion deltaRotation;
|
|
|
|
// Token: 0x040031E4 RID: 12772
|
|
[FieldOffset(Offset = "0x58")]
|
|
[Token(Token = "0x40031E4")]
|
|
public float deltaTime;
|
|
|
|
// Token: 0x040031E5 RID: 12773
|
|
[FieldOffset(Offset = "0x5C")]
|
|
[Token(Token = "0x40031E5")]
|
|
public Vector3 lastPosition;
|
|
|
|
// Token: 0x040031E6 RID: 12774
|
|
[FieldOffset(Offset = "0x68")]
|
|
[Token(Token = "0x40031E6")]
|
|
public Quaternion lastRotation;
|
|
}
|
|
|
|
// Token: 0x02000467 RID: 1127
|
|
[Token(Token = "0x2000467")]
|
|
public class Child
|
|
{
|
|
// Token: 0x06002875 RID: 10357 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002875")]
|
|
[Address(RVA = "0x694030", Offset = "0x692830", VA = "0x180694030")]
|
|
public Child(Transform transform)
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x06002876 RID: 10358 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002876")]
|
|
[Address(RVA = "0x693E10", Offset = "0x692610", VA = "0x180693E10")]
|
|
public void FixTransform(float weight)
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x06002877 RID: 10359 RVA: 0x000020D3 File Offset: 0x000002D3
|
|
[Token(Token = "0x6002877")]
|
|
[Address(RVA = "0x693FD0", Offset = "0x6927D0", VA = "0x180693FD0")]
|
|
public void StoreLocalState()
|
|
{
|
|
throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
|
|
}
|
|
|
|
// Token: 0x040031E7 RID: 12775
|
|
[FieldOffset(Offset = "0x10")]
|
|
[Token(Token = "0x40031E7")]
|
|
public Transform t;
|
|
|
|
// Token: 0x040031E8 RID: 12776
|
|
[FieldOffset(Offset = "0x18")]
|
|
[Token(Token = "0x40031E8")]
|
|
public Vector3 localPosition;
|
|
|
|
// Token: 0x040031E9 RID: 12777
|
|
[FieldOffset(Offset = "0x24")]
|
|
[Token(Token = "0x40031E9")]
|
|
public Quaternion localRotation;
|
|
}
|
|
}
|
|
}
|