using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.Serialization;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace Naelstrof.JigglePhysics.Plugin
{
public static class PluginInfo
{
public const string GUID = "Naelstrof.JigglePhysics";
public const string NAME = "Naelstrof.JigglePhysics";
public const string VERSION = "10.3.1";
public const string WEBSITE = "https://github.com/naelstrof/UnityJigglePhysics";
}
[BepInPlugin("Naelstrof.JigglePhysics", "Naelstrof.JigglePhysics", "10.3.1")]
public class Plugin : BaseUnityPlugin
{
}
}
namespace JigglePhysics
{
public static class CachedSphereCollider
{
private class DestroyListener : MonoBehaviour
{
private void OnDestroy()
{
_hasSphere = false;
}
}
private static bool _hasSphere;
private static SphereCollider _sphereCollider;
[RuntimeInitializeOnLoadMethod(/*Could not decode attribute arguments.*/)]
private static void Init()
{
if ((Object)(object)_sphereCollider != (Object)null)
{
if (Application.isPlaying)
{
Object.Destroy((Object)(object)_sphereCollider);
}
else
{
Object.DestroyImmediate((Object)(object)_sphereCollider);
}
}
_hasSphere = false;
_sphereCollider = null;
}
public static void EnableSphereCollider()
{
if (TryGet(out var collider))
{
((Collider)collider).enabled = true;
}
}
public static void DisableSphereCollider()
{
if (TryGet(out var collider))
{
((Collider)collider).enabled = false;
}
}
public static bool TryGet(out SphereCollider collider)
{
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Expected O, but got Unknown
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
if (_hasSphere)
{
collider = _sphereCollider;
return true;
}
GameObject val = null;
try
{
val = new GameObject("JiggleBoneSphereCollider", new Type[2]
{
typeof(SphereCollider),
typeof(DestroyListener)
})
{
hideFlags = (HideFlags)52
};
Object.DontDestroyOnLoad((Object)(object)val);
if (!val.TryGetComponent<SphereCollider>(ref _sphereCollider))
{
throw new UnityException("This should never happen...");
}
collider = _sphereCollider;
((Collider)collider).enabled = false;
_hasSphere = true;
return true;
}
catch
{
if (Object.op_Implicit((Object)(object)val))
{
if (Application.isPlaying)
{
Object.Destroy((Object)(object)val);
}
else
{
Object.DestroyImmediate((Object)(object)val);
}
}
_hasSphere = false;
collider = null;
throw;
}
}
}
[Serializable]
public enum JiggleUpdateMode
{
LateUpdate,
FixedUpdate
}
public interface IJiggleAdvancable
{
void Advance(float dt, Vector3 gravity, double timeAsDouble, double timeAsDoubleOneStepBack, SphereCollider sphereCollider);
}
public interface IJiggleBlendable
{
bool enabled { get; set; }
float blend { get; set; }
}
public class JiggleBone
{
public readonly bool hasTransform;
public readonly PositionSignal targetAnimatedBoneSignal;
public Vector3 currentFixedAnimatedBonePosition;
public bool hasParent;
public int parentID;
public bool hasChild;
public int childID;
public Quaternion boneRotationChangeCheck;
public Vector3 bonePositionChangeCheck;
public Quaternion lastValidPoseBoneRotation;
public float projectionAmount;
public Vector3 lastValidPoseBoneLocalPosition;
public float normalizedIndex;
public readonly Transform transform;
public readonly PositionSignal particleSignal;
public Vector3 workingPosition;
public Vector3? preTeleportPosition;
public Vector3 extrapolatedPosition;
public readonly bool shouldConfineAngle;
public Vector3 cachedPositionForPosing;
private Quaternion cachedRotationForPosing;
public Vector3 parentPosition;
public Vector3 parentPose;
private Vector3 cachedLerpedPositionForPosing;
public float cachedLengthToParent;
public void SetParentID(int? id)
{
hasParent = id.HasValue;
parentID = id.GetValueOrDefault(-1);
}
public void SetChildID(int? id)
{
hasChild = id.HasValue;
childID = id.GetValueOrDefault(-1);
}
public JiggleBone(List<JiggleBone> bones, Transform transform, JiggleBone parent, int? parentID, float projectionAmount = 1f)
{
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Unknown result type (might be due to invalid IL or missing references)
//IL_013c: Unknown result type (might be due to invalid IL or missing references)
this.transform = transform;
this.projectionAmount = projectionAmount;
Vector3 startPosition;
if ((Object)(object)transform != (Object)null)
{
transform.GetLocalPositionAndRotation(ref lastValidPoseBoneLocalPosition, ref lastValidPoseBoneRotation);
boneRotationChangeCheck = lastValidPoseBoneRotation;
bonePositionChangeCheck = lastValidPoseBoneLocalPosition;
startPosition = transform.position;
}
else
{
Vector3 position = parent.transform.position;
Vector3 val = parent.GetParentTransform(bones.ToArray()).InverseTransformPoint(position) * projectionAmount;
startPosition = parent.transform.TransformPoint(val);
lastValidPoseBoneLocalPosition = val;
lastValidPoseBoneRotation = Quaternion.identity;
boneRotationChangeCheck = default(Quaternion);
bonePositionChangeCheck = default(Vector3);
}
targetAnimatedBoneSignal = new PositionSignal(startPosition, Time.timeAsDouble);
particleSignal = new PositionSignal(startPosition, Time.timeAsDouble);
hasTransform = (Object)(object)transform != (Object)null;
shouldConfineAngle = hasTransform || this.projectionAmount != 0f;
currentFixedAnimatedBonePosition = default(Vector3);
normalizedIndex = 0f;
workingPosition = default(Vector3);
preTeleportPosition = null;
extrapolatedPosition = default(Vector3);
SetParentID(parentID);
SetChildID(null);
}
public void CalculateNormalizedIndex(List<JiggleBone> bones)
{
int num = 0;
bool flag = hasParent;
int index = parentID;
while (flag)
{
flag = bones[index].hasParent;
index = bones[index].parentID;
num++;
}
int num2 = 0;
flag = hasChild;
index = childID;
while (flag)
{
flag = bones[index].hasChild;
index = bones[index].childID;
num2++;
}
int num3 = num + num2;
float num4 = (float)num / (float)num3;
normalizedIndex = num4;
}
private Vector3 GetRealTransformPosition(JiggleBone[] bones)
{
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
if (!hasTransform)
{
JiggleBone jiggleBone = bones[parentID];
Transform parentTransform = jiggleBone.GetParentTransform(bones);
Vector3 position = jiggleBone.transform.position;
Vector3 val = position - ((Component)parentTransform).transform.position;
return position + val * projectionAmount;
}
return transform.position;
}
private Transform GetParentTransform(JiggleBone[] bones)
{
if (hasParent)
{
return bones[parentID].transform;
}
return transform.parent;
}
[Obsolete("Please use SetTargetAndResetToLastValidPose() instead.")]
public void SampleAndReset(JiggleBone[] bones)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
double timeAsDouble = Time.timeAsDouble;
Vector3 realTransformPosition = GetRealTransformPosition(bones);
particleSignal.FlattenSignal(timeAsDouble, realTransformPosition);
if (hasTransform)
{
transform.SetLocalPositionAndRotation(bonePositionChangeCheck, boneRotationChangeCheck);
}
}
public void ResetToLastValidPose()
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
if (hasTransform)
{
transform.SetLocalPositionAndRotation(lastValidPoseBoneLocalPosition, lastValidPoseBoneRotation);
}
}
public void SetTargetAndResetToLastValidPose(JiggleBone[] bones)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
double timeAsDouble = Time.timeAsDouble;
Vector3 realTransformPosition = GetRealTransformPosition(bones);
particleSignal.FlattenSignal(timeAsDouble, realTransformPosition);
if (hasTransform)
{
transform.SetLocalPositionAndRotation(bonePositionChangeCheck, boneRotationChangeCheck);
}
}
public void MatchAnimationInstantly(JiggleBone[] bones)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
double timeAsDouble = Time.timeAsDouble;
Vector3 realTransformPosition = GetRealTransformPosition(bones);
targetAnimatedBoneSignal.FlattenSignal(timeAsDouble, realTransformPosition);
particleSignal.FlattenSignal(timeAsDouble, realTransformPosition);
}
public void PrepareTeleport(JiggleBone[] bones)
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
preTeleportPosition = GetRealTransformPosition(bones);
}
public void FinishTeleport(JiggleBone[] bones)
{
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
if (!preTeleportPosition.HasValue)
{
MatchAnimationInstantly(bones);
return;
}
Vector3 realTransformPosition = GetRealTransformPosition(bones);
Vector3 val = realTransformPosition - preTeleportPosition.Value;
targetAnimatedBoneSignal.FlattenSignal(Time.timeAsDouble, realTransformPosition);
particleSignal.OffsetSignal(val);
workingPosition += val;
}
public void DebugDraw(JiggleBone[] bones, Color simulateColor, Color targetColor, bool interpolated)
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
if (hasParent)
{
if (interpolated)
{
Debug.DrawLine(extrapolatedPosition, bones[parentID].extrapolatedPosition, simulateColor, 0f, false);
}
else
{
Debug.DrawLine(workingPosition, bones[parentID].workingPosition, simulateColor, 0f, false);
}
Debug.DrawLine(currentFixedAnimatedBonePosition, bones[parentID].currentFixedAnimatedBonePosition, targetColor, 0f, false);
}
}
public Vector3 DeriveFinalSolvePosition(Vector3 offset, double timeAsDoubleOneStepBack)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
extrapolatedPosition = particleSignal.SamplePosition(timeAsDoubleOneStepBack) + offset;
return extrapolatedPosition;
}
public Vector3 GetCachedSolvePosition()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
return extrapolatedPosition;
}
public void ApplyValidPoseThenSampleTargetPose(JiggleBone[] bones, double timeAsDouble, bool animated)
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_013d: Unknown result type (might be due to invalid IL or missing references)
//IL_0143: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0156: Unknown result type (might be due to invalid IL or missing references)
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
//IL_0167: Unknown result type (might be due to invalid IL or missing references)
//IL_0194: Unknown result type (might be due to invalid IL or missing references)
//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
if (!hasTransform)
{
cachedPositionForPosing = GetRealTransformPosition(bones);
targetAnimatedBoneSignal.SetPosition(cachedPositionForPosing, timeAsDouble);
cachedLengthToParent = Vector3.Distance(cachedPositionForPosing, bones[parentID].cachedPositionForPosing);
return;
}
if (animated)
{
Vector3 val = default(Vector3);
Quaternion val2 = default(Quaternion);
transform.GetLocalPositionAndRotation(ref val, ref val2);
bool flag = boneRotationChangeCheck != val2;
bool flag2 = bonePositionChangeCheck != val;
if (!flag && !flag2)
{
transform.SetLocalPositionAndRotation(lastValidPoseBoneLocalPosition, lastValidPoseBoneRotation);
}
else if (flag && flag2)
{
transform.GetLocalPositionAndRotation(ref lastValidPoseBoneLocalPosition, ref lastValidPoseBoneRotation);
}
else if (flag)
{
lastValidPoseBoneRotation = transform.localRotation;
transform.localPosition = lastValidPoseBoneLocalPosition;
}
else
{
lastValidPoseBoneLocalPosition = transform.localPosition;
transform.localRotation = lastValidPoseBoneRotation;
}
}
else
{
transform.SetLocalPositionAndRotation(lastValidPoseBoneLocalPosition, lastValidPoseBoneRotation);
}
cachedPositionForPosing = transform.position;
targetAnimatedBoneSignal.SetPosition(cachedPositionForPosing, timeAsDouble);
if (!hasParent)
{
cachedLengthToParent = 0.1f;
}
else
{
cachedLengthToParent = Vector3.Distance(cachedPositionForPosing, bones[parentID].cachedPositionForPosing);
}
}
public void OnDrawGizmos(JiggleBone[] bones, JiggleSettingsBase jiggleSettings, bool isRoot = false)
{
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
if (!hasTransform || !((Object)(object)transform == (Object)null))
{
double timeAsDouble = Time.timeAsDouble;
Vector3 val = ((!isRoot && Application.isPlaying) ? particleSignal.SamplePosition(timeAsDouble - 0.019999999552965164) : (hasTransform ? transform.position : GetRealTransformPosition(bones)));
if (hasChild)
{
Gizmos.DrawLine(val, Application.isPlaying ? bones[childID].particleSignal.SamplePosition(timeAsDouble - 0.019999999552965164) : (bones[childID].hasTransform ? bones[childID].transform.position : bones[childID].GetRealTransformPosition(bones)));
}
if ((Object)(object)jiggleSettings != (Object)null)
{
Gizmos.DrawWireSphere(val, jiggleSettings.GetRadius(normalizedIndex));
}
}
}
public void PoseBonePreCache(JiggleBone[] bones, float blend)
{
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
if (hasTransform)
{
transform.GetPositionAndRotation(ref cachedPositionForPosing, ref cachedRotationForPosing);
}
else
{
JiggleBone jiggleBone = bones[parentID];
if (jiggleBone.hasParent)
{
JiggleBone jiggleBone2 = bones[jiggleBone.parentID];
Vector3 val = jiggleBone.cachedPositionForPosing;
Vector3 val2 = val - jiggleBone2.cachedPositionForPosing;
cachedPositionForPosing = val + val2 * projectionAmount;
}
else
{
Vector3 val3 = jiggleBone.cachedPositionForPosing;
Vector3 val4 = val3 - ((Component)jiggleBone.transform.parent).transform.position;
cachedPositionForPosing = val3 + val4 * projectionAmount;
}
}
cachedLerpedPositionForPosing = Vector3.LerpUnclamped(cachedPositionForPosing, extrapolatedPosition, blend);
}
public void PoseBone(JiggleBone[] bones, bool animated)
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
if (hasChild)
{
Vector3 val = cachedLerpedPositionForPosing;
JiggleBone jiggleBone = bones[childID];
Vector3 val2 = jiggleBone.cachedPositionForPosing;
Vector3 val3 = jiggleBone.cachedLerpedPositionForPosing;
Vector3 val4 = val2 - cachedPositionForPosing;
Vector3 val5 = val3 - val;
Quaternion val6 = Quaternion.FromToRotation(val4, val5);
if (hasParent)
{
transform.SetPositionAndRotation(val, val6 * cachedRotationForPosing);
}
else
{
transform.rotation = val6 * cachedRotationForPosing;
}
}
if (hasTransform && animated)
{
transform.GetLocalPositionAndRotation(ref bonePositionChangeCheck, ref boneRotationChangeCheck);
}
}
}
public class JiggleRigBuilder : MonoBehaviour, IJiggleAdvancable, IJiggleBlendable
{
[Serializable]
public class JiggleRig
{
[SerializeField]
[Tooltip("The root bone from which an individual JiggleRig will be constructed. The JiggleRig encompasses all children of the specified root.")]
[FormerlySerializedAs("target")]
private Transform rootTransform;
[Tooltip("The settings that the rig should update with, create them using the Create->JigglePhysics->Settings menu option.")]
public JiggleSettingsBase jiggleSettings;
[SerializeField]
[Tooltip("The list of transforms to ignore during the jiggle. Each bone listed will also ignore all the children of the specified bone.")]
private List<Transform> ignoredTransforms;
[SerializeField]
private Collider[] colliders;
[Tooltip("Turn this on if you animate the jiggle bones via Animator (or through script). ")]
public bool animated = true;
private int boneCount = 0;
private bool needsCollisions;
private int colliderCount;
[HideInInspector]
protected JiggleBone[] simulatedPoints;
[field: SerializeField]
[field: Range(0f, 1f)]
public float blend { get; set; } = 1f;
private bool initialized => simulatedPoints != null;
public void SetColliders(ICollection<Collider> newColliders)
{
colliders = newColliders.ToArray();
colliderCount = colliders.Length;
needsCollisions = colliders.Length != 0;
}
public Collider[] GetColliders()
{
return colliders;
}
protected void SetRootTransform(Transform newTransform)
{
rootTransform = newTransform;
if (initialized)
{
simulatedPoints = null;
Initialize();
}
}
public Transform GetRootTransform()
{
return rootTransform;
}
public JiggleRig(Transform rootTransform, JiggleSettingsBase jiggleSettings, ICollection<Transform> ignoredTransforms, ICollection<Collider> colliders)
{
this.rootTransform = rootTransform;
this.jiggleSettings = jiggleSettings;
this.ignoredTransforms = new List<Transform>(ignoredTransforms);
SetColliders(colliders);
Initialize();
}
[Obsolete("Please use SetTargetAndResetToLastValidPose() instead.")]
public void SampleAndReset()
{
for (int num = boneCount - 1; num >= 0; num--)
{
simulatedPoints[num].SetTargetAndResetToLastValidPose(simulatedPoints);
}
}
public void ResetToLastValidPose()
{
for (int num = boneCount - 1; num >= 0; num--)
{
simulatedPoints[num].ResetToLastValidPose();
}
}
public void MatchAnimationInstantly()
{
for (int num = boneCount - 1; num >= 0; num--)
{
simulatedPoints[num].MatchAnimationInstantly(simulatedPoints);
}
}
public bool GetInitialized()
{
return boneCount != 0;
}
public void SetTargetAndResetToLastValidPose()
{
for (int num = boneCount - 1; num >= 0; num--)
{
simulatedPoints[num].SetTargetAndResetToLastValidPose(simulatedPoints);
}
}
public void ApplyValidPoseThenSampleTargetPose(double timeAsDouble)
{
for (int i = 0; i < boneCount; i++)
{
simulatedPoints[i].ApplyValidPoseThenSampleTargetPose(simulatedPoints, timeAsDouble, animated);
}
}
public void StepSimulation(JiggleSettingsData data, double time, Vector3 acceleration, SphereCollider sphereCollider)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_0106: Unknown result type (might be due to invalid IL or missing references)
//IL_010e: Unknown result type (might be due to invalid IL or missing references)
//IL_0113: Unknown result type (might be due to invalid IL or missing references)
//IL_0118: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_0190: Unknown result type (might be due to invalid IL or missing references)
//IL_0197: Unknown result type (might be due to invalid IL or missing references)
//IL_019c: Unknown result type (might be due to invalid IL or missing references)
//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
//IL_01da: Unknown result type (might be due to invalid IL or missing references)
//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
//IL_0227: Unknown result type (might be due to invalid IL or missing references)
//IL_022e: Unknown result type (might be due to invalid IL or missing references)
//IL_0233: Unknown result type (might be due to invalid IL or missing references)
//IL_0235: Unknown result type (might be due to invalid IL or missing references)
//IL_0243: Unknown result type (might be due to invalid IL or missing references)
//IL_0248: Unknown result type (might be due to invalid IL or missing references)
//IL_03e7: Unknown result type (might be due to invalid IL or missing references)
//IL_03ee: Unknown result type (might be due to invalid IL or missing references)
//IL_03f3: Unknown result type (might be due to invalid IL or missing references)
//IL_03f8: Unknown result type (might be due to invalid IL or missing references)
//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0401: Unknown result type (might be due to invalid IL or missing references)
//IL_0407: Unknown result type (might be due to invalid IL or missing references)
//IL_040e: Unknown result type (might be due to invalid IL or missing references)
//IL_0413: Unknown result type (might be due to invalid IL or missing references)
//IL_0417: Unknown result type (might be due to invalid IL or missing references)
//IL_041c: Unknown result type (might be due to invalid IL or missing references)
//IL_0427: Unknown result type (might be due to invalid IL or missing references)
//IL_042c: Unknown result type (might be due to invalid IL or missing references)
//IL_0260: Unknown result type (might be due to invalid IL or missing references)
//IL_0267: Unknown result type (might be due to invalid IL or missing references)
//IL_026c: Unknown result type (might be due to invalid IL or missing references)
//IL_0271: Unknown result type (might be due to invalid IL or missing references)
//IL_0275: Unknown result type (might be due to invalid IL or missing references)
//IL_027a: Unknown result type (might be due to invalid IL or missing references)
//IL_027e: Unknown result type (might be due to invalid IL or missing references)
//IL_0285: Unknown result type (might be due to invalid IL or missing references)
//IL_028a: Unknown result type (might be due to invalid IL or missing references)
//IL_028e: Unknown result type (might be due to invalid IL or missing references)
//IL_0293: Unknown result type (might be due to invalid IL or missing references)
//IL_029e: Unknown result type (might be due to invalid IL or missing references)
//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
//IL_0327: Unknown result type (might be due to invalid IL or missing references)
//IL_0329: Unknown result type (might be due to invalid IL or missing references)
//IL_02c5: Unknown result type (might be due to invalid IL or missing references)
//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
//IL_02d1: Unknown result type (might be due to invalid IL or missing references)
//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
//IL_02da: Unknown result type (might be due to invalid IL or missing references)
//IL_02df: Unknown result type (might be due to invalid IL or missing references)
//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
//IL_02ef: Unknown result type (might be due to invalid IL or missing references)
//IL_02f8: Unknown result type (might be due to invalid IL or missing references)
//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0308: Unknown result type (might be due to invalid IL or missing references)
//IL_030d: Unknown result type (might be due to invalid IL or missing references)
//IL_030f: Unknown result type (might be due to invalid IL or missing references)
//IL_0311: Unknown result type (might be due to invalid IL or missing references)
//IL_0313: Unknown result type (might be due to invalid IL or missing references)
//IL_031d: Unknown result type (might be due to invalid IL or missing references)
//IL_0322: Unknown result type (might be due to invalid IL or missing references)
//IL_038b: Unknown result type (might be due to invalid IL or missing references)
//IL_0390: Unknown result type (might be due to invalid IL or missing references)
//IL_0397: Unknown result type (might be due to invalid IL or missing references)
//IL_0399: Unknown result type (might be due to invalid IL or missing references)
//IL_03ae: Unknown result type (might be due to invalid IL or missing references)
//IL_03b3: Unknown result type (might be due to invalid IL or missing references)
//IL_03b7: Unknown result type (might be due to invalid IL or missing references)
//IL_03bc: Unknown result type (might be due to invalid IL or missing references)
//IL_03c1: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < boneCount; i++)
{
JiggleBone jiggleBone = simulatedPoints[i];
jiggleBone.currentFixedAnimatedBonePosition = jiggleBone.targetAnimatedBoneSignal.SamplePosition(time);
if (!jiggleBone.hasParent)
{
jiggleBone.workingPosition = jiggleBone.currentFixedAnimatedBonePosition;
jiggleBone.parentPose = 2f * jiggleBone.currentFixedAnimatedBonePosition - simulatedPoints[jiggleBone.childID].currentFixedAnimatedBonePosition;
jiggleBone.parentPosition = jiggleBone.parentPose;
continue;
}
JiggleBone jiggleBone2 = simulatedPoints[jiggleBone.parentID];
jiggleBone.parentPose = jiggleBone2.currentFixedAnimatedBonePosition;
jiggleBone.parentPosition = jiggleBone2.workingPosition;
Vector3 current = jiggleBone.particleSignal.GetCurrent();
Vector3 val = current - jiggleBone.particleSignal.GetPrevious();
Vector3 val2 = val - (jiggleBone2.particleSignal.GetCurrent() - jiggleBone2.particleSignal.GetPrevious());
Vector3 val3 = val - val2;
jiggleBone.workingPosition = current + val3 * data.airDragOneMinus + val2 * data.frictionOneMinus + acceleration;
}
Vector3 val14 = default(Vector3);
Quaternion val15 = default(Quaternion);
Vector3 val16 = default(Vector3);
float num2 = default(float);
for (int j = 0; j < boneCount; j++)
{
JiggleBone jiggleBone3 = simulatedPoints[j];
if (!jiggleBone3.hasParent)
{
continue;
}
JiggleBone jiggleBone4 = simulatedPoints[jiggleBone3.parentID];
float cachedLengthToParent = jiggleBone3.cachedLengthToParent;
if (jiggleBone3.shouldConfineAngle)
{
Vector3 val4 = jiggleBone4.currentFixedAnimatedBonePosition - jiggleBone4.parentPose;
Vector3 val5 = jiggleBone4.workingPosition - jiggleBone4.parentPosition;
Quaternion val6 = Quaternion.FromToRotation(val4, val5);
Vector3 val7 = jiggleBone3.currentFixedAnimatedBonePosition - jiggleBone4.parentPose;
Vector3 val8 = val6 * val7;
float num = Vector3.Distance(jiggleBone3.workingPosition, jiggleBone4.parentPosition + val8);
num /= cachedLengthToParent;
num = Mathf.Min(num, 1f);
num = Mathf.Pow(num, data.doubleElasticitySoften);
jiggleBone3.workingPosition = Vector3.LerpUnclamped(jiggleBone3.workingPosition, jiggleBone4.parentPosition + val8, data.squaredAngleElasticity * num);
}
if (needsCollisions)
{
Vector3 val9 = jiggleBone3.workingPosition - jiggleBone4.workingPosition;
Vector3 normalized = ((Vector3)(ref val9)).normalized;
Vector3 val10 = Vector3.LerpUnclamped(jiggleBone3.workingPosition, jiggleBone4.workingPosition + normalized * cachedLengthToParent, data.squaredLengthElasticity);
if (jiggleBone3.hasChild)
{
JiggleBone jiggleBone5 = simulatedPoints[jiggleBone3.childID];
Vector3 val11 = jiggleBone3.workingPosition - jiggleBone5.workingPosition;
Vector3 normalized2 = ((Vector3)(ref val11)).normalized;
Vector3 val12 = Vector3.LerpUnclamped(jiggleBone3.workingPosition, jiggleBone5.workingPosition + normalized2 * jiggleBone5.cachedLengthToParent, data.squaredLengthElasticity);
val10 = (val10 + val12) / 2f;
}
jiggleBone3.workingPosition = val10;
for (int k = 0; k < colliderCount; k++)
{
Collider val13 = colliders[k];
sphereCollider.radius = jiggleSettings.GetRadius(jiggleBone3.normalizedIndex);
if (!(sphereCollider.radius <= 0f))
{
((Component)val13).transform.GetPositionAndRotation(ref val14, ref val15);
if (Physics.ComputePenetration((Collider)(object)sphereCollider, jiggleBone3.workingPosition, Quaternion.identity, val13, val14, val15, ref val16, ref num2))
{
jiggleBone3.workingPosition += val16 * num2;
}
}
}
}
else
{
Vector3 val17 = jiggleBone3.workingPosition - jiggleBone4.workingPosition;
Vector3 normalized3 = ((Vector3)(ref val17)).normalized;
jiggleBone3.workingPosition = Vector3.LerpUnclamped(jiggleBone3.workingPosition, jiggleBone4.workingPosition + normalized3 * cachedLengthToParent, data.squaredLengthElasticity);
}
}
}
public void WriteSimulatedStep(double timeAsDouble)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < boneCount; i++)
{
JiggleBone jiggleBone = simulatedPoints[i];
jiggleBone.particleSignal.SetPosition(jiggleBone.workingPosition, timeAsDouble);
}
}
public virtual void Initialize()
{
if (!((Object)(object)rootTransform == (Object)null))
{
List<JiggleBone> list = new List<JiggleBone>();
CreateSimulatedPoints(list, ignoredTransforms, rootTransform, null, null);
for (int i = 0; i < list.Count; i++)
{
list[i].CalculateNormalizedIndex(list);
}
simulatedPoints = list.ToArray();
boneCount = simulatedPoints.Length;
colliderCount = colliders.Length;
needsCollisions = colliderCount != 0;
}
}
internal void DeriveFinalSolve(double timeAsDoubleOneStepBack)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
Vector3 offset = simulatedPoints[0].cachedPositionForPosing - simulatedPoints[0].DeriveFinalSolvePosition(Vector3.zero, timeAsDoubleOneStepBack);
for (int i = 0; i < boneCount; i++)
{
simulatedPoints[i].DeriveFinalSolvePosition(offset, timeAsDoubleOneStepBack);
}
}
public void Pose(bool debugDraw, double timeAsDoubleOneStepBack, float blend)
{
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
DeriveFinalSolve(timeAsDoubleOneStepBack);
for (int i = 0; i < boneCount; i++)
{
simulatedPoints[i].PoseBonePreCache(simulatedPoints, blend);
}
for (int j = 0; j < boneCount; j++)
{
JiggleBone jiggleBone = simulatedPoints[j];
jiggleBone.PoseBone(simulatedPoints, animated);
if (debugDraw)
{
jiggleBone.DebugDraw(simulatedPoints, Color.red, Color.blue, interpolated: true);
}
}
}
public void PrepareTeleport()
{
for (int i = 0; i < boneCount; i++)
{
simulatedPoints[i].PrepareTeleport(simulatedPoints);
}
}
public void FinishTeleport()
{
for (int i = 0; i < boneCount; i++)
{
simulatedPoints[i].FinishTeleport(simulatedPoints);
}
}
public void OnDrawGizmos()
{
if (!initialized)
{
Initialize();
}
if (simulatedPoints == null || simulatedPoints.Length == 0)
{
return;
}
for (int i = 0; i < boneCount; i++)
{
if (simulatedPoints[i] == null)
{
return;
}
}
simulatedPoints[0].OnDrawGizmos(simulatedPoints, jiggleSettings, isRoot: true);
for (int j = 1; j < boneCount; j++)
{
simulatedPoints[j].OnDrawGizmos(simulatedPoints, jiggleSettings);
}
}
protected virtual void CreateSimulatedPoints(List<JiggleBone> outputPoints, ICollection<Transform> ignoredTransforms, Transform currentTransform, JiggleBone parentJiggleBone, int? parentJiggleBoneID)
{
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
JiggleBone jiggleBone = new JiggleBone(outputPoints, currentTransform, parentJiggleBone, parentJiggleBoneID);
outputPoints.Add(jiggleBone);
int num = outputPoints.Count - 1;
if (parentJiggleBoneID.HasValue)
{
outputPoints[parentJiggleBoneID.Value].SetChildID(outputPoints.Count - 1);
}
bool flag = false;
for (int i = 0; i < currentTransform.childCount; i++)
{
if (!ignoredTransforms.Contains(currentTransform.GetChild(i)))
{
flag = true;
CreateSimulatedPoints(outputPoints, ignoredTransforms, currentTransform.GetChild(i), jiggleBone, num);
}
}
if (flag)
{
return;
}
if (!jiggleBone.hasParent)
{
if ((Object)(object)jiggleBone.transform.parent == (Object)null)
{
throw new UnityException("Can't have a singular jiggle bone with no parents. That doesn't even make sense!");
}
outputPoints.Add(new JiggleBone(outputPoints, null, jiggleBone, num));
outputPoints[num].SetChildID(outputPoints.Count - 1);
}
else
{
outputPoints.Add(new JiggleBone(outputPoints, null, jiggleBone, num));
outputPoints[num].SetChildID(outputPoints.Count - 1);
}
}
}
public const float VERLET_TIME_STEP = 0.02f;
public const float MAX_CATCHUP_TIME = 0.08f;
internal const float SETTLE_TIME = 0.2f;
internal const float SQUARED_VERLET_TIME_STEP = 0.0004f;
internal static bool unitySubsystemFixedUpdateRegistration;
internal static bool unitySubsystemLateUpdateRegistration;
[Tooltip("Enables interpolation for the simulation, this should be set to LateUpdate unless you *really* need the simulation to only update on FixedUpdate.")]
[SerializeField]
private JiggleUpdateMode jiggleUpdateMode = JiggleUpdateMode.LateUpdate;
private JiggleRigLOD jiggleRigLOD;
public List<JiggleRig> jiggleRigs;
[Tooltip("An air force that is applied to the entire rig, this is useful to plug in some wind volumes from external sources.")]
public Vector3 wind;
[Tooltip("Draws some simple lines to show what the simulation is doing. Generally this should be disabled.")]
[SerializeField]
private bool debugDraw;
private double accumulation;
private float settleTimer;
[field: SerializeField]
[field: Range(0f, 1f)]
public float blend { get; set; } = 1f;
internal static bool GetUnityCurrentlyInitializingSubsystems()
{
return unitySubsystemFixedUpdateRegistration || unitySubsystemLateUpdateRegistration;
}
[RuntimeInitializeOnLoadMethod(/*Could not decode attribute arguments.*/)]
private static void Init()
{
unitySubsystemFixedUpdateRegistration = true;
unitySubsystemLateUpdateRegistration = true;
}
public void SetJiggleRigLOD(JiggleRigLOD lod)
{
if ((Object)(object)jiggleRigLOD != (Object)null)
{
jiggleRigLOD.RemoveTrackedJiggleRig(this);
}
jiggleRigLOD = lod;
if ((Object)(object)jiggleRigLOD != (Object)null)
{
jiggleRigLOD.AddTrackedJiggleRig(this);
}
}
public JiggleRigLOD GetJiggleRigLOD()
{
return jiggleRigLOD;
}
private void Start()
{
JiggleRigLOD jiggleRigLOD = default(JiggleRigLOD);
if (((Component)this).TryGetComponent<JiggleRigLOD>(ref jiggleRigLOD))
{
SetJiggleRigLOD(jiggleRigLOD);
}
}
public void SetJiggleUpdateMode(JiggleUpdateMode mode)
{
switch (jiggleUpdateMode)
{
case JiggleUpdateMode.LateUpdate:
JiggleRigHandler<JiggleRigLateUpdateHandler>.RemoveJiggleRigAdvancable(this);
break;
case JiggleUpdateMode.FixedUpdate:
JiggleRigHandler<JiggleRigFixedUpdateHandler>.RemoveJiggleRigAdvancable(this);
break;
default:
throw new ArgumentOutOfRangeException();
}
jiggleUpdateMode = mode;
switch (jiggleUpdateMode)
{
case JiggleUpdateMode.LateUpdate:
JiggleRigHandler<JiggleRigLateUpdateHandler>.AddJiggleRigAdvancable(this);
break;
case JiggleUpdateMode.FixedUpdate:
JiggleRigHandler<JiggleRigFixedUpdateHandler>.AddJiggleRigAdvancable(this);
break;
default:
throw new ArgumentOutOfRangeException();
}
}
private void Awake()
{
JiggleUpdateMode jiggleUpdateMode = this.jiggleUpdateMode;
if (1 == 0)
{
}
bool forceRegenerateJiggleTree = jiggleUpdateMode switch
{
JiggleUpdateMode.LateUpdate => unitySubsystemLateUpdateRegistration,
JiggleUpdateMode.FixedUpdate => unitySubsystemFixedUpdateRegistration,
_ => throw new ArgumentOutOfRangeException(),
};
if (1 == 0)
{
}
Initialize(forceRegenerateJiggleTree);
settleTimer = 0f;
}
private void OnEnable()
{
switch (jiggleUpdateMode)
{
case JiggleUpdateMode.LateUpdate:
JiggleRigHandler<JiggleRigLateUpdateHandler>.AddJiggleRigAdvancable(this);
break;
case JiggleUpdateMode.FixedUpdate:
JiggleRigHandler<JiggleRigFixedUpdateHandler>.AddJiggleRigAdvancable(this);
break;
default:
throw new ArgumentOutOfRangeException();
}
if (settleTimer > 0.2f)
{
FinishTeleport();
}
}
private void OnDisable()
{
switch (jiggleUpdateMode)
{
case JiggleUpdateMode.LateUpdate:
JiggleRigHandler<JiggleRigLateUpdateHandler>.RemoveJiggleRigAdvancable(this);
break;
case JiggleUpdateMode.FixedUpdate:
JiggleRigHandler<JiggleRigFixedUpdateHandler>.RemoveJiggleRigAdvancable(this);
break;
default:
throw new ArgumentOutOfRangeException();
}
if (settleTimer > 0.2f)
{
PrepareTeleport();
}
}
public void Initialize(bool forceRegenerateJiggleTree = false)
{
accumulation = Random.Range(0f, 0.02f);
if (jiggleRigs == null)
{
jiggleRigs = new List<JiggleRig>();
}
foreach (JiggleRig jiggleRig in jiggleRigs)
{
if (forceRegenerateJiggleTree || !jiggleRig.GetInitialized())
{
jiggleRig.Initialize();
}
}
}
public JiggleUpdateMode GetJiggleUpdateMode()
{
return jiggleUpdateMode;
}
public virtual void Advance(float deltaTime, Vector3 gravity, double timeAsDouble, double timeAsDoubleOneStepBack, SphereCollider sphereCollider)
{
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
//IL_0137: Unknown result type (might be due to invalid IL or missing references)
//IL_013c: Unknown result type (might be due to invalid IL or missing references)
//IL_0144: Unknown result type (might be due to invalid IL or missing references)
if (settleTimer < 0.2f)
{
settleTimer += deltaTime;
if (settleTimer >= 0.2f)
{
FinishTeleport();
}
return;
}
foreach (JiggleRig jiggleRig in jiggleRigs)
{
jiggleRig.ApplyValidPoseThenSampleTargetPose(timeAsDouble);
}
accumulation = Math.Min(accumulation + (double)deltaTime, 0.07999999821186066);
while (accumulation > 0.019999999552965164)
{
accumulation -= 0.019999999552965164;
double num = timeAsDouble - accumulation;
foreach (JiggleRig jiggleRig2 in jiggleRigs)
{
JiggleSettingsData data = jiggleRig2.jiggleSettings.GetData();
data.blend *= blend;
data.blend *= jiggleRig2.blend;
Vector3 acceleration = gravity * (data.gravityMultiplier * 0.0004f) + wind * (0.02f * data.airDrag);
jiggleRig2.StepSimulation(data, num, acceleration, sphereCollider);
}
foreach (JiggleRig jiggleRig3 in jiggleRigs)
{
jiggleRig3.WriteSimulatedStep(num);
}
}
foreach (JiggleRig jiggleRig4 in jiggleRigs)
{
JiggleSettingsData data2 = jiggleRig4.jiggleSettings.GetData();
jiggleRig4.Pose(debugDraw, timeAsDoubleOneStepBack, data2.blend * blend * jiggleRig4.blend);
}
}
public JiggleRig GetJiggleRig(Transform rootTransform)
{
foreach (JiggleRig jiggleRig in jiggleRigs)
{
if ((Object)(object)jiggleRig.GetRootTransform() == (Object)(object)rootTransform)
{
return jiggleRig;
}
}
return null;
}
public void PrepareTeleport()
{
foreach (JiggleRig jiggleRig in jiggleRigs)
{
jiggleRig.PrepareTeleport();
}
}
public void FinishTeleport()
{
foreach (JiggleRig jiggleRig in jiggleRigs)
{
jiggleRig.FinishTeleport();
}
}
public void MatchAnimationInstantly()
{
foreach (JiggleRig jiggleRig in jiggleRigs)
{
jiggleRig.MatchAnimationInstantly();
}
}
private void OnDrawGizmos()
{
if (jiggleRigs == null || !((Behaviour)this).enabled)
{
return;
}
foreach (JiggleRig jiggleRig in jiggleRigs)
{
jiggleRig.OnDrawGizmos();
}
}
private void OnDestroy()
{
if ((Object)(object)jiggleRigLOD != (Object)null)
{
jiggleRigLOD.RemoveTrackedJiggleRig(this);
}
}
private void OnValidate()
{
}
bool IJiggleBlendable.get_enabled()
{
return ((Behaviour)this).enabled;
}
void IJiggleBlendable.set_enabled(bool value)
{
((Behaviour)this).enabled = value;
}
}
internal class JiggleRigFixedUpdateHandler : JiggleRigHandler<JiggleRigFixedUpdateHandler>
{
private void FixedUpdate()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
CachedSphereCollider.EnableSphereCollider();
Vector3 gravity = Physics.gravity;
float deltaTime = Time.deltaTime;
double timeAsDouble = Time.timeAsDouble;
double timeAsDoubleOneStepBack = timeAsDouble - 0.019999999552965164;
if (!CachedSphereCollider.TryGet(out var collider))
{
throw new UnityException("Failed to create a sphere collider, this should never happen! Is a scene not loaded but a jiggle rig is?");
}
foreach (IJiggleAdvancable jiggleRig in JiggleRigHandler<JiggleRigFixedUpdateHandler>.jiggleRigs)
{
try
{
jiggleRig.Advance(deltaTime, gravity, timeAsDouble, timeAsDoubleOneStepBack, collider);
}
catch (Exception ex)
{
Debug.LogException(ex);
JiggleRigHandler<JiggleRigFixedUpdateHandler>.invalidAdvancables.Add(jiggleRig);
}
}
CachedSphereCollider.DisableSphereCollider();
JiggleRigBuilder.unitySubsystemFixedUpdateRegistration = false;
CommitRemovalOfInvalidAdvancables();
}
}
internal class JiggleRigHandler<T> : MonoBehaviour where T : MonoBehaviour
{
private static T instance;
protected static List<IJiggleAdvancable> jiggleRigs;
protected static HashSet<IJiggleAdvancable> invalidAdvancables;
protected void CommitRemovalOfInvalidAdvancables()
{
if (invalidAdvancables.Count != 0)
{
jiggleRigs.RemoveAll(IsInvalid);
}
}
private bool IsInvalid(IJiggleAdvancable jiggleRig)
{
return invalidAdvancables.Contains(jiggleRig);
}
private static void CreateInstanceIfNeeded()
{
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Expected O, but got Unknown
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)instance))
{
if (jiggleRigs == null)
{
jiggleRigs = new List<IJiggleAdvancable>();
}
if (invalidAdvancables == null)
{
invalidAdvancables = new HashSet<IJiggleAdvancable>();
}
GameObject val = new GameObject("JiggleRigHandler", new Type[1] { typeof(T) })
{
hideFlags = (HideFlags)52
};
if (!val.TryGetComponent<T>(ref instance))
{
throw new UnityException("Should never happen!");
}
Object.DontDestroyOnLoad((Object)(object)val);
}
}
private static void RemoveInstanceIfNeeded()
{
if (jiggleRigs.Count == 0 && Object.op_Implicit((Object)(object)instance))
{
jiggleRigs = null;
invalidAdvancables = null;
if (Application.isPlaying)
{
Object.Destroy((Object)(object)((Component)(object)instance).gameObject);
}
else
{
Object.DestroyImmediate((Object)(object)((Component)(object)instance).gameObject);
}
instance = default(T);
}
}
internal static void AddJiggleRigAdvancable(IJiggleAdvancable advancable)
{
CreateInstanceIfNeeded();
if (!jiggleRigs.Contains(advancable))
{
jiggleRigs.Add(advancable);
}
}
internal static void RemoveJiggleRigAdvancable(IJiggleAdvancable advancable)
{
if (!jiggleRigs.Contains(advancable))
{
RemoveInstanceIfNeeded();
return;
}
jiggleRigs.Remove(advancable);
RemoveInstanceIfNeeded();
}
private void OnDisable()
{
if ((Object)(object)instance == (Object)(object)this)
{
instance = default(T);
}
}
private void OnEnable()
{
if ((Object)(object)instance != (Object)(object)this && (Object)(object)instance != (Object)null)
{
if (Application.isPlaying)
{
Object.Destroy((Object)(object)((Component)this).gameObject);
}
else
{
Object.DestroyImmediate((Object)(object)((Component)this).gameObject);
}
}
}
}
internal class JiggleRigLateUpdateHandler : JiggleRigHandler<JiggleRigLateUpdateHandler>
{
private void LateUpdate()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
CachedSphereCollider.EnableSphereCollider();
Vector3 gravity = Physics.gravity;
float deltaTime = Time.deltaTime;
double timeAsDouble = Time.timeAsDouble;
double timeAsDoubleOneStepBack = timeAsDouble - 0.019999999552965164;
if (!CachedSphereCollider.TryGet(out var collider))
{
throw new UnityException("Failed to create a sphere collider, this should never happen! Is a scene not loaded but a jiggle rig is?");
}
foreach (IJiggleAdvancable jiggleRig in JiggleRigHandler<JiggleRigLateUpdateHandler>.jiggleRigs)
{
try
{
jiggleRig.Advance(deltaTime, gravity, timeAsDouble, timeAsDoubleOneStepBack, collider);
}
catch (SystemException ex)
{
Debug.LogException((Exception)ex);
JiggleRigHandler<JiggleRigLateUpdateHandler>.invalidAdvancables.Add(jiggleRig);
}
}
CachedSphereCollider.DisableSphereCollider();
JiggleRigBuilder.unitySubsystemLateUpdateRegistration = false;
CommitRemovalOfInvalidAdvancables();
}
}
[DisallowMultipleComponent]
public abstract class JiggleRigLOD : MonoBehaviour
{
protected List<IJiggleBlendable> jiggles;
protected bool wasActive = true;
protected virtual void Awake()
{
jiggles = new List<IJiggleBlendable>();
}
public virtual void AddTrackedJiggleRig(IJiggleBlendable blendable)
{
if (!jiggles.Contains(blendable))
{
jiggles.Add(blendable);
if (blendable.enabled != wasActive)
{
blendable.enabled = wasActive;
}
}
}
public virtual void RemoveTrackedJiggleRig(IJiggleBlendable blendable)
{
if (jiggles.Contains(blendable))
{
jiggles.Remove(blendable);
}
}
private void Update()
{
if (!CheckActive())
{
if (wasActive)
{
foreach (IJiggleBlendable jiggle in jiggles)
{
jiggle.enabled = false;
}
}
wasActive = false;
return;
}
if (!wasActive)
{
foreach (IJiggleBlendable jiggle2 in jiggles)
{
jiggle2.enabled = true;
}
}
wasActive = true;
}
protected abstract bool CheckActive();
private void OnDisable()
{
wasActive = false;
foreach (IJiggleBlendable jiggle in jiggles)
{
jiggle.enabled = false;
}
}
}
public class MonoBehaviorHider
{
public class JiggleRigLODRenderComponent : MonoBehaviour
{
public Action<bool> VisibilityChange;
public void OnBecameInvisible()
{
VisibilityChange?.Invoke(obj: false);
}
public void OnBecameVisible()
{
VisibilityChange?.Invoke(obj: true);
}
private void OnDisable()
{
VisibilityChange?.Invoke(obj: false);
}
}
}
public class JiggleRigRendererLOD : JiggleRigSimpleLOD
{
private class RendererSubscription
{
public bool visible;
public Action<bool> action;
public MonoBehaviorHider.JiggleRigLODRenderComponent rendererSubscription;
}
private RendererSubscription[] subscriptions;
private int subscriptionCount;
private bool lastVisibility;
public void ClearRenderers()
{
for (int i = 0; i < subscriptionCount; i++)
{
if ((Object)(object)subscriptions[i].rendererSubscription != (Object)null)
{
MonoBehaviorHider.JiggleRigLODRenderComponent rendererSubscription = subscriptions[i].rendererSubscription;
rendererSubscription.VisibilityChange = (Action<bool>)Delegate.Remove(rendererSubscription.VisibilityChange, subscriptions[i].action);
}
}
subscriptions = null;
subscriptionCount = 0;
}
public void SetRenderers(Renderer[] renderers)
{
ClearRenderers();
MonoBehaviorHider.JiggleRigLODRenderComponent jiggleRigLODRenderComponent = null;
subscriptionCount = renderers.Length;
subscriptions = new RendererSubscription[subscriptionCount];
for (int i = 0; i < subscriptionCount; i++)
{
Renderer val = renderers[i];
if (!Object.op_Implicit((Object)(object)val))
{
continue;
}
if (!((Component)val).TryGetComponent<MonoBehaviorHider.JiggleRigLODRenderComponent>(ref jiggleRigLODRenderComponent))
{
jiggleRigLODRenderComponent = ((Component)val).gameObject.AddComponent<MonoBehaviorHider.JiggleRigLODRenderComponent>();
}
int index = i;
Action<bool> action = delegate(bool visible)
{
if (index < 0 || index >= subscriptionCount)
{
Debug.LogError((object)("Index out of bounds: " + index + ". Valid range is 0 to " + (subscriptionCount - 1)));
}
else
{
subscriptions[index].visible = visible;
RevalulateVisiblity();
}
};
subscriptions[i] = new RendererSubscription
{
visible = val.isVisible,
action = action,
rendererSubscription = jiggleRigLODRenderComponent
};
MonoBehaviorHider.JiggleRigLODRenderComponent jiggleRigLODRenderComponent2 = jiggleRigLODRenderComponent;
jiggleRigLODRenderComponent2.VisibilityChange = (Action<bool>)Delegate.Combine(jiggleRigLODRenderComponent2.VisibilityChange, action);
}
RevalulateVisiblity();
}
private void Start()
{
if (subscriptions == null || subscriptionCount == 0)
{
SetRenderers(((Component)this).GetComponentsInChildren<Renderer>(true));
}
}
private void RevalulateVisiblity()
{
for (int i = 0; i < subscriptionCount; i++)
{
if (subscriptions[i].visible)
{
lastVisibility = true;
return;
}
}
lastVisibility = false;
}
protected override bool CheckActive()
{
if (!lastVisibility)
{
return false;
}
return base.CheckActive();
}
}
public class JiggleRigSimpleLOD : JiggleRigLOD
{
[Tooltip("Distance to disable the jiggle rig.")]
[SerializeField]
private float distance = 20f;
[Tooltip("Distance past distance from which it blends out rather than instantly disabling.")]
[SerializeField]
private float blend = 5f;
private static Camera currentCamera;
public void SetDistance(float newDistance)
{
distance = newDistance;
}
public void SetBlendDistance(float blendDistance)
{
blend = blendDistance;
}
protected virtual bool TryGetCamera(out Camera camera)
{
if (!Object.op_Implicit((Object)(object)currentCamera) || !((Component)currentCamera).CompareTag("MainCamera"))
{
currentCamera = Camera.main;
}
camera = currentCamera;
return Object.op_Implicit((Object)(object)currentCamera);
}
protected override bool CheckActive()
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
if (!TryGetCamera(out var camera))
{
return false;
}
Vector3 position = ((Component)this).transform.position;
float num = Vector3.Distance(((Component)camera).transform.position, position);
float num2 = (num - distance + blend) / blend;
num2 = Mathf.Clamp01(1f - num2);
foreach (IJiggleBlendable jiggle in jiggles)
{
jiggle.blend = num2;
}
return num < distance;
}
}
public struct JiggleSettingsData
{
private float _friction;
private float _airDrag;
private float _angleElasticity;
private float _lengthElasticity;
private float _elasticitySoften;
public float gravityMultiplier;
public float blend;
public float radiusMultiplier;
public float squaredAngleElasticity;
public float squaredLengthElasticity;
public float airDragOneMinus;
public float frictionOneMinus;
public float doubleElasticitySoften;
public float friction
{
get
{
return _friction;
}
set
{
_friction = value;
frictionOneMinus = 1f - _friction;
}
}
public float airDrag
{
get
{
return _airDrag;
}
set
{
_airDrag = value;
airDragOneMinus = 1f - _airDrag;
}
}
public float angleElasticity
{
get
{
return _angleElasticity;
}
set
{
_angleElasticity = value;
squaredAngleElasticity = _angleElasticity * _angleElasticity;
}
}
public float lengthElasticity
{
get
{
return _lengthElasticity;
}
set
{
_lengthElasticity = value;
squaredLengthElasticity = _lengthElasticity * _lengthElasticity;
}
}
public float elasticitySoften
{
get
{
return _elasticitySoften;
}
set
{
_elasticitySoften = value;
doubleElasticitySoften = _elasticitySoften * 2f;
}
}
public static JiggleSettingsData Lerp(JiggleSettingsData a, JiggleSettingsData b, float t)
{
JiggleSettingsData result = default(JiggleSettingsData);
result.gravityMultiplier = Mathf.Lerp(a.gravityMultiplier, b.gravityMultiplier, t);
result.friction = Mathf.Lerp(a.friction, b.friction, t);
result.angleElasticity = Mathf.Lerp(a.angleElasticity, b.angleElasticity, t);
result.blend = Mathf.Lerp(a.blend, b.blend, t);
result.airDrag = Mathf.Lerp(a.airDrag, b.airDrag, t);
result.lengthElasticity = Mathf.Lerp(a.lengthElasticity, b.lengthElasticity, t);
result.elasticitySoften = Mathf.Lerp(a.elasticitySoften, b.elasticitySoften, t);
result.radiusMultiplier = Mathf.Lerp(a.radiusMultiplier, b.radiusMultiplier, t);
return result;
}
}
[CreateAssetMenu(fileName = "JiggleSettings", menuName = "JigglePhysics/Settings", order = 1)]
public class JiggleSettings : JiggleSettingsBase
{
[SerializeField]
[Range(0f, 2f)]
[Tooltip("How much gravity to apply to the simulation, it is a multiplier of the Physics.gravity setting.")]
private float gravityMultiplier = 1f;
[SerializeField]
[Range(0f, 1f)]
[Tooltip("How much mechanical friction to apply, this is specifically how quickly oscillations come to rest.")]
private float friction = 0.4f;
[SerializeField]
[Range(0f, 1f)]
[Tooltip("How much angular force is applied to bring it to the target shape.")]
private float angleElasticity = 0.4f;
[SerializeField]
[Range(0f, 1f)]
[Tooltip("How much of the simulation should be expressed. A value of 0 would make the jiggle have zero effect. A value of 1 gives the full movement as intended. 0.5 would ")]
private float blend = 1f;
[FormerlySerializedAs("airFriction")]
[HideInInspector]
[SerializeField]
[Range(0f, 1f)]
[Tooltip("How much jiggled objects should get dragged behind by moving through the air. Or how \"thick\" the air is.")]
private float airDrag = 0.1f;
[HideInInspector]
[SerializeField]
[Range(0f, 1f)]
[Tooltip("How rigidly the rig holds its length. Low values cause lots of squash and stretch!")]
private float lengthElasticity = 0.8f;
[HideInInspector]
[SerializeField]
[Range(0f, 1f)]
[Tooltip("How much to allow free bone motion before engaging elasticity.")]
private float elasticitySoften = 0f;
[HideInInspector]
[SerializeField]
[Tooltip("How much radius points have, only used for collisions. Set to 0 to disable collisions")]
private float radiusMultiplier = 0f;
[HideInInspector]
[SerializeField]
[Tooltip("How the radius is expressed as a curve along the bone chain from root to child.")]
private AnimationCurve radiusCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[2]
{
new Keyframe(0f, 1f),
new Keyframe(1f, 0f)
});
public override JiggleSettingsData GetData()
{
JiggleSettingsData result = default(JiggleSettingsData);
result.gravityMultiplier = gravityMultiplier;
result.friction = friction;
result.airDrag = airDrag;
result.blend = blend;
result.angleElasticity = angleElasticity;
result.elasticitySoften = elasticitySoften;
result.lengthElasticity = lengthElasticity;
result.radiusMultiplier = radiusMultiplier;
return result;
}
public void SetData(JiggleSettingsData data)
{
gravityMultiplier = data.gravityMultiplier;
friction = data.friction;
angleElasticity = data.angleElasticity;
blend = data.blend;
airDrag = data.airDrag;
lengthElasticity = data.lengthElasticity;
elasticitySoften = data.elasticitySoften;
radiusMultiplier = data.radiusMultiplier;
}
public override float GetRadius(float normalizedIndex)
{
return radiusMultiplier * radiusCurve.Evaluate(normalizedIndex);
}
public void SetRadiusCurve(AnimationCurve curve)
{
radiusCurve = curve;
}
}
public class JiggleSettingsBase : ScriptableObject
{
public virtual JiggleSettingsData GetData()
{
return default(JiggleSettingsData);
}
public virtual float GetRadius(float normalizedIndex)
{
return 0f;
}
}
[CreateAssetMenu(fileName = "JiggleSettingsBlend", menuName = "JigglePhysics/Blend Settings", order = 1)]
public class JiggleSettingsBlend : JiggleSettingsBase
{
[Tooltip("The list of jiggle settings to blend between.")]
public List<JiggleSettings> blendSettings;
[Range(0f, 1f)]
[Tooltip("A value from 0 to 1 that linearly blends between all of the blendSettings.")]
private float normalizedBlend;
private JiggleSettingsData cachedData;
public void SetNormalizedBlend(float blend)
{
if (!Mathf.Approximately(blend, normalizedBlend))
{
normalizedBlend = blend;
Cache();
}
}
public float GetNormalizedBlend()
{
return normalizedBlend;
}
private void Cache()
{
int num = blendSettings.Count - 1;
float num2 = Mathf.Clamp01(normalizedBlend);
int num3 = Mathf.Clamp(Mathf.FloorToInt(num2 * (float)num), 0, num);
int index = Mathf.Clamp(Mathf.FloorToInt(num2 * (float)num) + 1, 0, num);
cachedData = JiggleSettingsData.Lerp(blendSettings[num3].GetData(), blendSettings[index].GetData(), Mathf.Clamp01(num2 * (float)num - (float)num3));
}
public override JiggleSettingsData GetData()
{
return cachedData;
}
public override float GetRadius(float normalizedIndex)
{
float num = Mathf.Clamp01(normalizedBlend);
int num2 = Mathf.FloorToInt(num * (float)blendSettings.Count);
int num3 = Mathf.FloorToInt(num * (float)blendSettings.Count) + 1;
return Mathf.Lerp(blendSettings[Mathf.Clamp(num2, 0, blendSettings.Count - 1)].GetRadius(normalizedIndex), blendSettings[Mathf.Clamp(num3, 0, blendSettings.Count - 1)].GetRadius(normalizedIndex), Mathf.Clamp01(num * (float)blendSettings.Count - (float)num2));
}
private void Awake()
{
Cache();
}
private void OnValidate()
{
Cache();
}
}
public class JiggleSkin : MonoBehaviour, IJiggleAdvancable, IJiggleBlendable
{
[Serializable]
public class JiggleZone : JiggleRigBuilder.JiggleRig
{
[Tooltip("How large of a radius the zone should effect, in target-space meters. (Scaling the target will effect the radius.)")]
public float radius;
[HideInInspector]
[SerializeField]
private Transform target;
[field: SerializeField]
[field: Range(0f, 1f)]
public new float blend { get; set; } = 1f;
public JiggleZone(Transform rootTransform, JiggleSettingsBase jiggleSettings, ICollection<Transform> ignoredTransforms, ICollection<Collider> colliders)
: base(rootTransform, jiggleSettings, ignoredTransforms, colliders)
{
}
protected override void CreateSimulatedPoints(List<JiggleBone> outputPoints, ICollection<Transform> ignoredTransforms, Transform currentTransform, JiggleBone parentJiggleBone, int? parentID)
{
JiggleBone jiggleBone = new JiggleBone(outputPoints, currentTransform, null, null);
jiggleBone.SetChildID(1);
outputPoints.Add(jiggleBone);
outputPoints.Add(new JiggleBone(outputPoints, null, jiggleBone, 0, 0f));
}
public void TryUpdateOldSerialization()
{
if ((Object)(object)target != (Object)null && (Object)(object)GetRootTransform() == (Object)null)
{
SetRootTransform(target);
}
}
public override void Initialize()
{
TryUpdateOldSerialization();
base.Initialize();
}
public void JiggleZonePrecache()
{
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < simulatedPoints.Length; i++)
{
JiggleBone jiggleBone = simulatedPoints[i];
if (jiggleBone.hasTransform)
{
jiggleBone.cachedPositionForPosing = jiggleBone.transform.position;
}
else
{
jiggleBone.cachedPositionForPosing = simulatedPoints[jiggleBone.parentID].cachedPositionForPosing;
}
}
}
public void DebugDraw()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
Debug.DrawLine(GetPointSolve(), GetRootTransform().position, Color.cyan, 0f, false);
}
public Vector3 GetPointSolve()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
return simulatedPoints[1].GetCachedSolvePosition();
}
public void OnDrawGizmosSelected()
{
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)GetRootTransform() == (Object)null))
{
Gizmos.color = new Color(0.1f, 0.1f, 0.8f, 0.5f);
Gizmos.DrawWireSphere(GetRootTransform().position, radius * GetRootTransform().lossyScale.x);
}
}
}
[SerializeField]
[Tooltip("Enables interpolation for the simulation, this should be LateUpdate unless you *really* need the simulation to only update on FixedUpdate.")]
private JiggleUpdateMode jiggleUpdateMode = JiggleUpdateMode.LateUpdate;
public List<JiggleZone> jiggleZones;
[SerializeField]
[Tooltip("The list of skins to send the deformation data too, they should have JiggleSkin-compatible materials!")]
public List<SkinnedMeshRenderer> targetSkins;
[Tooltip("An air force that is applied to the entire rig, this is useful to plug in some wind volumes from external sources.")]
public Vector3 wind;
[SerializeField]
[Tooltip("Draws some simple lines to show what the simulation is doing. Generally this should be disabled.")]
private bool debugDraw = false;
private float settleTimer;
private double accumulation;
private MaterialPropertyBlock materialPropertyBlock;
private List<Vector4> packedVectors;
private int jiggleInfoNameID;
private JiggleRigLOD jiggleRigLOD;
[field: SerializeField]
[field: Range(0f, 1f)]
public float blend { get; set; } = 1f;
public void SetJiggleRigLOD(JiggleRigLOD lod)
{
if ((Object)(object)jiggleRigLOD != (Object)null)
{
jiggleRigLOD.RemoveTrackedJiggleRig(this);
}
jiggleRigLOD = lod;
if ((Object)(object)jiggleRigLOD != (Object)null)
{
jiggleRigLOD.AddTrackedJiggleRig(this);
}
}
public JiggleRigLOD GetJiggleRigLOD()
{
return jiggleRigLOD;
}
public void PrepareTeleport()
{
foreach (JiggleZone jiggleZone in jiggleZones)
{
jiggleZone.PrepareTeleport();
}
}
public void FinishTeleport()
{
foreach (JiggleZone jiggleZone in jiggleZones)
{
jiggleZone.FinishTeleport();
}
}
private void Awake()
{
settleTimer = 0f;
Initialize();
}
private void Start()
{
JiggleRigLOD jiggleRigLOD = default(JiggleRigLOD);
if (((Component)this).TryGetComponent<JiggleRigLOD>(ref jiggleRigLOD))
{
SetJiggleRigLOD(jiggleRigLOD);
}
}
private void OnEnable()
{
switch (jiggleUpdateMode)
{
case JiggleUpdateMode.LateUpdate:
JiggleRigHandler<JiggleRigLateUpdateHandler>.AddJiggleRigAdvancable(this);
break;
case JiggleUpdateMode.FixedUpdate:
JiggleRigHandler<JiggleRigFixedUpdateHandler>.AddJiggleRigAdvancable(this);
break;
default:
throw new ArgumentOutOfRangeException();
}
if (settleTimer >= 0.2f)
{
FinishTeleport();
}
}
private void OnDisable()
{
switch (jiggleUpdateMode)
{
case JiggleUpdateMode.LateUpdate:
JiggleRigHandler<JiggleRigLateUpdateHandler>.RemoveJiggleRigAdvancable(this);
break;
case JiggleUpdateMode.FixedUpdate:
JiggleRigHandler<JiggleRigFixedUpdateHandler>.RemoveJiggleRigAdvancable(this);
break;
default:
throw new ArgumentOutOfRangeException();
}
if (settleTimer >= 0.2f)
{
PrepareTeleport();
}
}
public void SetJiggleUpdateMode(JiggleUpdateMode mode)
{
switch (jiggleUpdateMode)
{
case JiggleUpdateMode.LateUpdate:
JiggleRigHandler<JiggleRigLateUpdateHandler>.RemoveJiggleRigAdvancable(this);
break;
case JiggleUpdateMode.FixedUpdate:
JiggleRigHandler<JiggleRigFixedUpdateHandler>.RemoveJiggleRigAdvancable(this);
break;
default:
throw new ArgumentOutOfRangeException();
}
jiggleUpdateMode = mode;
switch (jiggleUpdateMode)
{
case JiggleUpdateMode.LateUpdate:
JiggleRigHandler<JiggleRigLateUpdateHandler>.AddJiggleRigAdvancable(this);
break;
case JiggleUpdateMode.FixedUpdate:
JiggleRigHandler<JiggleRigFixedUpdateHandler>.AddJiggleRigAdvancable(this);
break;
default:
throw new ArgumentOutOfRangeException();
}
}
public void Initialize()
{
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Expected O, but got Unknown
accumulation = Random.Range(0f, 0.02f);
if (jiggleZones == null)
{
jiggleZones = new List<JiggleZone>();
}
foreach (JiggleZone jiggleZone in jiggleZones)
{
if (!jiggleZone.GetInitialized())
{
jiggleZone.Initialize();
}
}
jiggleInfoNameID = Shader.PropertyToID("_JiggleInfos");
packedVectors = new List<Vector4>();
materialPropertyBlock = new MaterialPropertyBlock();
}
public JiggleZone GetJiggleZone(Transform target)
{
foreach (JiggleZone jiggleZone in jiggleZones)
{
if ((Object)(object)jiggleZone.GetRootTransform() == (Object)(object)target)
{
return jiggleZone;
}
}
return null;
}
public JiggleUpdateMode GetJiggleUpdateMode()
{
return jiggleUpdateMode;
}
public void Advance(float deltaTime, Vector3 gravity, double timeAsDouble, double timeAsDoubleOneStepBack, SphereCollider sphereCollider)
{
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_010f: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: Unknown result type (might be due to invalid IL or missing references)
if (settleTimer < 0.2f)
{
settleTimer += deltaTime;
if (settleTimer >= 0.2f)
{
FinishTeleport();
}
return;
}
foreach (JiggleZone jiggleZone in jiggleZones)
{
jiggleZone.ApplyValidPoseThenSampleTargetPose(timeAsDouble);
}
accumulation = Math.Min(accumulation + (double)deltaTime, 0.07999999821186066);
while (accumulation > 0.019999999552965164)
{
accumulation -= 0.019999999552965164;
double num = timeAsDouble - accumulation;
foreach (JiggleZone jiggleZone2 in jiggleZones)
{
JiggleSettingsData data = jiggleZone2.jiggleSettings.GetData();
Vector3 acceleration = gravity * (data.gravityMultiplier * 0.0004f) + wind * (0.02f * data.airDrag);
jiggleZone2.StepSimulation(data, num, acceleration, sphereCollider);
}
foreach (JiggleZone jiggleZone3 in jiggleZones)
{
jiggleZone3.WriteSimulatedStep(num);
}
}
foreach (JiggleZone jiggleZone4 in jiggleZones)
{
jiggleZone4.JiggleZonePrecache();
}
foreach (JiggleZone jiggleZone5 in jiggleZones)
{
jiggleZone5.DeriveFinalSolve(timeAsDouble);
}
UpdateMesh();
if (!debugDraw)
{
return;
}
foreach (JiggleZone jiggleZone6 in jiggleZones)
{
jiggleZone6.DebugDraw();
}
}
private void UpdateMesh()
{
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
foreach (SkinnedMeshRenderer targetSkin in targetSkins)
{
packedVectors.Clear();
foreach (JiggleZone jiggleZone in jiggleZones)
{
Vector3 val = targetSkin.rootBone.InverseTransformPoint(jiggleZone.GetRootTransform().position);
Vector3 val2 = targetSkin.rootBone.InverseTransformPoint(jiggleZone.GetPointSolve());
packedVectors.Add(new Vector4(val.x, val.y, val.z, jiggleZone.radius * jiggleZone.GetRootTransform().lossyScale.x));
packedVectors.Add(new Vector4(val2.x, val2.y, val2.z, jiggleZone.jiggleSettings.GetData().blend * blend * jiggleZone.blend));
}
for (int i = packedVectors.Count; i < 16; i++)
{
packedVectors.Add(Vector4.zero);
}
((Renderer)targetSkin).GetPropertyBlock(materialPropertyBlock);
materialPropertyBlock.SetVectorArray(jiggleInfoNameID, packedVectors);
((Renderer)targetSkin).SetPropertyBlock(materialPropertyBlock);
}
}
private void OnValidate()
{
}
private void OnDestroy()
{
if ((Object)(object)jiggleRigLOD != (Object)null)
{
jiggleRigLOD.RemoveTrackedJiggleRig(this);
}
}
private void OnDrawGizmosSelected()
{
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
if (jiggleZones == null)
{
return;
}
Gizmos.color = new Color(0.1f, 0.1f, 0.8f, 0.5f);
foreach (JiggleZone jiggleZone in jiggleZones)
{
jiggleZone.OnDrawGizmosSelected();
}
}
public Vector3 ApplyJiggle(Vector3 toPoint, float blend, double timeAsDouble)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = toPoint;
foreach (JiggleZone jiggleZone in jiggleZones)
{
jiggleZone.DeriveFinalSolve(timeAsDouble);
Vector3 val2 = targetSkins[0].rootBone.InverseTransformPoint(jiggleZone.GetRootTransform().position);
Vector3 val3 = targetSkins[0].rootBone.InverseTransformPoint(jiggleZone.GetPointSolve());
Vector3 val4 = val3 - val2;
float num = Vector3.Distance(val2, targetSkins[0].rootBone.InverseTransformPoint(toPoint));
float num2 = 1f - Mathf.SmoothStep(0f, jiggleZone.radius * jiggleZone.GetRootTransform().lossyScale.x, num);
val += targetSkins[0].rootBone.TransformVector(val4) * jiggleZone.jiggleSettings.GetData().blend * blend * num2;
}
return val;
}
bool IJiggleBlendable.get_enabled()
{
return ((Behaviour)this).enabled;
}
void IJiggleBlendable.set_enabled(bool value)
{
((Behaviour)this).enabled = value;
}
}
public class PositionSignal
{
private struct Frame
{
public Vector3 position;
public double time;
}
private Frame previousFrame;
private Frame currentFrame;
public PositionSignal(Vector3 startPosition, double time)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
currentFrame = (previousFrame = new Frame
{
position = startPosition,
time = time
});
}
public void SetPosition(Vector3 position, double time)
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
previousFrame = currentFrame;
currentFrame = new Frame
{
position = position,
time = time
};
}
public void OffsetSignal(Vector3 offset)
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
previousFrame = new Frame
{
position = previousFrame.position + offset,
time = previousFrame.time
};
currentFrame = new Frame
{
position = currentFrame.position + offset,
time = previousFrame.time
};
}
public void FlattenSignal(double time, Vector3 position)
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
previousFrame = new Frame
{
position = position,
time = time - 0.1599999964237213
};
currentFrame = new Frame
{
position = position,
time = time - 0.07999999821186066
};
}
public Vector3 GetCurrent()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
return currentFrame.position;
}
public Vector3 GetPrevious()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
return previousFrame.position;
}
public Vector3 SamplePosition(double time)
{
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
double num = currentFrame.time - previousFrame.time;
if (num == 0.0)
{
return previousFrame.position;
}
double num2 = (time - previousFrame.time) / num;
return Vector3.LerpUnclamped(previousFrame.position, currentFrame.position, (float)num2);
}
}
}
namespace JigglePhysics.Modding
{
public class ModdedJiggleRigBuilder : JiggleRigBuilder
{
[SerializeField]
[HideInInspector]
private int _count = 0;
[SerializeField]
[HideInInspector]
private List<bool> _animated = new List<bool>();
[SerializeField]
[HideInInspector]
private List<ScriptableObject> _settings = new List<ScriptableObject>();
[SerializeField]
[HideInInspector]
private List<Transform> _root = new List<Transform>();
[SerializeField]
[HideInInspector]
private List<Transform> _ignored = new List<Transform>();
[SerializeField]
[HideInInspector]
private List<int> _ignored_count = new List<int>();
[SerializeField]
[HideInInspector]
private List<Collider> _colliders = new List<Collider>();
[SerializeField]
[HideInInspector]
private List<int> _colliders_count = new List<int>();
public void ResetData()
{
_count = 0;
_animated.Clear();
_settings.Clear();
_root.Clear();
_ignored.Clear();
_ignored_count.Clear();
_colliders.Clear();
_colliders_count.Clear();
}
public void ApplyJiggleRigData(bool clearStoredData = true)
{
if (_count == 0)
{
return;
}
if (jiggleRigs == null)
{
jiggleRigs = new List<JiggleRig>();
}
else if (jiggleRigs.Count > 0)
{
if (clearStoredData)
{
ResetData();
}
return;
}
int i = 0;
int num = 0;
int num2 = 0;
for (; i < _count; i++)
{
List<Transform> list = new List<Transform>();
for (int j = 0; j < _ignored_count[i]; j++)
{
list.Add(_ignored[num + j]);
}
List<Collider> list2 = new List<Collider>();
for (int k = 0; k < _colliders_count[i]; k++)
{
list2.Add(_colliders[num + k]);
}
JiggleRig jiggleRig = new JiggleRig(_root[i], _settings[i] as JiggleSettings, list, list2);
jiggleRig.animated = _animated[i];
jiggleRigs.Add(jiggleRig);
num += _ignored_count[i];
num2 += _colliders_count[i];
}
Initialize();
if (clearStoredData)
{
ResetData();
}
}
public void Awake()
{
ApplyJiggleRigData();
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}