Decompiled source of RevolverSpinner v1.0.0

RevolverSpinner.dll

Decompiled 7 hours ago
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using UnityEngine;

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
namespace JerryRevolver
{
	[BepInPlugin("JerryDLL.JerryRevolver", "JR", "1.0.0")]
	[BepInDependency("nrgill28.Sodalite", "1.4.1")]
	[BepInProcess("h3vr.exe")]
	public class LetRevolverSpinn : BaseUnityPlugin
	{
		public Revolver RevolverDAL;

		public SingleActionRevolver RevolverSAL;

		public Revolver RevolverDAR;

		public SingleActionRevolver RevolverSAR;

		public FVRViveHand L;

		public FVRViveHand R;

		public GameObject SpinnHL;

		public GameObject SpinnHR;

		public WaggleJoint WagL;

		public WaggleJoint WagR;

		public Transform SpinnPosL;

		public Transform SpinnPosR;

		public GameObject WagPosL;

		public GameObject WagPosR;

		public GameObject GeoL;

		public GameObject GeoR;

		private Quaternion prevRotationL;

		private Quaternion prevRotationR;

		private float ExtractRotationAroundX(Quaternion q)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//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_002b: 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)
			Vector3 up = Vector3.up;
			Vector3 val = q * up;
			Vector3 val2 = default(Vector3);
			((Vector3)(ref val2))..ctor(0f, val.y, val.z);
			Vector3 normalized = ((Vector3)(ref val2)).normalized;
			return Mathf.Atan2(normalized.z, normalized.y) * 57.29578f;
		}

		private void Update()
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Expected O, but got Unknown
			//IL_0064: 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_008e: Expected O, but got Unknown
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Expected O, but got Unknown
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bb: 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_03be: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03da: 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_03e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e2: 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_03f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0404: Unknown result type (might be due to invalid IL or missing references)
			//IL_0409: Unknown result type (might be due to invalid IL or missing references)
			//IL_040b: 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_0418: Unknown result type (might be due to invalid IL or missing references)
			//IL_041d: Unknown result type (might be due to invalid IL or missing references)
			//IL_041f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0421: Unknown result type (might be due to invalid IL or missing references)
			//IL_0426: Unknown result type (might be due to invalid IL or missing references)
			//IL_0428: Unknown result type (might be due to invalid IL or missing references)
			//IL_042d: Unknown result type (might be due to invalid IL or missing references)
			//IL_042f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0434: Unknown result type (might be due to invalid IL or missing references)
			//IL_0437: Unknown result type (might be due to invalid IL or missing references)
			//IL_044b: Unknown result type (might be due to invalid IL or missing references)
			//IL_044d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_021a: Expected O, but got Unknown
			//IL_0239: Unknown result type (might be due to invalid IL or missing references)
			//IL_0249: Unknown result type (might be due to invalid IL or missing references)
			//IL_0263: Expected O, but got Unknown
			//IL_0282: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d0: Expected O, but got Unknown
			//IL_02ef: 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_03a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0684: Unknown result type (might be due to invalid IL or missing references)
			//IL_0689: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d03: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d08: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a0c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a30: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a54: Unknown result type (might be due to invalid IL or missing references)
			//IL_092a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0944: Unknown result type (might be due to invalid IL or missing references)
			//IL_094e: Unknown result type (might be due to invalid IL or missing references)
			//IL_06a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_0636: Unknown result type (might be due to invalid IL or missing references)
			//IL_065b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ee7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d26: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d2b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bfb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c1f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c43: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b19: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b33: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b3d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0987: Unknown result type (might be due to invalid IL or missing references)
			//IL_081a: Unknown result type (might be due to invalid IL or missing references)
			//IL_083f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1271: Unknown result type (might be due to invalid IL or missing references)
			//IL_1295: Unknown result type (might be due to invalid IL or missing references)
			//IL_12b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_118d: Unknown result type (might be due to invalid IL or missing references)
			//IL_11a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_11b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f0a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f0f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e99: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ebe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b76: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_1635: Unknown result type (might be due to invalid IL or missing references)
			//IL_1659: Unknown result type (might be due to invalid IL or missing references)
			//IL_167e: Unknown result type (might be due to invalid IL or missing references)
			//IL_16a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_1462: Unknown result type (might be due to invalid IL or missing references)
			//IL_1486: Unknown result type (might be due to invalid IL or missing references)
			//IL_14aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_137e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1398: Unknown result type (might be due to invalid IL or missing references)
			//IL_13a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_11eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_107d: Unknown result type (might be due to invalid IL or missing references)
			//IL_10a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bb0: Unknown result type (might be due to invalid IL or missing references)
			//IL_181e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1842: Unknown result type (might be due to invalid IL or missing references)
			//IL_1867: Unknown result type (might be due to invalid IL or missing references)
			//IL_188c: Unknown result type (might be due to invalid IL or missing references)
			//IL_13dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_1226: Unknown result type (might be due to invalid IL or missing references)
			//IL_1788: Unknown result type (might be due to invalid IL or missing references)
			//IL_17ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_1417: Unknown result type (might be due to invalid IL or missing references)
			//IL_1abb: Unknown result type (might be due to invalid IL or missing references)
			//IL_1adf: Unknown result type (might be due to invalid IL or missing references)
			//IL_1b04: Unknown result type (might be due to invalid IL or missing references)
			//IL_1b29: Unknown result type (might be due to invalid IL or missing references)
			//IL_1971: Unknown result type (might be due to invalid IL or missing references)
			//IL_1996: Unknown result type (might be due to invalid IL or missing references)
			//IL_1ca4: Unknown result type (might be due to invalid IL or missing references)
			//IL_1cc8: Unknown result type (might be due to invalid IL or missing references)
			//IL_1ced: Unknown result type (might be due to invalid IL or missing references)
			//IL_1d12: Unknown result type (might be due to invalid IL or missing references)
			//IL_1c0e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1c33: Unknown result type (might be due to invalid IL or missing references)
			//IL_1df7: Unknown result type (might be due to invalid IL or missing references)
			//IL_1e1c: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)L == (Object)null)
			{
				L = GM.CurrentMovementManager.Hands[0];
				SpinnHL = Object.Instantiate<GameObject>(new GameObject("SpinnLH"), ((Component)L).gameObject.transform);
				SpinnHL.transform.localEulerAngles = new Vector3(45f, 0f, 0f);
				GeoL = Object.Instantiate<GameObject>(new GameObject("GeoL"), SpinnHL.gameObject.transform);
				GeoL.transform.localPosition = new Vector3(0f, 0f, 0f);
				GeoL.transform.localEulerAngles = new Vector3(270f, 0f, 0f);
				WagPosL = Object.Instantiate<GameObject>(new GameObject("WPL"), GeoL.gameObject.transform);
				WagPosL.transform.localPosition = new Vector3(0f, 0f, 0f);
				WagPosL.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
				WagL = SpinnHL.AddComponent<WaggleJoint>();
				WagL.hingeGraphic = GeoL.transform;
				WagL.distanceLimit = 0.05f;
				WagL.angleLimitLeft = 0f;
				WagL.angleLimitRight = 0f;
				WagL.damping = 0.05f;
				WagL.gravityScale = 0.25f;
				prevRotationL = GeoL.transform.rotation;
			}
			if ((Object)(object)R == (Object)null)
			{
				R = GM.CurrentMovementManager.Hands[1];
				SpinnHR = Object.Instantiate<GameObject>(new GameObject("SpinnRH"), ((Component)R).gameObject.transform);
				SpinnHR.transform.localEulerAngles = new Vector3(45f, 0f, 0f);
				GeoR = Object.Instantiate<GameObject>(new GameObject("GeoR"), SpinnHR.gameObject.transform);
				GeoR.transform.localPosition = new Vector3(0f, 0f, 0f);
				GeoR.transform.localEulerAngles = new Vector3(270f, 0f, 0f);
				WagPosR = Object.Instantiate<GameObject>(new GameObject("WPR"), GeoR.gameObject.transform);
				WagPosR.transform.localPosition = new Vector3(0f, 0f, 0f);
				WagPosR.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
				WagR = SpinnHR.AddComponent<WaggleJoint>();
				WagR.hingeGraphic = GeoR.transform;
				WagR.distanceLimit = 0.05f;
				WagR.angleLimitLeft = 0f;
				WagR.angleLimitRight = 0f;
				WagR.damping = 0.05f;
				WagR.gravityScale = 0.25f;
				prevRotationR = GeoR.transform.rotation;
			}
			Quaternion rotation = GeoL.transform.rotation;
			Quaternion val = rotation * Quaternion.Inverse(prevRotationL);
			Quaternion q = Quaternion.Inverse(rotation) * val * rotation;
			float num = ExtractRotationAroundX(q);
			float num2 = num / Time.deltaTime;
			prevRotationL = rotation;
			Quaternion rotation2 = GeoR.transform.rotation;
			Quaternion val2 = rotation2 * Quaternion.Inverse(prevRotationR);
			Quaternion q2 = Quaternion.Inverse(rotation2) * val2 * rotation2;
			float num3 = ExtractRotationAroundX(q2);
			float num4 = num3 / Time.deltaTime;
			prevRotationR = rotation2;
			if (L.Input.TriggerFloat > 0.2f)
			{
				if (L.Input.GripPressed)
				{
					if ((Object)(object)RevolverDAL != (Object)null)
					{
						if (GeoL.transform.localEulerAngles.x >= 260f && GeoL.transform.localEulerAngles.x <= 280f)
						{
							if ((Object)(object)L.m_currentInteractable != (Object)(object)RevolverDAL)
							{
								WagL.angleLimitLeft = 0f;
								WagL.angleLimitRight = 0f;
								if ((Object)(object)((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
								{
									((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().useGravity = false;
									((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().isKinematic = true;
								}
								((FVRInteractiveObject)RevolverDAL).IsSimpleInteract = false;
								((FVRInteractiveObject)RevolverDAL).BeginInteraction(L);
								L.ForceSetInteractable((FVRInteractiveObject)(object)RevolverDAL);
							}
						}
						else
						{
							GM.CurrentMovementManager.Hands[0].Display_Controller.SetActive(false);
							GM.CurrentMovementManager.Hands[0].Display_InteractionSphere.SetActive(false);
							GM.CurrentMovementManager.Hands[0].Display_InteractionSphere_Palm.SetActive(false);
							if ((Object)(object)((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
							{
								((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().isKinematic = true;
							}
							((FVRInteractiveObject)RevolverDAL).IsSimpleInteract = true;
							((Component)RevolverDAL).gameObject.transform.position = WagPosL.transform.position;
							((Component)RevolverDAL).gameObject.transform.eulerAngles = WagPosL.transform.eulerAngles;
						}
					}
					if ((Object)(object)RevolverSAL != (Object)null)
					{
						if (GeoL.transform.localEulerAngles.x >= 260f && GeoL.transform.localEulerAngles.x <= 280f)
						{
							if ((Object)(object)L.m_currentInteractable != (Object)(object)RevolverSAL)
							{
								WagL.angleLimitLeft = 0f;
								WagL.angleLimitRight = 0f;
								if ((Object)(object)((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
								{
									((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>().useGravity = false;
									((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>().isKinematic = true;
								}
								((FVRInteractiveObject)RevolverSAL).IsSimpleInteract = false;
								((FVRInteractiveObject)RevolverSAL).BeginInteraction(L);
								L.ForceSetInteractable((FVRInteractiveObject)(object)RevolverSAL);
							}
						}
						else
						{
							GM.CurrentMovementManager.Hands[0].Display_Controller.SetActive(false);
							GM.CurrentMovementManager.Hands[0].Display_InteractionSphere.SetActive(false);
							GM.CurrentMovementManager.Hands[0].Display_InteractionSphere_Palm.SetActive(false);
							if ((Object)(object)((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
							{
								((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>().isKinematic = true;
							}
							((FVRInteractiveObject)RevolverSAL).IsSimpleInteract = true;
							((Component)RevolverSAL).gameObject.transform.position = WagPosL.transform.position;
							((Component)RevolverSAL).gameObject.transform.eulerAngles = WagPosL.transform.eulerAngles;
						}
					}
				}
				if (!L.Input.GripPressed)
				{
					WagL.angleLimitLeft = 3600f;
					WagL.angleLimitRight = 3600f;
				}
			}
			if (L.Input.TriggerFloat <= 0.2f)
			{
				if (!L.Input.GripPressed)
				{
					if ((Object)(object)RevolverDAL != (Object)null)
					{
						if ((Object)(object)((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
						{
							((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().useGravity = true;
							((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().isKinematic = false;
							((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().AddForce(L.Input.VelLinearWorld * ((Vector3)(ref L.Input.VelLinearWorld)).magnitude * 0.1f, (ForceMode)1);
							if (num > 0f)
							{
								((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().AddRelativeTorque(new Vector3(num2 * 0.01f, 0f, 0f), (ForceMode)2);
							}
							if (num <= 0f)
							{
								((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().AddRelativeTorque(new Vector3(num2 * 0.01f, 0f, 0f), (ForceMode)2);
							}
						}
						((Component)RevolverDAL).gameObject.transform.SetParent((Transform)null);
						RevolverDAL = null;
						SpinnPosL = null;
						WagPosL.transform.localPosition = new Vector3(0f, 0f, 0f);
						WagPosL.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
						SpinnHL.transform.localPosition = new Vector3(0f, 0f, 0f);
						GM.CurrentMovementManager.Hands[0].Display_Controller.SetActive(true);
						GM.CurrentMovementManager.Hands[0].Display_InteractionSphere.SetActive(true);
						GM.CurrentMovementManager.Hands[0].Display_InteractionSphere_Palm.SetActive(true);
					}
					if ((Object)(object)RevolverSAL != (Object)null)
					{
						if ((Object)(object)((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
						{
							((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>().useGravity = true;
							((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>().isKinematic = false;
							((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>().AddForce(L.Input.VelLinearWorld * ((Vector3)(ref L.Input.VelLinearWorld)).magnitude * 0.1f, (ForceMode)1);
							if (num > 0f)
							{
								((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>().AddRelativeTorque(new Vector3(num2 * 0.01f, 0f, 0f), (ForceMode)2);
							}
							if (num <= 0f)
							{
								((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>().AddRelativeTorque(new Vector3(num2 * 0.01f, 0f, 0f), (ForceMode)2);
							}
						}
						((Component)RevolverSAL).gameObject.transform.SetParent((Transform)null);
						RevolverSAL = null;
						SpinnPosL = null;
						WagPosL.transform.localPosition = new Vector3(0f, 0f, 0f);
						WagPosL.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
						SpinnHL.transform.localPosition = new Vector3(0f, 0f, 0f);
						GM.CurrentMovementManager.Hands[0].Display_Controller.SetActive(true);
						GM.CurrentMovementManager.Hands[0].Display_InteractionSphere.SetActive(true);
						GM.CurrentMovementManager.Hands[0].Display_InteractionSphere_Palm.SetActive(true);
					}
				}
				WagL.angleLimitLeft = 0f;
				WagL.angleLimitRight = 0f;
			}
			if (R.Input.TriggerFloat > 0.2f)
			{
				if (R.Input.GripPressed)
				{
					if ((Object)(object)RevolverDAR != (Object)null)
					{
						if (GeoR.transform.localEulerAngles.x >= 260f && GeoR.transform.localEulerAngles.x <= 280f)
						{
							if ((Object)(object)R.m_currentInteractable != (Object)(object)RevolverDAR)
							{
								WagR.angleLimitLeft = 0f;
								WagR.angleLimitRight = 0f;
								if ((Object)(object)((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
								{
									((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().useGravity = false;
									((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().isKinematic = true;
								}
								((FVRInteractiveObject)RevolverDAR).IsSimpleInteract = false;
								((FVRInteractiveObject)RevolverDAR).BeginInteraction(R);
								R.ForceSetInteractable((FVRInteractiveObject)(object)RevolverDAR);
							}
						}
						else
						{
							GM.CurrentMovementManager.Hands[1].Display_Controller.SetActive(false);
							GM.CurrentMovementManager.Hands[1].Display_InteractionSphere.SetActive(false);
							GM.CurrentMovementManager.Hands[1].Display_InteractionSphere_Palm.SetActive(false);
							if ((Object)(object)((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
							{
								((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().isKinematic = true;
							}
							((FVRInteractiveObject)RevolverDAR).IsSimpleInteract = true;
							((Component)RevolverDAR).gameObject.transform.position = WagPosR.transform.position;
							((Component)RevolverDAR).gameObject.transform.eulerAngles = WagPosR.transform.eulerAngles;
						}
					}
					if ((Object)(object)RevolverSAR != (Object)null)
					{
						if (GeoR.transform.localEulerAngles.x >= 260f && GeoR.transform.localEulerAngles.x <= 280f)
						{
							if ((Object)(object)R.m_currentInteractable != (Object)(object)RevolverSAR)
							{
								WagR.angleLimitLeft = 0f;
								WagR.angleLimitRight = 0f;
								if ((Object)(object)((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
								{
									((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().useGravity = false;
									((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().isKinematic = true;
								}
								((FVRInteractiveObject)RevolverSAR).IsSimpleInteract = false;
								((FVRInteractiveObject)RevolverSAR).BeginInteraction(R);
								R.ForceSetInteractable((FVRInteractiveObject)(object)RevolverSAR);
							}
						}
						else
						{
							GM.CurrentMovementManager.Hands[1].Display_Controller.SetActive(false);
							GM.CurrentMovementManager.Hands[1].Display_InteractionSphere.SetActive(false);
							GM.CurrentMovementManager.Hands[1].Display_InteractionSphere_Palm.SetActive(false);
							if ((Object)(object)((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
							{
								((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().isKinematic = true;
							}
							((FVRInteractiveObject)RevolverSAR).IsSimpleInteract = true;
							((Component)RevolverSAR).gameObject.transform.position = WagPosR.transform.position;
							((Component)RevolverSAR).gameObject.transform.eulerAngles = WagPosR.transform.eulerAngles;
						}
					}
				}
				if (!R.Input.GripPressed)
				{
					WagR.angleLimitLeft = 3600f;
					WagR.angleLimitRight = 3600f;
				}
			}
			if (R.Input.TriggerFloat <= 0.2f)
			{
				if (!R.Input.GripPressed)
				{
					if ((Object)(object)RevolverDAR != (Object)null)
					{
						if ((Object)(object)((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
						{
							((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().useGravity = true;
							((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().isKinematic = false;
							((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().AddForce(R.Input.VelLinearWorld * ((Vector3)(ref R.Input.VelLinearWorld)).magnitude * 0.1f, (ForceMode)1);
							if (num3 > 0f)
							{
								((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().AddRelativeTorque(new Vector3(num4 * 0.01f, 0f, 0f), (ForceMode)2);
							}
							if (num3 <= 0f)
							{
								((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().AddRelativeTorque(new Vector3(num4 * 0.01f, 0f, 0f), (ForceMode)2);
							}
						}
						((Component)RevolverDAR).gameObject.transform.SetParent((Transform)null);
						RevolverDAR = null;
						SpinnPosR = null;
						WagPosR.transform.localPosition = new Vector3(0f, 0f, 0f);
						WagPosR.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
						SpinnHR.transform.localPosition = new Vector3(0f, 0f, 0f);
						GM.CurrentMovementManager.Hands[1].Display_Controller.SetActive(true);
						GM.CurrentMovementManager.Hands[1].Display_InteractionSphere.SetActive(true);
						GM.CurrentMovementManager.Hands[1].Display_InteractionSphere_Palm.SetActive(true);
					}
					if ((Object)(object)RevolverSAR != (Object)null)
					{
						if ((Object)(object)((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
						{
							((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().useGravity = true;
							((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().isKinematic = false;
							((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().AddForce(R.Input.VelLinearWorld * ((Vector3)(ref R.Input.VelLinearWorld)).magnitude * 0.1f, (ForceMode)1);
							if (num3 > 0f)
							{
								((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().AddRelativeTorque(new Vector3(num4 * 0.01f, 0f, 0f), (ForceMode)2);
							}
							if (num3 <= 0f)
							{
								((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().AddRelativeTorque(new Vector3(num4 * 0.01f, 0f, 0f), (ForceMode)2);
							}
						}
						((Component)RevolverSAR).gameObject.transform.SetParent((Transform)null);
						RevolverSAR = null;
						SpinnPosR = null;
						WagPosR.transform.localPosition = new Vector3(0f, 0f, 0f);
						WagPosR.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
						SpinnHR.transform.localPosition = new Vector3(0f, 0f, 0f);
						GM.CurrentMovementManager.Hands[1].Display_Controller.SetActive(true);
						GM.CurrentMovementManager.Hands[1].Display_InteractionSphere.SetActive(true);
						GM.CurrentMovementManager.Hands[1].Display_InteractionSphere_Palm.SetActive(true);
					}
				}
				WagR.angleLimitLeft = 0f;
				WagR.angleLimitRight = 0f;
			}
			if ((Object)(object)L.m_currentInteractable != (Object)null)
			{
				if ((Object)(object)RevolverDAL == (Object)null && (Object)(object)((Component)L.m_currentInteractable).gameObject.GetComponent<Revolver>() != (Object)null)
				{
					RevolverDAL = ((Component)L.m_currentInteractable).gameObject.GetComponent<Revolver>();
				}
				if ((Object)(object)RevolverSAL == (Object)null && (Object)(object)((Component)L.m_currentInteractable).gameObject.GetComponent<SingleActionRevolver>() != (Object)null)
				{
					RevolverSAL = ((Component)L.m_currentInteractable).gameObject.GetComponent<SingleActionRevolver>();
				}
			}
			if ((Object)(object)RevolverDAL != (Object)null && L.Input.TriggerFloat > 0.2f)
			{
				if ((Object)(object)SpinnPosL == (Object)null)
				{
					SpinnPosL = RevolverDAL.PoseSpinHolder;
					SpinnHL.transform.position = ((Component)SpinnPosL).transform.position;
					SpinnHL.transform.localEulerAngles = new Vector3(45f, 0f, 0f);
					WagPosL.transform.position = ((Component)RevolverDAL).gameObject.transform.position;
					WagPosL.transform.eulerAngles = ((Component)RevolverDAL).gameObject.transform.eulerAngles;
					((Component)RevolverDAL).gameObject.transform.SetParent(((Component)L).gameObject.transform);
				}
				if (!L.Input.GripPressed)
				{
					GM.CurrentMovementManager.Hands[0].Display_Controller.SetActive(false);
					GM.CurrentMovementManager.Hands[0].Display_InteractionSphere.SetActive(false);
					GM.CurrentMovementManager.Hands[0].Display_InteractionSphere_Palm.SetActive(false);
					if ((Object)(object)((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
					{
						((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().isKinematic = true;
					}
					((FVRInteractiveObject)RevolverDAL).IsSimpleInteract = true;
					((Component)RevolverDAL).gameObject.transform.position = WagPosL.transform.position;
					((Component)RevolverDAL).gameObject.transform.eulerAngles = WagPosL.transform.eulerAngles;
				}
			}
			if ((Object)(object)RevolverSAL != (Object)null && L.Input.TriggerFloat > 0.2f)
			{
				if ((Object)(object)SpinnPosL == (Object)null)
				{
					SpinnPosL = RevolverSAL.PoseSpinHolder;
					SpinnHL.transform.position = ((Component)SpinnPosL).transform.position;
					SpinnHL.transform.localEulerAngles = new Vector3(45f, 0f, 0f);
					WagPosL.transform.position = ((Component)RevolverSAL).gameObject.transform.position;
					WagPosL.transform.eulerAngles = ((Component)RevolverSAL).gameObject.transform.eulerAngles;
					((Component)RevolverSAL).gameObject.transform.SetParent(((Component)L).gameObject.transform);
				}
				if (!L.Input.GripPressed)
				{
					GM.CurrentMovementManager.Hands[0].Display_Controller.SetActive(false);
					GM.CurrentMovementManager.Hands[0].Display_InteractionSphere.SetActive(false);
					GM.CurrentMovementManager.Hands[0].Display_InteractionSphere_Palm.SetActive(false);
					if ((Object)(object)((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
					{
						((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>().isKinematic = true;
					}
					((FVRInteractiveObject)RevolverSAL).IsSimpleInteract = true;
					((Component)RevolverSAL).gameObject.transform.position = WagPosL.transform.position;
					((Component)RevolverSAL).gameObject.transform.eulerAngles = WagPosL.transform.eulerAngles;
				}
			}
			if ((Object)(object)R.m_currentInteractable != (Object)null)
			{
				if ((Object)(object)RevolverDAR == (Object)null && (Object)(object)((Component)R.m_currentInteractable).gameObject.GetComponent<Revolver>() != (Object)null)
				{
					RevolverDAR = ((Component)R.m_currentInteractable).gameObject.GetComponent<Revolver>();
				}
				if ((Object)(object)RevolverSAR == (Object)null && (Object)(object)((Component)R.m_currentInteractable).gameObject.GetComponent<SingleActionRevolver>() != (Object)null)
				{
					RevolverSAR = ((Component)R.m_currentInteractable).gameObject.GetComponent<SingleActionRevolver>();
				}
			}
			if ((Object)(object)RevolverDAR != (Object)null && R.Input.TriggerFloat > 0.2f)
			{
				if ((Object)(object)SpinnPosR == (Object)null)
				{
					SpinnPosR = RevolverDAR.PoseSpinHolder;
					SpinnHR.transform.position = ((Component)SpinnPosR).transform.position;
					SpinnHR.transform.localEulerAngles = new Vector3(45f, 0f, 0f);
					WagPosR.transform.position = ((Component)RevolverDAR).gameObject.transform.position;
					WagPosR.transform.eulerAngles = ((Component)RevolverDAR).gameObject.transform.eulerAngles;
					((Component)RevolverDAR).gameObject.transform.SetParent(((Component)R).gameObject.transform);
				}
				if (!R.Input.GripPressed)
				{
					GM.CurrentMovementManager.Hands[1].Display_Controller.SetActive(false);
					GM.CurrentMovementManager.Hands[1].Display_InteractionSphere.SetActive(false);
					GM.CurrentMovementManager.Hands[1].Display_InteractionSphere_Palm.SetActive(false);
					if ((Object)(object)((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
					{
						((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().isKinematic = true;
					}
					((FVRInteractiveObject)RevolverDAR).IsSimpleInteract = true;
					((Component)RevolverDAR).gameObject.transform.position = WagPosR.transform.position;
					((Component)RevolverDAR).gameObject.transform.eulerAngles = WagPosR.transform.eulerAngles;
				}
			}
			if (!((Object)(object)RevolverSAR != (Object)null) || !(R.Input.TriggerFloat > 0.2f))
			{
				return;
			}
			if ((Object)(object)SpinnPosR == (Object)null)
			{
				SpinnPosR = RevolverSAR.PoseSpinHolder;
				SpinnHR.transform.position = ((Component)SpinnPosR).transform.position;
				SpinnHR.transform.localEulerAngles = new Vector3(45f, 0f, 0f);
				WagPosR.transform.position = ((Component)RevolverSAR).gameObject.transform.position;
				WagPosR.transform.eulerAngles = ((Component)RevolverSAR).gameObject.transform.eulerAngles;
				((Component)RevolverSAR).gameObject.transform.SetParent(((Component)R).gameObject.transform);
			}
			if (!R.Input.GripPressed)
			{
				GM.CurrentMovementManager.Hands[1].Display_Controller.SetActive(false);
				GM.CurrentMovementManager.Hands[1].Display_InteractionSphere.SetActive(false);
				GM.CurrentMovementManager.Hands[1].Display_InteractionSphere_Palm.SetActive(false);
				if ((Object)(object)((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
				{
					((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().isKinematic = true;
				}
				((FVRInteractiveObject)RevolverSAR).IsSimpleInteract = true;
				((Component)RevolverSAR).gameObject.transform.position = WagPosR.transform.position;
				((Component)RevolverSAR).gameObject.transform.eulerAngles = WagPosR.transform.eulerAngles;
			}
		}
	}
}
namespace JerryRevolver2
{
	[BepInPlugin("JerryDLL.JerryRevolver", "JR", "1.0.0")]
	[BepInDependency("nrgill28.Sodalite", "1.4.1")]
	[BepInProcess("h3vr.exe")]
	public class LetRevolverSpinn2 : BaseUnityPlugin
	{
		public Revolver RevolverDAL;

		public SingleActionRevolver RevolverSAL;

		public Revolver RevolverDAR;

		public SingleActionRevolver RevolverSAR;

		public FVRViveHand L;

		public FVRViveHand R;

		public GameObject SpinnHL;

		public GameObject SpinnHR;

		public WaggleJoint WagL;

		public WaggleJoint WagR;

		public Transform SpinnPosL;

		public Transform SpinnPosR;

		public GameObject WagPosL;

		public GameObject WagPosR;

		public GameObject GeoL;

		public GameObject GeoR;

		private float lastAngleXL;

		private bool isInitializedL = false;

		private float lastAngleXR;

		private bool isInitializedR = false;

		private void Update()
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Expected O, but got Unknown
			//IL_0064: 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_008e: Expected O, but got Unknown
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Expected O, but got Unknown
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: 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_0204: Expected O, but got Unknown
			//IL_0223: 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_024d: Expected O, but got Unknown
			//IL_026c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ba: Expected O, but got Unknown
			//IL_02d9: 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_03cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_07c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_07c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0583: Unknown result type (might be due to invalid IL or missing references)
			//IL_0588: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bd0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bd5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0991: Unknown result type (might be due to invalid IL or missing references)
			//IL_0996: Unknown result type (might be due to invalid IL or missing references)
			//IL_09af: Unknown result type (might be due to invalid IL or missing references)
			//IL_09b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_08db: Unknown result type (might be due to invalid IL or missing references)
			//IL_08ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0923: Unknown result type (might be due to invalid IL or missing references)
			//IL_0856: Unknown result type (might be due to invalid IL or missing references)
			//IL_0870: Unknown result type (might be due to invalid IL or missing references)
			//IL_087a: Unknown result type (might be due to invalid IL or missing references)
			//IL_08a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_05aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0535: Unknown result type (might be due to invalid IL or missing references)
			//IL_055a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fab: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fb0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fc9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fce: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d88: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d8d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bf3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bf8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ac8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b10: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a43: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a5d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a67: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a94: Unknown result type (might be due to invalid IL or missing references)
			//IL_06eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0710: Unknown result type (might be due to invalid IL or missing references)
			//IL_1198: Unknown result type (might be due to invalid IL or missing references)
			//IL_119d: Unknown result type (might be due to invalid IL or missing references)
			//IL_11b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_11bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_10e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_1106: Unknown result type (might be due to invalid IL or missing references)
			//IL_112a: Unknown result type (might be due to invalid IL or missing references)
			//IL_105d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1077: Unknown result type (might be due to invalid IL or missing references)
			//IL_1081: Unknown result type (might be due to invalid IL or missing references)
			//IL_10ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dab: Unknown result type (might be due to invalid IL or missing references)
			//IL_0db0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d3a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d5f: Unknown result type (might be due to invalid IL or missing references)
			//IL_14a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_14c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_14eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_1510: Unknown result type (might be due to invalid IL or missing references)
			//IL_12cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_12f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_1317: Unknown result type (might be due to invalid IL or missing references)
			//IL_124a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1264: Unknown result type (might be due to invalid IL or missing references)
			//IL_126e: Unknown result type (might be due to invalid IL or missing references)
			//IL_129b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ef2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f17: Unknown result type (might be due to invalid IL or missing references)
			//IL_168b: Unknown result type (might be due to invalid IL or missing references)
			//IL_16af: Unknown result type (might be due to invalid IL or missing references)
			//IL_16d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_16f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_15f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_161a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1928: Unknown result type (might be due to invalid IL or missing references)
			//IL_194c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1971: Unknown result type (might be due to invalid IL or missing references)
			//IL_1996: Unknown result type (might be due to invalid IL or missing references)
			//IL_17de: Unknown result type (might be due to invalid IL or missing references)
			//IL_1803: Unknown result type (might be due to invalid IL or missing references)
			//IL_1b11: Unknown result type (might be due to invalid IL or missing references)
			//IL_1b35: Unknown result type (might be due to invalid IL or missing references)
			//IL_1b5a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1b7f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a7b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1aa0: Unknown result type (might be due to invalid IL or missing references)
			//IL_1c64: Unknown result type (might be due to invalid IL or missing references)
			//IL_1c89: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)L == (Object)null)
			{
				L = GM.CurrentMovementManager.Hands[0];
				SpinnHL = Object.Instantiate<GameObject>(new GameObject("SpinnLH"), ((Component)L).gameObject.transform);
				SpinnHL.transform.localEulerAngles = new Vector3(45f, 0f, 0f);
				GeoL = Object.Instantiate<GameObject>(new GameObject("GeoL"), SpinnHL.gameObject.transform);
				GeoL.transform.localPosition = new Vector3(0f, 0f, 0f);
				GeoL.transform.localEulerAngles = new Vector3(270f, 0f, 0f);
				WagPosL = Object.Instantiate<GameObject>(new GameObject("WPL"), GeoL.gameObject.transform);
				WagPosL.transform.localPosition = new Vector3(0f, 0f, 0f);
				WagPosL.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
				WagL = SpinnHL.AddComponent<WaggleJoint>();
				WagL.hingeGraphic = GeoL.transform;
				WagL.distanceLimit = 0.05f;
				WagL.angleLimitLeft = 0f;
				WagL.angleLimitRight = 0f;
				WagL.damping = 0.05f;
				WagL.gravityScale = 0.25f;
			}
			if ((Object)(object)R == (Object)null)
			{
				R = GM.CurrentMovementManager.Hands[1];
				SpinnHR = Object.Instantiate<GameObject>(new GameObject("SpinnRH"), ((Component)R).gameObject.transform);
				SpinnHR.transform.localEulerAngles = new Vector3(45f, 0f, 0f);
				GeoR = Object.Instantiate<GameObject>(new GameObject("GeoR"), SpinnHR.gameObject.transform);
				GeoR.transform.localPosition = new Vector3(0f, 0f, 0f);
				GeoR.transform.localEulerAngles = new Vector3(270f, 0f, 0f);
				WagPosR = Object.Instantiate<GameObject>(new GameObject("WPR"), GeoR.gameObject.transform);
				WagPosR.transform.localPosition = new Vector3(0f, 0f, 0f);
				WagPosR.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
				WagR = SpinnHR.AddComponent<WaggleJoint>();
				WagR.hingeGraphic = GeoR.transform;
				WagR.distanceLimit = 0.05f;
				WagR.angleLimitLeft = 0f;
				WagR.angleLimitRight = 0f;
				WagR.damping = 0.05f;
				WagR.gravityScale = 0.25f;
			}
			if (L.Input.TriggerFloat > 0.2f)
			{
				if (L.Input.GripPressed)
				{
					if ((Object)(object)RevolverDAL != (Object)null)
					{
						if (GeoL.transform.localEulerAngles.x >= 260f && GeoL.transform.localEulerAngles.x <= 280f)
						{
							WagL.angleLimitLeft = 0f;
							WagL.angleLimitRight = 0f;
							if ((Object)(object)((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
							{
								((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().isKinematic = true;
							}
							((FVRInteractiveObject)RevolverDAL).IsSimpleInteract = false;
							if ((Object)(object)L.m_currentInteractable == (Object)null)
							{
								L.ForceSetInteractable((FVRInteractiveObject)(object)RevolverDAL);
							}
						}
						else
						{
							GM.CurrentMovementManager.Hands[0].Display_Controller.SetActive(false);
							GM.CurrentMovementManager.Hands[0].Display_InteractionSphere.SetActive(false);
							GM.CurrentMovementManager.Hands[0].Display_InteractionSphere_Palm.SetActive(false);
							if ((Object)(object)((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
							{
								((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().isKinematic = true;
							}
							((FVRInteractiveObject)RevolverDAL).IsSimpleInteract = true;
							((Component)RevolverDAL).gameObject.transform.position = WagPosL.transform.position;
							((Component)RevolverDAL).gameObject.transform.eulerAngles = WagPosL.transform.eulerAngles;
						}
					}
					if ((Object)(object)RevolverSAL != (Object)null)
					{
						if (GeoL.transform.localEulerAngles.x >= 260f && GeoL.transform.localEulerAngles.x <= 280f)
						{
							WagL.angleLimitLeft = 0f;
							WagL.angleLimitRight = 0f;
							if ((Object)(object)((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
							{
								((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().isKinematic = true;
							}
							((FVRInteractiveObject)RevolverSAL).IsSimpleInteract = false;
							if ((Object)(object)L.m_currentInteractable == (Object)null)
							{
								L.ForceSetInteractable((FVRInteractiveObject)(object)RevolverSAL);
							}
						}
						else
						{
							GM.CurrentMovementManager.Hands[0].Display_Controller.SetActive(false);
							GM.CurrentMovementManager.Hands[0].Display_InteractionSphere.SetActive(false);
							GM.CurrentMovementManager.Hands[0].Display_InteractionSphere_Palm.SetActive(false);
							if ((Object)(object)((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
							{
								((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>().isKinematic = true;
							}
							((FVRInteractiveObject)RevolverSAL).IsSimpleInteract = true;
							((Component)RevolverSAL).gameObject.transform.position = WagPosL.transform.position;
							((Component)RevolverSAL).gameObject.transform.eulerAngles = WagPosL.transform.eulerAngles;
						}
					}
				}
				if (!L.Input.GripPressed)
				{
					WagL.angleLimitLeft = 3600f;
					WagL.angleLimitRight = 3600f;
				}
			}
			if (L.Input.TriggerFloat <= 0.2f)
			{
				if (!L.Input.GripPressed)
				{
					if ((Object)(object)RevolverDAL != (Object)null)
					{
						lastAngleXL = GeoL.transform.localEulerAngles.x;
						float x = GeoL.transform.localEulerAngles.x;
						float num = Mathf.DeltaAngle(lastAngleXL, x);
						float num2 = num / Time.deltaTime;
						lastAngleXL = x;
						((Component)RevolverDAL).gameObject.transform.SetParent((Transform)null);
						if ((Object)(object)((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
						{
							((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().isKinematic = false;
							((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().AddForce(L.Input.VelLinearWorld * ((Vector3)(ref L.Input.VelLinearWorld)).magnitude * 0.1f, (ForceMode)1);
							((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().AddRelativeTorque(new Vector3(num2 * 0.1f, 0f, 0f), (ForceMode)2);
						}
						RevolverDAL = null;
						SpinnPosL = null;
						WagPosL.transform.localPosition = new Vector3(0f, 0f, 0f);
						WagPosL.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
						SpinnHL.transform.localPosition = new Vector3(0f, 0f, 0f);
						GM.CurrentMovementManager.Hands[0].Display_Controller.SetActive(true);
						GM.CurrentMovementManager.Hands[0].Display_InteractionSphere.SetActive(true);
						GM.CurrentMovementManager.Hands[0].Display_InteractionSphere_Palm.SetActive(true);
					}
					if ((Object)(object)RevolverSAL != (Object)null)
					{
						lastAngleXL = GeoL.transform.localEulerAngles.x;
						float x2 = GeoL.transform.localEulerAngles.x;
						float num3 = Mathf.DeltaAngle(lastAngleXL, x2);
						float num4 = num3 / Time.deltaTime;
						lastAngleXL = x2;
						((Component)RevolverSAL).gameObject.transform.SetParent((Transform)null);
						if ((Object)(object)((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
						{
							((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>().isKinematic = false;
							((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>().AddForce(L.Input.VelLinearWorld * ((Vector3)(ref L.Input.VelLinearWorld)).magnitude * 0.1f, (ForceMode)1);
							((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>().AddRelativeTorque(new Vector3(num4 * 0.1f, 0f, 0f), (ForceMode)2);
						}
						RevolverSAL = null;
						SpinnPosL = null;
						WagPosL.transform.localPosition = new Vector3(0f, 0f, 0f);
						WagPosL.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
						SpinnHL.transform.localPosition = new Vector3(0f, 0f, 0f);
						GM.CurrentMovementManager.Hands[0].Display_Controller.SetActive(true);
						GM.CurrentMovementManager.Hands[0].Display_InteractionSphere.SetActive(true);
						GM.CurrentMovementManager.Hands[0].Display_InteractionSphere_Palm.SetActive(true);
					}
				}
				WagL.angleLimitLeft = 0f;
				WagL.angleLimitRight = 0f;
			}
			if (R.Input.TriggerFloat > 0.2f)
			{
				if (R.Input.GripPressed)
				{
					if ((Object)(object)RevolverDAR != (Object)null)
					{
						if (GeoR.transform.localEulerAngles.x >= 260f && GeoR.transform.localEulerAngles.x <= 280f)
						{
							WagR.angleLimitLeft = 0f;
							WagR.angleLimitRight = 0f;
							if ((Object)(object)((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
							{
								((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().isKinematic = true;
							}
							((FVRInteractiveObject)RevolverDAR).IsSimpleInteract = false;
							if ((Object)(object)R.m_currentInteractable == (Object)null)
							{
								R.ForceSetInteractable((FVRInteractiveObject)(object)RevolverDAR);
							}
						}
						else
						{
							GM.CurrentMovementManager.Hands[1].Display_Controller.SetActive(false);
							GM.CurrentMovementManager.Hands[1].Display_InteractionSphere.SetActive(false);
							GM.CurrentMovementManager.Hands[1].Display_InteractionSphere_Palm.SetActive(false);
							if ((Object)(object)((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
							{
								((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().isKinematic = true;
							}
							((FVRInteractiveObject)RevolverDAR).IsSimpleInteract = true;
							((Component)RevolverDAR).gameObject.transform.position = WagPosR.transform.position;
							((Component)RevolverDAR).gameObject.transform.eulerAngles = WagPosR.transform.eulerAngles;
						}
					}
					if ((Object)(object)RevolverSAR != (Object)null)
					{
						if (GeoR.transform.localEulerAngles.x >= 260f && GeoR.transform.localEulerAngles.x <= 280f)
						{
							WagR.angleLimitLeft = 0f;
							WagR.angleLimitRight = 0f;
							if ((Object)(object)((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
							{
								((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().isKinematic = true;
							}
							((FVRInteractiveObject)RevolverSAR).IsSimpleInteract = false;
							if ((Object)(object)R.m_currentInteractable == (Object)null)
							{
								R.ForceSetInteractable((FVRInteractiveObject)(object)RevolverSAR);
							}
						}
						else
						{
							GM.CurrentMovementManager.Hands[1].Display_Controller.SetActive(false);
							GM.CurrentMovementManager.Hands[1].Display_InteractionSphere.SetActive(false);
							GM.CurrentMovementManager.Hands[1].Display_InteractionSphere_Palm.SetActive(false);
							if ((Object)(object)((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
							{
								((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().isKinematic = true;
							}
							((FVRInteractiveObject)RevolverSAR).IsSimpleInteract = true;
							((Component)RevolverSAR).gameObject.transform.position = WagPosR.transform.position;
							((Component)RevolverSAR).gameObject.transform.eulerAngles = WagPosR.transform.eulerAngles;
						}
					}
				}
				if (!R.Input.GripPressed)
				{
					WagR.angleLimitLeft = 3600f;
					WagR.angleLimitRight = 3600f;
				}
			}
			if (R.Input.TriggerFloat <= 0.2f)
			{
				if (!R.Input.GripPressed)
				{
					if ((Object)(object)RevolverDAR != (Object)null)
					{
						lastAngleXR = GeoR.transform.localEulerAngles.x;
						float x3 = GeoR.transform.localEulerAngles.x;
						float num5 = Mathf.DeltaAngle(lastAngleXR, x3);
						float num6 = num5 / Time.deltaTime;
						lastAngleXR = x3;
						((Component)RevolverDAR).gameObject.transform.SetParent((Transform)null);
						if ((Object)(object)((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
						{
							((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().isKinematic = false;
							((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().AddForce(R.Input.VelLinearWorld * ((Vector3)(ref R.Input.VelLinearWorld)).magnitude * 0.1f, (ForceMode)1);
							((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().AddRelativeTorque(new Vector3(num6 * 0.1f, 0f, 0f), (ForceMode)2);
						}
						RevolverDAR = null;
						SpinnPosR = null;
						WagPosR.transform.localPosition = new Vector3(0f, 0f, 0f);
						WagPosR.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
						SpinnHR.transform.localPosition = new Vector3(0f, 0f, 0f);
						GM.CurrentMovementManager.Hands[1].Display_Controller.SetActive(true);
						GM.CurrentMovementManager.Hands[1].Display_InteractionSphere.SetActive(true);
						GM.CurrentMovementManager.Hands[1].Display_InteractionSphere_Palm.SetActive(true);
					}
					if ((Object)(object)RevolverSAR != (Object)null)
					{
						lastAngleXR = GeoR.transform.localEulerAngles.x;
						float x4 = GeoR.transform.localEulerAngles.x;
						float num7 = Mathf.DeltaAngle(lastAngleXR, x4);
						float num8 = num7 / Time.deltaTime;
						lastAngleXR = x4;
						((Component)RevolverSAR).gameObject.transform.SetParent((Transform)null);
						if ((Object)(object)((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
						{
							((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().isKinematic = false;
							((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().AddForce(R.Input.VelLinearWorld * ((Vector3)(ref R.Input.VelLinearWorld)).magnitude * 0.1f, (ForceMode)1);
							((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().AddRelativeTorque(new Vector3(num8 * 0.1f, 0f, 0f), (ForceMode)2);
						}
						RevolverSAR = null;
						SpinnPosR = null;
						WagPosR.transform.localPosition = new Vector3(0f, 0f, 0f);
						WagPosR.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
						SpinnHR.transform.localPosition = new Vector3(0f, 0f, 0f);
						GM.CurrentMovementManager.Hands[1].Display_Controller.SetActive(true);
						GM.CurrentMovementManager.Hands[1].Display_InteractionSphere.SetActive(true);
						GM.CurrentMovementManager.Hands[1].Display_InteractionSphere_Palm.SetActive(true);
					}
				}
				WagR.angleLimitLeft = 0f;
				WagR.angleLimitRight = 0f;
			}
			if ((Object)(object)L.m_currentInteractable != (Object)null)
			{
				if ((Object)(object)RevolverDAL == (Object)null && (Object)(object)((Component)L.m_currentInteractable).gameObject.GetComponent<Revolver>() != (Object)null)
				{
					RevolverDAL = ((Component)L.m_currentInteractable).gameObject.GetComponent<Revolver>();
				}
				if ((Object)(object)RevolverSAL == (Object)null && (Object)(object)((Component)L.m_currentInteractable).gameObject.GetComponent<SingleActionRevolver>() != (Object)null)
				{
					RevolverSAL = ((Component)L.m_currentInteractable).gameObject.GetComponent<SingleActionRevolver>();
				}
			}
			if ((Object)(object)RevolverDAL != (Object)null && L.Input.TriggerFloat > 0.5f)
			{
				if ((Object)(object)SpinnPosL == (Object)null)
				{
					SpinnPosL = RevolverDAL.PoseSpinHolder;
					SpinnHL.transform.position = ((Component)SpinnPosL).transform.position;
					SpinnHL.transform.localEulerAngles = new Vector3(45f, 0f, 0f);
					WagPosL.transform.position = ((Component)RevolverDAL).gameObject.transform.position;
					WagPosL.transform.eulerAngles = ((Component)RevolverDAL).gameObject.transform.eulerAngles;
					((Component)RevolverDAL).gameObject.transform.SetParent(((Component)L).gameObject.transform);
				}
				if (!L.Input.GripPressed)
				{
					GM.CurrentMovementManager.Hands[0].Display_Controller.SetActive(false);
					GM.CurrentMovementManager.Hands[0].Display_InteractionSphere.SetActive(false);
					GM.CurrentMovementManager.Hands[0].Display_InteractionSphere_Palm.SetActive(false);
					if ((Object)(object)((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
					{
						((Component)RevolverDAL).gameObject.GetComponent<Rigidbody>().isKinematic = true;
					}
					((FVRInteractiveObject)RevolverDAL).IsSimpleInteract = true;
					((Component)RevolverDAL).gameObject.transform.position = WagPosL.transform.position;
					((Component)RevolverDAL).gameObject.transform.eulerAngles = WagPosL.transform.eulerAngles;
				}
			}
			if ((Object)(object)RevolverSAL != (Object)null && L.Input.TriggerFloat > 0.5f)
			{
				if ((Object)(object)SpinnPosL == (Object)null)
				{
					SpinnPosL = RevolverSAL.PoseSpinHolder;
					SpinnHL.transform.position = ((Component)SpinnPosL).transform.position;
					SpinnHL.transform.localEulerAngles = new Vector3(45f, 0f, 0f);
					WagPosL.transform.position = ((Component)RevolverSAL).gameObject.transform.position;
					WagPosL.transform.eulerAngles = ((Component)RevolverSAL).gameObject.transform.eulerAngles;
					((Component)RevolverSAL).gameObject.transform.SetParent(((Component)L).gameObject.transform);
				}
				if (!L.Input.GripPressed)
				{
					GM.CurrentMovementManager.Hands[0].Display_Controller.SetActive(false);
					GM.CurrentMovementManager.Hands[0].Display_InteractionSphere.SetActive(false);
					GM.CurrentMovementManager.Hands[0].Display_InteractionSphere_Palm.SetActive(false);
					if ((Object)(object)((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>() != (Object)null)
					{
						((Component)RevolverSAL).gameObject.GetComponent<Rigidbody>().isKinematic = true;
					}
					((FVRInteractiveObject)RevolverSAL).IsSimpleInteract = true;
					((Component)RevolverSAL).gameObject.transform.position = WagPosL.transform.position;
					((Component)RevolverSAL).gameObject.transform.eulerAngles = WagPosL.transform.eulerAngles;
				}
			}
			if ((Object)(object)R.m_currentInteractable != (Object)null)
			{
				if ((Object)(object)RevolverDAR == (Object)null && (Object)(object)((Component)R.m_currentInteractable).gameObject.GetComponent<Revolver>() != (Object)null)
				{
					RevolverDAR = ((Component)R.m_currentInteractable).gameObject.GetComponent<Revolver>();
				}
				if ((Object)(object)RevolverSAR == (Object)null && (Object)(object)((Component)R.m_currentInteractable).gameObject.GetComponent<SingleActionRevolver>() != (Object)null)
				{
					RevolverSAR = ((Component)R.m_currentInteractable).gameObject.GetComponent<SingleActionRevolver>();
				}
			}
			if ((Object)(object)RevolverDAR != (Object)null && R.Input.TriggerFloat > 0.5f)
			{
				if ((Object)(object)SpinnPosR == (Object)null)
				{
					SpinnPosR = RevolverDAR.PoseSpinHolder;
					SpinnHR.transform.position = ((Component)SpinnPosR).transform.position;
					SpinnHR.transform.localEulerAngles = new Vector3(45f, 0f, 0f);
					WagPosR.transform.position = ((Component)RevolverDAR).gameObject.transform.position;
					WagPosR.transform.eulerAngles = ((Component)RevolverDAR).gameObject.transform.eulerAngles;
					((Component)RevolverDAR).gameObject.transform.SetParent(((Component)R).gameObject.transform);
				}
				if (!R.Input.GripPressed)
				{
					GM.CurrentMovementManager.Hands[1].Display_Controller.SetActive(false);
					GM.CurrentMovementManager.Hands[1].Display_InteractionSphere.SetActive(false);
					GM.CurrentMovementManager.Hands[1].Display_InteractionSphere_Palm.SetActive(false);
					if ((Object)(object)((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
					{
						((Component)RevolverDAR).gameObject.GetComponent<Rigidbody>().isKinematic = true;
					}
					((FVRInteractiveObject)RevolverDAR).IsSimpleInteract = true;
					((Component)RevolverDAR).gameObject.transform.position = WagPosR.transform.position;
					((Component)RevolverDAR).gameObject.transform.eulerAngles = WagPosR.transform.eulerAngles;
				}
			}
			if (!((Object)(object)RevolverSAR != (Object)null) || !(R.Input.TriggerFloat > 0.5f))
			{
				return;
			}
			if ((Object)(object)SpinnPosR == (Object)null)
			{
				SpinnPosR = RevolverSAR.PoseSpinHolder;
				SpinnHR.transform.position = ((Component)SpinnPosR).transform.position;
				SpinnHR.transform.localEulerAngles = new Vector3(45f, 0f, 0f);
				WagPosR.transform.position = ((Component)RevolverSAR).gameObject.transform.position;
				WagPosR.transform.eulerAngles = ((Component)RevolverSAR).gameObject.transform.eulerAngles;
				((Component)RevolverSAR).gameObject.transform.SetParent(((Component)R).gameObject.transform);
			}
			if (!R.Input.GripPressed)
			{
				GM.CurrentMovementManager.Hands[1].Display_Controller.SetActive(false);
				GM.CurrentMovementManager.Hands[1].Display_InteractionSphere.SetActive(false);
				GM.CurrentMovementManager.Hands[1].Display_InteractionSphere_Palm.SetActive(false);
				if ((Object)(object)((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>() != (Object)null)
				{
					((Component)RevolverSAR).gameObject.GetComponent<Rigidbody>().isKinematic = true;
				}
				((FVRInteractiveObject)RevolverSAR).IsSimpleInteract = true;
				((Component)RevolverSAR).gameObject.transform.position = WagPosR.transform.position;
				((Component)RevolverSAR).gameObject.transform.eulerAngles = WagPosR.transform.eulerAngles;
			}
		}
	}
}
namespace JerryAr.RevolverSpinner
{
	[BepInPlugin("JerryAr.RevolverSpinner", "RevolverSpinner", "1.0.0")]
	[BepInProcess("h3vr.exe")]
	[Description("Built with MeatKit")]
	public class RevolverSpinnerPlugin : BaseUnityPlugin
	{
		private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

		internal static ManualLogSource Logger;

		private void Awake()
		{
			Logger = ((BaseUnityPlugin)this).Logger;
			LoadAssets();
		}

		private void LoadAssets()
		{
			Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "JerryAr.RevolverSpinner");
		}
	}
}