using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BoneLib.BoneMenu;
using FingerPhysics;
using HarmonyLib;
using Il2CppSLZ.Marrow;
using Il2CppSLZ.Marrow.Interaction;
using Il2CppSLZ.VRMK;
using MelonLoader;
using MelonLoader.Preferences;
using Microsoft.CodeAnalysis;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: MelonInfo(typeof(Main), "Finger Physics", "1.0.0", "EvroDev", "")]
[assembly: MelonGame("Stress Level Zero", "BONELAB")]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("FingerPhysics")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+517ac41acae92c317bcb1bcd1a75c96de6959066")]
[assembly: AssemblyProduct("FingerPhysics")]
[assembly: AssemblyTitle("FingerPhysics")]
[assembly: AssemblyVersion("1.0.0.0")]
[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 FingerPhysics
{
[HarmonyPatch(typeof(ArtRig))]
public static class ArtOutputUpdatePatch
{
public static Dictionary<ArtRig, Avatar> lastFoundAvatars = new Dictionary<ArtRig, Avatar>();
[HarmonyPatch("ArtOutputLateUpdate")]
[HarmonyPostfix]
public static void LateUpdatePostfix(ArtRig __instance)
{
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Invalid comparison between Unknown and I4
//IL_0306: Unknown result type (might be due to invalid IL or missing references)
//IL_0312: Unknown result type (might be due to invalid IL or missing references)
//IL_032f: Unknown result type (might be due to invalid IL or missing references)
//IL_033b: Unknown result type (might be due to invalid IL or missing references)
//IL_0358: Unknown result type (might be due to invalid IL or missing references)
//IL_0364: Unknown result type (might be due to invalid IL or missing references)
//IL_0389: Unknown result type (might be due to invalid IL or missing references)
//IL_0395: Unknown result type (might be due to invalid IL or missing references)
//IL_03b2: Unknown result type (might be due to invalid IL or missing references)
//IL_03be: Unknown result type (might be due to invalid IL or missing references)
//IL_03db: 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_040c: Unknown result type (might be due to invalid IL or missing references)
//IL_0418: Unknown result type (might be due to invalid IL or missing references)
//IL_0435: Unknown result type (might be due to invalid IL or missing references)
//IL_0441: Unknown result type (might be due to invalid IL or missing references)
//IL_045e: Unknown result type (might be due to invalid IL or missing references)
//IL_046a: Unknown result type (might be due to invalid IL or missing references)
//IL_048f: Unknown result type (might be due to invalid IL or missing references)
//IL_049b: Unknown result type (might be due to invalid IL or missing references)
//IL_04b8: Unknown result type (might be due to invalid IL or missing references)
//IL_04c4: Unknown result type (might be due to invalid IL or missing references)
//IL_04e1: Unknown result type (might be due to invalid IL or missing references)
//IL_04ed: Unknown result type (might be due to invalid IL or missing references)
//IL_0512: Unknown result type (might be due to invalid IL or missing references)
//IL_051e: Unknown result type (might be due to invalid IL or missing references)
//IL_053b: Unknown result type (might be due to invalid IL or missing references)
//IL_0547: Unknown result type (might be due to invalid IL or missing references)
//IL_0564: Unknown result type (might be due to invalid IL or missing references)
//IL_0570: 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_007c: 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_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: 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_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
//IL_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_0128: Unknown result type (might be due to invalid IL or missing references)
//IL_0145: Unknown result type (might be due to invalid IL or missing references)
//IL_0151: Unknown result type (might be due to invalid IL or missing references)
//IL_0176: Unknown result type (might be due to invalid IL or missing references)
//IL_0182: Unknown result type (might be due to invalid IL or missing references)
//IL_019f: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0205: Unknown result type (might be due to invalid IL or missing references)
//IL_0222: 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_024b: Unknown result type (might be due to invalid IL or missing references)
//IL_0257: Unknown result type (might be due to invalid IL or missing references)
//IL_027c: Unknown result type (might be due to invalid IL or missing references)
//IL_0288: Unknown result type (might be due to invalid IL or missing references)
//IL_02a5: Unknown result type (might be due to invalid IL or missing references)
//IL_02b1: Unknown result type (might be due to invalid IL or missing references)
//IL_02ce: 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)
foreach (PhysicalFingersController componentsInChild in ((Component)((Component)__instance).GetComponentInParent<PhysicsRig>()).GetComponentsInChildren<PhysicalFingersController>())
{
componentsInChild.OnApplyPoseToTransforms();
Avatar val = lastFoundAvatars[__instance];
if (!((Object)(object)val == (Object)null))
{
if ((int)componentsInChild.handedness == 1)
{
PhysicalFinger index = componentsInChild.index;
val.artTransforms.leftIndexProximal.SetPositionAndRotation(index.proximalArtOffset.position, index.proximalArtOffset.rotation);
val.artTransforms.leftIndexIntermediate.SetPositionAndRotation(index.intermediateArtOffset.position, index.intermediateArtOffset.rotation);
val.artTransforms.leftIndexDistal.SetPositionAndRotation(index.distalArtOffset.position, index.distalArtOffset.rotation);
index = componentsInChild.middle;
val.artTransforms.leftMiddleProximal.SetPositionAndRotation(index.proximalArtOffset.position, index.proximalArtOffset.rotation);
val.artTransforms.leftMiddleIntermediate.SetPositionAndRotation(index.intermediateArtOffset.position, index.intermediateArtOffset.rotation);
val.artTransforms.leftMiddleDistal.SetPositionAndRotation(index.distalArtOffset.position, index.distalArtOffset.rotation);
index = componentsInChild.ring;
val.artTransforms.leftRingProximal.SetPositionAndRotation(index.proximalArtOffset.position, index.proximalArtOffset.rotation);
val.artTransforms.leftRingIntermediate.SetPositionAndRotation(index.intermediateArtOffset.position, index.intermediateArtOffset.rotation);
val.artTransforms.leftRingDistal.SetPositionAndRotation(index.distalArtOffset.position, index.distalArtOffset.rotation);
index = componentsInChild.pinky;
val.artTransforms.leftLittleProximal.SetPositionAndRotation(index.proximalArtOffset.position, index.proximalArtOffset.rotation);
val.artTransforms.leftLittleIntermediate.SetPositionAndRotation(index.intermediateArtOffset.position, index.intermediateArtOffset.rotation);
val.artTransforms.leftLittleDistal.SetPositionAndRotation(index.distalArtOffset.position, index.distalArtOffset.rotation);
index = componentsInChild.thumb;
val.artTransforms.leftThumbProximal.SetPositionAndRotation(index.proximalArtOffset.position, index.proximalArtOffset.rotation);
val.artTransforms.leftThumbIntermediate.SetPositionAndRotation(index.intermediateArtOffset.position, index.intermediateArtOffset.rotation);
val.artTransforms.leftThumbDistal.SetPositionAndRotation(index.distalArtOffset.position, index.distalArtOffset.rotation);
}
else
{
PhysicalFinger index2 = componentsInChild.index;
val.artTransforms.rightIndexProximal.SetPositionAndRotation(index2.proximalArtOffset.position, index2.proximalArtOffset.rotation);
val.artTransforms.rightIndexIntermediate.SetPositionAndRotation(index2.intermediateArtOffset.position, index2.intermediateArtOffset.rotation);
val.artTransforms.rightIndexDistal.SetPositionAndRotation(index2.distalArtOffset.position, index2.distalArtOffset.rotation);
index2 = componentsInChild.middle;
val.artTransforms.rightMiddleProximal.SetPositionAndRotation(index2.proximalArtOffset.position, index2.proximalArtOffset.rotation);
val.artTransforms.rightMiddleIntermediate.SetPositionAndRotation(index2.intermediateArtOffset.position, index2.intermediateArtOffset.rotation);
val.artTransforms.rightMiddleDistal.SetPositionAndRotation(index2.distalArtOffset.position, index2.distalArtOffset.rotation);
index2 = componentsInChild.ring;
val.artTransforms.rightRingProximal.SetPositionAndRotation(index2.proximalArtOffset.position, index2.proximalArtOffset.rotation);
val.artTransforms.rightRingIntermediate.SetPositionAndRotation(index2.intermediateArtOffset.position, index2.intermediateArtOffset.rotation);
val.artTransforms.rightRingDistal.SetPositionAndRotation(index2.distalArtOffset.position, index2.distalArtOffset.rotation);
index2 = componentsInChild.pinky;
val.artTransforms.rightLittleProximal.SetPositionAndRotation(index2.proximalArtOffset.position, index2.proximalArtOffset.rotation);
val.artTransforms.rightLittleIntermediate.SetPositionAndRotation(index2.intermediateArtOffset.position, index2.intermediateArtOffset.rotation);
val.artTransforms.rightLittleDistal.SetPositionAndRotation(index2.distalArtOffset.position, index2.distalArtOffset.rotation);
index2 = componentsInChild.thumb;
val.artTransforms.rightThumbProximal.SetPositionAndRotation(index2.proximalArtOffset.position, index2.proximalArtOffset.rotation);
val.artTransforms.rightThumbIntermediate.SetPositionAndRotation(index2.intermediateArtOffset.position, index2.intermediateArtOffset.rotation);
val.artTransforms.rightThumbDistal.SetPositionAndRotation(index2.distalArtOffset.position, index2.distalArtOffset.rotation);
}
}
}
}
[HarmonyPatch("SetArtOutputAvatar")]
[HarmonyPostfix]
public static void SetAvatarPostfix(ArtRig __instance, Avatar avatar)
{
lastFoundAvatars[__instance] = avatar;
foreach (PhysicalFingersController componentsInChild in ((Component)((Component)__instance).GetComponentInParent<PhysicsRig>()).GetComponentsInChildren<PhysicalFingersController>())
{
componentsInChild.OnAvatarSwapped(avatar);
}
}
}
[HarmonyPatch(typeof(PhysicsRig))]
public static class PhysRigPatches
{
[HarmonyPatch("OnAwake")]
[HarmonyPostfix]
public static void OnAwake(PhysicsRig __instance)
{
if (Bone_Menu_Creator.ModEnabled)
{
PhysicalFingersController.CreatePhysicalFingers(__instance.leftHand.physHand);
PhysicalFingersController.CreatePhysicalFingers(__instance.rightHand.physHand);
}
}
}
public class Bone_Menu_Creator
{
private static MelonPreferences_Category category;
private static MelonPreferences_Entry<bool> modEnabled;
public static bool ModEnabled => modEnabled.Value;
public static void OnInitialize()
{
category = MelonPreferences.CreateCategory("FingerPhysics");
modEnabled = category.CreateEntry<bool>("Enabled", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
CreateBoneMenu();
}
public static void CreateBoneMenu()
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
Page val = Page.Root.CreatePage("Finger Physics", Color.white, 0, true);
val.CreateBool("Physics Fingers Enabled", Color.white, modEnabled.Value, (Action<bool>)delegate(bool b)
{
modEnabled.Value = b;
MelonPreferences.Save();
});
}
}
public class Main : MelonMod
{
public override void OnInitializeMelon()
{
Bone_Menu_Creator.OnInitialize();
}
}
[RegisterTypeInIl2Cpp]
public class PhysicalFinger : MonoBehaviour
{
public const float fingerSectionMass = 0.5f;
private PhysicalFingersController _controller;
public Rigidbody handBodyReference;
public Transform proximalTarget;
public Rigidbody proximalBody;
public CapsuleCollider proximalCol;
public ConfigurableJoint proximalJoint;
public Transform proximalArtOffset;
public Transform intermediateTarget;
public Rigidbody intermediateBody;
public CapsuleCollider intermediateCol;
public ConfigurableJoint intermediateJoint;
public Transform intermediateArtOffset;
public Transform distalTarget;
public Rigidbody distalBody;
public CapsuleCollider distalCol;
public ConfigurableJoint distalJoint;
public Transform distalArtOffset;
public PhysicalFingersController controllerReference
{
get
{
if (_controller == null)
{
_controller = ((Component)this).GetComponentInParent<PhysicalFingersController>();
}
return _controller;
}
}
private Quaternion handChildOffsetRotation => ((int)controllerReference.handedness == 1) ? Quaternion.Euler(270f, 90f, 0f) : Quaternion.Euler(90f, 270f, 0f);
public static PhysicalFinger CreateFinger(PhysHand handBody, Transform proxTarget, Transform intTarget, Transform distTarget, string name, Transform parent)
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Expected O, but got Unknown
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: 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_008f: 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_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: 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_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_0151: Unknown result type (might be due to invalid IL or missing references)
//IL_017e: Unknown result type (might be due to invalid IL or missing references)
//IL_018e: 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_01bb: Unknown result type (might be due to invalid IL or missing references)
//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0208: Unknown result type (might be due to invalid IL or missing references)
//IL_0219: Unknown result type (might be due to invalid IL or missing references)
//IL_021f: Unknown result type (might be due to invalid IL or missing references)
//IL_0224: Unknown result type (might be due to invalid IL or missing references)
//IL_022a: Unknown result type (might be due to invalid IL or missing references)
//IL_022f: Unknown result type (might be due to invalid IL or missing references)
//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
//IL_02ee: Unknown result type (might be due to invalid IL or missing references)
//IL_02f3: Unknown result type (might be due to invalid IL or missing references)
//IL_0302: Unknown result type (might be due to invalid IL or missing references)
//IL_030c: 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_0323: Unknown result type (might be due to invalid IL or missing references)
//IL_0328: Unknown result type (might be due to invalid IL or missing references)
//IL_032e: Unknown result type (might be due to invalid IL or missing references)
//IL_0333: Unknown result type (might be due to invalid IL or missing references)
//IL_0339: Unknown result type (might be due to invalid IL or missing references)
//IL_033e: Unknown result type (might be due to invalid IL or missing references)
//IL_03b0: Unknown result type (might be due to invalid IL or missing references)
//IL_03dd: Unknown result type (might be due to invalid IL or missing references)
GameObject val = new GameObject(name);
PhysicalFinger physicalFinger = val.AddComponent<PhysicalFinger>();
val.transform.SetParent(parent);
physicalFinger.proximalTarget = proxTarget;
physicalFinger.intermediateTarget = intTarget;
physicalFinger.distalTarget = distTarget;
PhysicalFinger physicalFinger2 = physicalFinger;
PhysicalFinger physicalFinger3 = physicalFinger;
PhysicalFinger physicalFinger4 = physicalFinger;
Rigidbody rbHand = handBody.rbHand;
Vector3 localPosition = intTarget.localPosition;
(GameObject, Rigidbody, CapsuleCollider, ConfigurableJoint, Transform) tuple = CreateFingerBone("Proximal", rbHand, proxTarget, ((Vector3)(ref localPosition)).magnitude, 0.01f, intTarget.localPosition / 2f, rotOverride: true, handBody.rbHand.rotation * physicalFinger.handChildOffsetRotation);
physicalFinger.proximalBody = tuple.Item2;
physicalFinger2.proximalCol = tuple.Item3;
physicalFinger3.proximalJoint = tuple.Item4;
physicalFinger4.proximalArtOffset = tuple.Item5;
((Joint)physicalFinger.proximalJoint).axis = Vector3.right;
physicalFinger.proximalJoint.angularXMotion = (ConfigurableJointMotion)1;
ConfigurableJoint obj = physicalFinger.proximalJoint;
SoftJointLimit val2 = default(SoftJointLimit);
((SoftJointLimit)(ref val2)).limit = 25f;
((SoftJointLimit)(ref val2)).bounciness = 0f;
((SoftJointLimit)(ref val2)).contactDistance = 0f;
obj.highAngularXLimit = val2;
ConfigurableJoint obj2 = physicalFinger.proximalJoint;
val2 = default(SoftJointLimit);
((SoftJointLimit)(ref val2)).limit = -25f;
((SoftJointLimit)(ref val2)).bounciness = 0f;
((SoftJointLimit)(ref val2)).contactDistance = 0f;
obj2.lowAngularXLimit = val2;
ConfigurableJoint obj3 = physicalFinger.proximalJoint;
JointDrive slerpDrive = default(JointDrive);
((JointDrive)(ref slerpDrive)).positionSpring = 2000f;
((JointDrive)(ref slerpDrive)).positionDamper = 200f;
JointDrive slerpDrive2 = physicalFinger.proximalJoint.slerpDrive;
((JointDrive)(ref slerpDrive)).maximumForce = ((JointDrive)(ref slerpDrive2)).maximumForce;
obj3.slerpDrive = slerpDrive;
physicalFinger4 = physicalFinger;
physicalFinger3 = physicalFinger;
physicalFinger2 = physicalFinger;
Rigidbody jointedBody2 = physicalFinger.proximalBody;
localPosition = distTarget.localPosition;
tuple = CreateFingerBone("Intermediate", jointedBody2, intTarget, ((Vector3)(ref localPosition)).magnitude, 0.01f, distTarget.localPosition / 2f, rotOverride: true, handBody.rbHand.rotation * physicalFinger.handChildOffsetRotation * intTarget.localRotation);
physicalFinger.intermediateBody = tuple.Item2;
physicalFinger4.intermediateCol = tuple.Item3;
physicalFinger3.intermediateJoint = tuple.Item4;
physicalFinger2.intermediateArtOffset = tuple.Item5;
physicalFinger.intermediateJoint.angularXMotion = (ConfigurableJointMotion)1;
physicalFinger.intermediateJoint.angularYMotion = (ConfigurableJointMotion)0;
physicalFinger.intermediateJoint.angularZMotion = (ConfigurableJointMotion)0;
ConfigurableJoint obj4 = physicalFinger.intermediateJoint;
val2 = default(SoftJointLimit);
((SoftJointLimit)(ref val2)).limit = 120f;
((SoftJointLimit)(ref val2)).bounciness = 0f;
((SoftJointLimit)(ref val2)).contactDistance = 0f;
obj4.highAngularXLimit = val2;
physicalFinger2 = physicalFinger;
physicalFinger3 = physicalFinger;
physicalFinger4 = physicalFinger;
Rigidbody jointedBody3 = physicalFinger.intermediateBody;
localPosition = distTarget.localPosition;
tuple = CreateFingerBone("Distal", jointedBody3, distTarget, ((Vector3)(ref localPosition)).magnitude, 0.01f, distTarget.localPosition / 2f, rotOverride: true, handBody.rbHand.rotation * physicalFinger.handChildOffsetRotation * intTarget.localRotation * distTarget.localRotation);
physicalFinger.distalBody = tuple.Item2;
physicalFinger2.distalCol = tuple.Item3;
physicalFinger3.distalJoint = tuple.Item4;
physicalFinger4.distalArtOffset = tuple.Item5;
physicalFinger.distalJoint.angularXMotion = (ConfigurableJointMotion)1;
physicalFinger.distalJoint.angularYMotion = (ConfigurableJointMotion)0;
physicalFinger.distalJoint.angularZMotion = (ConfigurableJointMotion)0;
ConfigurableJoint obj5 = physicalFinger.distalJoint;
val2 = default(SoftJointLimit);
((SoftJointLimit)(ref val2)).limit = 120f;
((SoftJointLimit)(ref val2)).bounciness = 0f;
((SoftJointLimit)(ref val2)).contactDistance = 0f;
obj5.highAngularXLimit = val2;
physicalFinger.UpdateFingerAnchors();
return physicalFinger;
static CapsuleCollider CreateCollider(GameObject gobj, int direction, float radius, float height, Vector3 center)
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
CapsuleCollider val3 = gobj.AddComponent<CapsuleCollider>();
val3.direction = direction;
val3.radius = radius;
val3.height = height;
val3.center = center;
return val3;
}
(GameObject, Rigidbody, CapsuleCollider, ConfigurableJoint, Transform) CreateFingerBone(string extraName, Rigidbody jointedBody, Transform targetTransform, float boneLength, float boneRadius, Vector3 boneColliderCenter, bool rotOverride = false, Quaternion overrideQ = default(Quaternion))
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Expected O, but got Unknown
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: 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_00ea: Unknown result type (might be due to invalid IL or missing references)
//IL_0100: 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)
//IL_0128: 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_0164: Unknown result type (might be due to invalid IL or missing references)
//IL_016b: Expected O, but got Unknown
//IL_0185: 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_005e: Unknown result type (might be due to invalid IL or missing references)
GameObject val4 = new GameObject(name + " " + extraName);
val4.transform.SetParent(parent);
val4.transform.position = targetTransform.position;
val4.transform.rotation = targetTransform.rotation;
if (rotOverride)
{
val4.transform.rotation = overrideQ;
}
val4.layer = 8;
Rigidbody val5 = val4.AddComponent<Rigidbody>();
val5.mass = 0.5f;
CapsuleCollider val6 = CreateCollider(val4, 0, boneRadius, boneLength + 2f * boneRadius, boneColliderCenter);
Physics.IgnoreCollision((Collider)(object)val6, (Collider)(object)handBody.fingersCol, true);
Physics.IgnoreCollision((Collider)(object)val6, (Collider)(object)handBody.handCol, true);
ConfigurableJoint val7 = val4.AddComponent<ConfigurableJoint>();
((Joint)val7).connectedBody = jointedBody;
LockMotion(val7);
((Joint)val7).anchor = Vector3.zero;
((Joint)val7).autoConfigureConnectedAnchor = false;
((Joint)val7).axis = Vector3.back;
val7.rotationDriveMode = (RotationDriveMode)1;
JointDrive slerpDrive3 = default(JointDrive);
((JointDrive)(ref slerpDrive3)).positionSpring = 1000f;
((JointDrive)(ref slerpDrive3)).positionDamper = 50f;
JointDrive slerpDrive4 = val7.slerpDrive;
((JointDrive)(ref slerpDrive3)).maximumForce = ((JointDrive)(ref slerpDrive4)).maximumForce;
val7.slerpDrive = slerpDrive3;
val7.projectionMode = (JointProjectionMode)1;
val7.projectionDistance = 0f;
val7.projectionAngle = 0f;
GameObject val8 = new GameObject("artOffset");
val8.transform.SetParent(val4.transform);
val8.transform.localPosition = Vector3.zero;
val8.transform.localRotation = Quaternion.identity;
return (val4, val5, val6, val7, val8.transform);
}
static void LockMotion(ConfigurableJoint joint)
{
joint.xMotion = (ConfigurableJointMotion)0;
joint.yMotion = (ConfigurableJointMotion)0;
joint.zMotion = (ConfigurableJointMotion)0;
}
}
public static void IgnoreFingers(PhysicalFinger finger1, PhysicalFinger finger2)
{
Physics.IgnoreCollision((Collider)(object)finger1.proximalCol, (Collider)(object)finger2.proximalCol);
Physics.IgnoreCollision((Collider)(object)finger1.proximalCol, (Collider)(object)finger2.intermediateCol);
Physics.IgnoreCollision((Collider)(object)finger1.proximalCol, (Collider)(object)finger2.distalCol);
Physics.IgnoreCollision((Collider)(object)finger1.intermediateCol, (Collider)(object)finger2.proximalCol);
Physics.IgnoreCollision((Collider)(object)finger1.intermediateCol, (Collider)(object)finger2.intermediateCol);
Physics.IgnoreCollision((Collider)(object)finger1.intermediateCol, (Collider)(object)finger2.distalCol);
Physics.IgnoreCollision((Collider)(object)finger1.distalCol, (Collider)(object)finger2.proximalCol);
Physics.IgnoreCollision((Collider)(object)finger1.distalCol, (Collider)(object)finger2.intermediateCol);
Physics.IgnoreCollision((Collider)(object)finger1.distalCol, (Collider)(object)finger2.distalCol);
}
public void SetCollisions(bool enabled)
{
proximalBody.detectCollisions = enabled;
intermediateBody.detectCollisions = enabled;
distalBody.detectCollisions = enabled;
}
public void UpdateFingerAnchors()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Invalid comparison between Unknown and I4
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: 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_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: 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_0071: 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_0092: 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_00b7: 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_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: 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_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_012b: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Unknown result type (might be due to invalid IL or missing references)
//IL_0151: Unknown result type (might be due to invalid IL or missing references)
((Joint)proximalJoint).connectedAnchor = (((int)controllerReference.handedness == 1) ? (Quaternion.Euler(270f, 90f, 0f) * proximalTarget.localPosition) : (Quaternion.Euler(90f, 270f, 0f) * proximalTarget.localPosition));
proximalCol.center = intermediateTarget.localPosition / 2f;
CapsuleCollider obj = proximalCol;
Vector3 localPosition = intermediateTarget.localPosition;
obj.height = ((Vector3)(ref localPosition)).magnitude + 0.02f;
((Joint)intermediateJoint).connectedAnchor = intermediateTarget.localPosition;
intermediateCol.center = distalTarget.localPosition / 2f;
CapsuleCollider obj2 = intermediateCol;
localPosition = distalTarget.localPosition;
obj2.height = ((Vector3)(ref localPosition)).magnitude + 0.02f;
((Joint)distalJoint).connectedAnchor = distalTarget.localPosition;
distalCol.center = distalTarget.localPosition / 2f;
CapsuleCollider obj3 = distalCol;
localPosition = distalTarget.localPosition;
obj3.height = ((Vector3)(ref localPosition)).magnitude + 0.02f;
}
public void UpdateArtTransforms(Transform proximal, Transform intermediate, Transform distal)
{
//IL_0008: 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_002c: 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_0050: 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)
proximalArtOffset.localPosition = proximal.localPosition;
proximalArtOffset.localRotation = proximal.localRotation;
intermediateArtOffset.localPosition = intermediate.localPosition;
intermediateArtOffset.localRotation = intermediate.localRotation;
distalArtOffset.localPosition = distal.localPosition;
distalArtOffset.localRotation = distal.localRotation;
}
public void UpdateJointTargets()
{
//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)
//IL_0023: 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_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_004e: 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_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)
proximalJoint.targetRotation = Quaternion.Inverse(proximalTarget.localRotation);
intermediateJoint.targetRotation = Quaternion.AngleAxis(Quaternion.Angle(Quaternion.identity, intermediateTarget.localRotation), Vector3.right);
distalJoint.targetRotation = Quaternion.AngleAxis(Quaternion.Angle(Quaternion.identity, distalTarget.localRotation), Vector3.right);
}
}
[RegisterTypeInIl2Cpp]
public class PhysicalFingersController : MonoBehaviour
{
public PhysHand targetPhysHand;
public ArtRig artOutputRig;
public HandPoseAnimator targetHandAnimator;
public PhysicalFinger thumb;
public PhysicalFinger index;
public PhysicalFinger middle;
public PhysicalFinger ring;
public PhysicalFinger pinky;
private bool _previousAttachedState = false;
public Handedness handedness => targetHandAnimator.handedness;
public void OnAvatarSwapped(Avatar avatar)
{
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Invalid comparison between Unknown and I4
thumb.UpdateFingerAnchors();
index.UpdateFingerAnchors();
middle.UpdateFingerAnchors();
ring.UpdateFingerAnchors();
pinky.UpdateFingerAnchors();
if ((int)handedness == 1)
{
thumb.UpdateArtTransforms(artOutputRig.artThumbLf1, artOutputRig.artThumbLf2, artOutputRig.artThumbLf3);
index.UpdateArtTransforms(artOutputRig.artFingerLf11, artOutputRig.artFingerLf12, artOutputRig.artFingerLf13);
middle.UpdateArtTransforms(artOutputRig.artFingerLf21, artOutputRig.artFingerLf22, artOutputRig.artFingerLf23);
ring.UpdateArtTransforms(artOutputRig.artFingerLf31, artOutputRig.artFingerLf32, artOutputRig.artFingerLf33);
pinky.UpdateArtTransforms(artOutputRig.artFingerLf41, artOutputRig.artFingerLf42, artOutputRig.artFingerLf43);
}
else
{
thumb.UpdateArtTransforms(artOutputRig.artThumbRt1, artOutputRig.artThumbRt2, artOutputRig.artThumbRt3);
index.UpdateArtTransforms(artOutputRig.artFingerRt11, artOutputRig.artFingerRt12, artOutputRig.artFingerRt13);
middle.UpdateArtTransforms(artOutputRig.artFingerRt21, artOutputRig.artFingerRt22, artOutputRig.artFingerRt23);
ring.UpdateArtTransforms(artOutputRig.artFingerRt31, artOutputRig.artFingerRt32, artOutputRig.artFingerRt33);
pinky.UpdateArtTransforms(artOutputRig.artFingerRt41, artOutputRig.artFingerRt42, artOutputRig.artFingerRt43);
}
}
public void OnApplyPoseToTransforms()
{
thumb.UpdateJointTargets();
index.UpdateJointTargets();
middle.UpdateJointTargets();
ring.UpdateJointTargets();
pinky.UpdateJointTargets();
bool flag = (Object)(object)targetPhysHand.hand.AttachedReceiver != (Object)null;
bool flag2 = (Object)(object)targetPhysHand.hand.HoveringReceiver != (Object)null;
bool flag3 = flag || flag2;
if (_previousAttachedState != ((Object)(object)targetPhysHand.hand.AttachedReceiver != (Object)null))
{
_previousAttachedState = (Object)(object)targetPhysHand.hand.AttachedReceiver != (Object)null || (Object)(object)targetPhysHand.hand.HoveringReceiver != (Object)null;
thumb.SetCollisions(!_previousAttachedState);
index.SetCollisions(!_previousAttachedState);
middle.SetCollisions(!_previousAttachedState);
ring.SetCollisions(!_previousAttachedState);
pinky.SetCollisions(!_previousAttachedState);
}
}
public static PhysicalFingersController CreatePhysicalFingers(PhysHand physHand)
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Invalid comparison between Unknown and I4
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Expected O, but got Unknown
GameObject val = new GameObject("PhysicalFingers Controller (" + (((int)physHand.hand.handedness == 1) ? "Left" : "Right") + ")");
PhysicalFingersController physicalFingersController = val.AddComponent<PhysicalFingersController>();
val.transform.SetParent(((Component)physHand.physBody).transform);
physicalFingersController.targetPhysHand = physHand;
HandPoseAnimator val2 = (physicalFingersController.targetHandAnimator = physHand.hand.Animator);
physicalFingersController.artOutputRig = physHand.physBody.artOutput;
physicalFingersController.thumb = PhysicalFinger.CreateFinger(physHand, val2.thumb1, val2.thumb2, val2.thumb3, "Thumb", ((Component)physicalFingersController).transform);
physicalFingersController.index = PhysicalFinger.CreateFinger(physHand, val2.index1, val2.index2, val2.index3, "Index", ((Component)physicalFingersController).transform);
physicalFingersController.middle = PhysicalFinger.CreateFinger(physHand, val2.middle1, val2.middle2, val2.middle3, "Middle", ((Component)physicalFingersController).transform);
physicalFingersController.ring = PhysicalFinger.CreateFinger(physHand, val2.ring1, val2.ring2, val2.ring3, "Ring", ((Component)physicalFingersController).transform);
physicalFingersController.pinky = PhysicalFinger.CreateFinger(physHand, val2.pinky1, val2.pinky2, val2.pinky3, "Pinky", ((Component)physicalFingersController).transform);
physicalFingersController.thumb.proximalJoint.angularXMotion = (ConfigurableJointMotion)2;
physicalFingersController.thumb.proximalJoint.angularYMotion = (ConfigurableJointMotion)2;
physicalFingersController.thumb.proximalJoint.angularZMotion = (ConfigurableJointMotion)2;
PhysicalFinger.IgnoreFingers(physicalFingersController.index, physicalFingersController.middle);
PhysicalFinger.IgnoreFingers(physicalFingersController.index, physicalFingersController.ring);
PhysicalFinger.IgnoreFingers(physicalFingersController.index, physicalFingersController.pinky);
PhysicalFinger.IgnoreFingers(physicalFingersController.index, physicalFingersController.thumb);
PhysicalFinger.IgnoreFingers(physicalFingersController.middle, physicalFingersController.ring);
PhysicalFinger.IgnoreFingers(physicalFingersController.middle, physicalFingersController.pinky);
PhysicalFinger.IgnoreFingers(physicalFingersController.middle, physicalFingersController.thumb);
PhysicalFinger.IgnoreFingers(physicalFingersController.ring, physicalFingersController.pinky);
PhysicalFinger.IgnoreFingers(physicalFingersController.ring, physicalFingersController.thumb);
PhysicalFinger.IgnoreFingers(physicalFingersController.pinky, physicalFingersController.thumb);
return physicalFingersController;
}
}
internal class BuildInfo
{
internal const string Name = "Finger Physics";
internal const string Description = "Adds Physical Fingers to the RigManager";
internal const string Author = "EvroDev";
internal const string Company = "";
internal const string Version = "1.0.0";
internal const string DownloadLink = "";
}
}