Decompiled source of LeMat Centerfire Revolver v1.0.2

LeMat_Centerfire_Revolver.dll

Decompiled 8 months ago
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using Cityrobo;
using FistVR;
using OtherLoader;
using PrimeVrScripts;
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]
public class BombLance : MonoBehaviour
{
	public FVRFireArmChamber harpoonChamber;

	public Transform harpoonParent;

	public FVRFireArm bombLance;

	public bool isHarpoonCocked = false;

	public float harpoonStartPosZ;

	public float harpoonLerp;

	public float harpoonEndPosZ;

	private float m_triggerFloat;

	public Transform Trigger;

	public float Trigger_Rot_Forward;

	public float Trigger_Rot_Rearward;

	public float TriggerThreshold;

	private bool hasAlreadyTriggeredOnce = false;

	public void Update()
	{
		//IL_009b: Unknown result type (might be due to invalid IL or missing references)
		m_triggerFloat = 0f;
		FVRViveHand hand = ((FVRInteractiveObject)bombLance).m_hand;
		if (!((Object)(object)hand == (Object)null))
		{
			if (hand.Input.TriggerFloat < 0.1f)
			{
				hasAlreadyTriggeredOnce = false;
			}
			if (((FVRInteractiveObject)bombLance).m_hasTriggeredUpSinceBegin && (Object)(object)hand != (Object)null)
			{
				m_triggerFloat = hand.Input.TriggerFloat;
			}
			Trigger.localEulerAngles = new Vector3(Mathf.Lerp(Trigger_Rot_Forward, Trigger_Rot_Rearward, m_triggerFloat), 0f, 0f);
			if (!((double)m_triggerFloat <= (double)TriggerThreshold) && !hasAlreadyTriggeredOnce)
			{
				hasAlreadyTriggeredOnce = true;
				FireHarpoon();
			}
		}
	}

	public void FireHarpoon()
	{
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_010b: 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_0130: 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_0143: 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_0166: Unknown result type (might be due to invalid IL or missing references)
		bombLance.PlayAudioEvent((FirearmAudioEventType)6, 1f);
		if (isHarpoonCocked)
		{
			bombLance.PlayAudioEvent((FirearmAudioEventType)100, 1f);
			harpoonParent.localPosition = new Vector3(harpoonParent.localPosition.x, harpoonParent.localPosition.y, harpoonEndPosZ);
		}
		if (isHarpoonCocked && harpoonChamber.Fire())
		{
			bombLance.Fire(harpoonChamber, bombLance.MuzzlePos, true, 1f, -1f);
			bombLance.Recoil(bombLance.IsTwoHandStabilized(), (Object)(object)((FVRPhysicalObject)bombLance).AltGrip != (Object)null, bombLance.IsShoulderStabilized(), (FVRFireArmRecoilProfile)null, 1f);
			isHarpoonCocked = false;
			harpoonChamber.SetRound((FVRFireArmRound)null, false);
			Debug.Log((object)("before" + harpoonParent.localPosition));
			harpoonParent.localPosition = new Vector3(harpoonParent.localPosition.x, harpoonParent.localPosition.y, harpoonEndPosZ);
			Debug.Log((object)("after" + harpoonParent.localPosition));
		}
	}
}
public class BroomSound : MonoBehaviour
{
	public AudioClip[] clips;

	public AudioSource audioSource;

	private void OnTriggerEnter(Collider other)
	{
		audioSource.clip = clips[Random.Range(0, clips.Length)];
		if (!audioSource.isPlaying)
		{
			audioSource.Play();
		}
	}
}
public class ChainLinkColliderController : MonoBehaviour
{
	private void Start()
	{
	}

	private void Update()
	{
	}
}
public class ChainRevolver : MonoBehaviour
{
	public Transform[] ChamberLinks;

	public Transform[] ChambersToMove;

	public int CurChamber;

	private bool chambersMoving;

	public float speed = 1f;

	public bool[] chambersFinishedMoving;

	public int numChambers;

	public bool advanceChamberTest;

	public ChainWaggle chainWaggle;

	private void Start()
	{
		CurChamber = 0;
		chambersMoving = false;
		chambersFinishedMoving = new bool[numChambers];
	}

	private void resetChambersFinishedMoving()
	{
		for (int i = 0; i < chambersFinishedMoving.Length; i++)
		{
			chambersFinishedMoving[i] = false;
		}
	}

	private bool checkIfAllChambersMoved()
	{
		bool result = true;
		for (int i = 0; i < chambersFinishedMoving.Length; i++)
		{
			if (!chambersFinishedMoving[i])
			{
				result = false;
				break;
			}
		}
		return result;
	}

	private void Update()
	{
		//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c4: 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_00e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0108: Unknown result type (might be due to invalid IL or missing references)
		if (advanceChamberTest)
		{
			CurChamber++;
			if (CurChamber >= numChambers)
			{
				CurChamber = 0;
			}
			resetChambersFinishedMoving();
			chambersMoving = true;
			advanceChamberTest = false;
		}
		if (!chambersMoving)
		{
			return;
		}
		for (int i = 0; i < ChambersToMove.Length; i++)
		{
			if (!chambersFinishedMoving[i])
			{
				float num = speed * Time.deltaTime;
				int num2 = i + CurChamber;
				if (num2 >= ChamberLinks.Length)
				{
					num2 = (numChambers - num2) * -1;
				}
				ChambersToMove[i].position = Vector3.MoveTowards(ChambersToMove[i].position, ChamberLinks[num2].position, num);
				if (Vector3.Distance(ChambersToMove[i].position, ChamberLinks[num2].position) < 0.001f)
				{
					ChambersToMove[i].position = ChamberLinks[num2].position;
					chambersFinishedMoving[i] = true;
				}
			}
		}
		if (checkIfAllChambersMoved())
		{
			chambersMoving = false;
		}
	}

	public void FixedUpdate()
	{
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		if (chambersMoving)
		{
			return;
		}
		for (int i = 0; i < ChamberLinks.Length; i++)
		{
			float num = 1f * Time.deltaTime;
			int num2 = i + CurChamber;
			if (num2 >= ChamberLinks.Length)
			{
				num2 = (numChambers - num2) * -1;
			}
			ChambersToMove[i].position = Vector3.MoveTowards(ChambersToMove[i].position, ChamberLinks[num2].position, num);
		}
	}

	public void advanceChamber()
	{
		CurChamber++;
		if (CurChamber >= numChambers)
		{
			CurChamber = 0;
		}
		resetChambersFinishedMoving();
		chambersMoving = true;
	}
}
public class ChainWaggle : MonoBehaviour
{
	[Tooltip("The distance the particle is clamped to, scale this up to make it less sensitive to changes.")]
	public float distanceLimit = 0.25f;

	public float angleLimitLeft = 45f;

	public float angleLimitRight = 45f;

	[Tooltip("Multiplier for the physics gravity effecting the particle. Good for dealing with stiff joints or low gravity values.")]
	public float gravityScale = 1f;

	[Tooltip("Pulls the particle back to the hinge direction")]
	public bool useSpring;

	[Tooltip("Rate at which the particle approaches the hinge direction, eg: 0.95 mean's 95% closer each second.")]
	public float springApproachRate = 0.95f;

	[Tooltip("Rate at which the particle loses velocity, eg: 0.5 mean's 50% slower each second.")]
	public float damping;

	[Tooltip("This transform will LookAt() the particle being simulated.")]
	public bool ManualExecution;

	[Tooltip("Puts a cooldown on how often the OnHitLimit event can be fired.")]
	public float onHitLimitCooldown = 0.05f;

	public Vector3 particlePos;

	private Vector3 particleVel;

	private bool leftCatchState;

	private bool rightCatchState;

	private float lastTouchTime = float.MinValue;

	private static float Approach(float rate, float time)
	{
		return 1f - Mathf.Pow(1f - rate, time);
	}

	private static Vector3 Approach(Vector3 point, Vector3 target, float rate, float time)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		return Vector3.Lerp(point, target, WaggleJoint.Approach(rate, time));
	}

	private static float SignedAngle(Vector3 from, Vector3 to, Vector3 axis)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		float num = Vector3.Angle(from, to);
		float num2 = (float)((double)from.y * (double)to.z - (double)from.z * (double)to.y);
		float num3 = (float)((double)from.z * (double)to.x - (double)from.x * (double)to.z);
		float num4 = (float)((double)from.x * (double)to.y - (double)from.y * (double)to.x);
		float num5 = Mathf.Sign((float)((double)axis.x * (double)num2 + (double)axis.y * (double)num3 + (double)axis.z * (double)num4));
		return num * num5;
	}

	private static float ToHingeAngle(Vector3 point, Vector3 hingePivot, Vector3 hingeAxis, Vector3 hingeDirection)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: 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_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		Vector3 val = Vector3.ProjectOnPlane(point - hingePivot, hingeAxis);
		Vector3 normalized = ((Vector3)(ref val)).normalized;
		return WaggleJoint.SignedAngle(hingeDirection, normalized, hingeAxis);
	}

	private static Vector3 ProjectOnHinge(Vector3 point, Vector3 hingePivot, Vector3 hingeAxis, Vector3 hingeDirection, float distanceLimit, float angleMin, float angleMax)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: 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_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		return Quaternion.AngleAxis(Mathf.Clamp(WaggleJoint.ToHingeAngle(point, hingePivot, hingeAxis, hingeDirection), angleMin, angleMax), hingeAxis) * hingeDirection * distanceLimit + hingePivot;
	}

	private static bool DetectOnHitLimit(float angle, float minAngle, float maxAngle, ref bool minCatchState, ref bool maxCatchState, float catchThreshold = 0.5f, float releaseThreshold = 5f)
	{
		float num = Mathf.Abs(maxAngle - minAngle);
		float num2 = Mathf.Min(releaseThreshold, num - catchThreshold);
		float num3 = angle - minAngle;
		float num4 = (float)(0.0 - ((double)angle - (double)maxAngle));
		bool flag = minCatchState;
		bool flag2 = maxCatchState;
		minCatchState = (double)num3 <= (minCatchState ? ((double)num2) : ((double)catchThreshold));
		maxCatchState = (double)num4 <= (maxCatchState ? ((double)num2) : ((double)catchThreshold));
		if (!flag && minCatchState)
		{
			return true;
		}
		return !flag2 && maxCatchState;
	}

	public void ResetParticlePos()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: 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)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: 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_0033: Unknown result type (might be due to invalid IL or missing references)
		particlePos = ((Component)this).transform.position + ((Component)this).transform.forward * distanceLimit;
		particleVel = Vector3.zero;
	}

	private void OnHitLimit(float angularVelocity)
	{
	}

	public void Execute()
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0070: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: 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_00a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cb: 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_00d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00da: Unknown result type (might be due to invalid IL or missing references)
		//IL_00df: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_010b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0110: Unknown result type (might be due to invalid IL or missing references)
		//IL_0112: 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_0082: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_008e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0093: Unknown result type (might be due to invalid IL or missing references)
		//IL_009f: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
		float deltaTime = Time.deltaTime;
		Transform transform = ((Component)this).transform;
		Vector3 val = Physics.gravity * gravityScale;
		Vector3 val2 = particlePos;
		Vector3 val3 = WaggleJoint.Approach(particleVel, Vector3.zero, damping, deltaTime) + val * deltaTime;
		Vector3 val4 = val2 + val3 * deltaTime;
		Vector3 val5 = val4;
		Vector3 position = transform.position;
		Vector3 right = transform.right;
		Vector3 up = transform.up;
		if (useSpring)
		{
			val4 = WaggleJoint.Approach(val4, position + up * distanceLimit, springApproachRate, deltaTime);
		}
		particleVel = ((particlePos = WaggleJoint.ProjectOnHinge(val4, position, right, up, distanceLimit, 0f - angleLimitRight, angleLimitLeft)) - val2) / deltaTime;
		float angularVelocity = WaggleJoint.SignedAngle(val5 - position, val2 - position, right) / Mathf.Max(Mathf.Epsilon, deltaTime);
		bool flag = WaggleJoint.DetectOnHitLimit(WaggleJoint.ToHingeAngle(particlePos, position, right, up), 0f - angleLimitRight, angleLimitLeft, ref rightCatchState, ref leftCatchState, 0.5f, 5f);
		bool flag2 = (double)Time.timeSinceLevelLoad < (double)lastTouchTime + (double)onHitLimitCooldown;
		if (flag && !flag2)
		{
			OnHitLimit(angularVelocity);
			lastTouchTime = Time.timeSinceLevelLoad;
		}
	}

	private void Start()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: 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)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: 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_0033: Unknown result type (might be due to invalid IL or missing references)
		particlePos = ((Component)this).transform.position + ((Component)this).transform.forward * distanceLimit;
		particleVel = Vector3.zero;
	}

	private void Update()
	{
		if (!ManualExecution)
		{
			Execute();
		}
	}

	private void OnDrawGizmosSelected()
	{
		//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0102: Unknown result type (might be due to invalid IL or missing references)
		//IL_0107: Unknown result type (might be due to invalid IL or missing references)
		//IL_010c: 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_0126: Unknown result type (might be due to invalid IL or missing references)
		//IL_0127: Unknown result type (might be due to invalid IL or missing references)
		//IL_0131: Unknown result type (might be due to invalid IL or missing references)
		//IL_014f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0159: Unknown result type (might be due to invalid IL or missing references)
		//IL_015a: 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_017d: Unknown result type (might be due to invalid IL or missing references)
		//IL_018d: Unknown result type (might be due to invalid IL or missing references)
		//IL_019e: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01be: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f5: 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_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		if (Application.isPlaying)
		{
			Gizmos.color = new Color(0.1f, 0.3f, 0.9f);
			Gizmos.DrawWireCube(particlePos, Vector3.one * 0.025f);
			Gizmos.color = new Color(0.1f, 0.3f, 0.9f, 0.5f);
			Gizmos.DrawCube(particlePos, Vector3.one * 0.025f);
			float num = Time.timeSinceLevelLoad - lastTouchTime;
			Gizmos.color = new Color(0.1f, 0.7f, 0.9f, Mathf.Clamp01((float)((0.5 - (double)num) * 2.0)));
			Gizmos.DrawWireCube(particlePos, Vector3.one * (float)(0.100000001490116 * ((double)num + 0.5)));
		}
		Vector3 val = ((Component)this).transform.position + ((Component)this).transform.up * distanceLimit;
		Gizmos.color = new Color(0.7f, 0.9f, 0.1f);
		Gizmos.DrawWireCube(val, Vector3.one * 0.02f);
		Gizmos.color = new Color(0.7f, 0.9f, 0.1f, 0.5f);
		Gizmos.DrawCube(val, Vector3.one * 0.02f);
		Gizmos.color = new Color(0.9f, 0.7f, 0.1f);
		Gizmos.DrawRay(((Component)this).transform.position, Quaternion.AngleAxis(angleLimitLeft, ((Component)this).transform.right) * ((Component)this).transform.up * distanceLimit);
		Gizmos.DrawRay(((Component)this).transform.position, Quaternion.AngleAxis(0f - angleLimitRight, ((Component)this).transform.right) * ((Component)this).transform.up * distanceLimit);
	}
}
public class DisableEmission : MonoBehaviour
{
	private void Start()
	{
	}

	private void Update()
	{
	}
}
public class ExplosiveHarpoon : MonoBehaviour
{
	[Header("Harpoon Config")]
	public int fuseTimer;

	public bool isFuseActive = false;

	public GameObject ExplosionVFX;

	public GameObject ExplosionSFX;

	public AudioSource audioSource;

	private bool hasExploded = false;

	public void Awake()
	{
		hasExploded = false;
		isFuseActive = false;
		audioSource.Play();
		((MonoBehaviour)this).Invoke("Explode", (float)fuseTimer);
		isFuseActive = true;
	}

	private void Explode()
	{
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		if (!hasExploded)
		{
			isFuseActive = false;
			audioSource.Stop();
			hasExploded = true;
			Object.Instantiate<GameObject>(ExplosionVFX, ((Component)this).transform.position, Quaternion.identity);
			Object.Instantiate<GameObject>(ExplosionSFX, ((Component)this).transform.position, Quaternion.identity);
			Object.Destroy((Object)(object)((Component)this).gameObject);
		}
	}

	public void Update()
	{
		if ((Object)(object)audioSource != (Object)null)
		{
			if (!audioSource.isPlaying && isFuseActive)
			{
				audioSource.Play();
			}
			else if (!isFuseActive)
			{
				audioSource.Stop();
			}
		}
	}
}
public class FlippableHammer : FVRInteractiveObject
{
	public DAMerwinHulbert merwinHulbert;

	private bool isFlipped = false;

	public Vector3 unflippedRotation;

	public Vector3 flippedRotation;

	public Transform objectToFlip;

	public override void SimpleInteraction(FVRViveHand hand)
	{
		//IL_004c: 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)
		isFlipped = !isFlipped;
		merwinHulbert.CanManuallyCockHammer = isFlipped;
		if (isFlipped)
		{
			objectToFlip.localEulerAngles = flippedRotation;
		}
		else
		{
			objectToFlip.localEulerAngles = unflippedRotation;
		}
		((FVRInteractiveObject)this).SimpleInteraction(hand);
	}
}
public class FollowerScript : MonoBehaviour
{
	public GameObject FollowerSpring;

	public GameObject FollowerTip;

	public Vector3[] SpringScale;

	public Vector3[] TipPosition;

	public FVRFireArmMagazine tubeMagazine;

	public FVRFireArmMagazineReloadTrigger reloadTrigger;

	public bool isSpringDepressed;

	public int ammoCount;

	public void Awake()
	{
	}

	public void FixedUpdate()
	{
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		FollowerSpring.transform.localScale = Vector3.Lerp(FollowerSpring.transform.localScale, SpringScale[ammoCount], 0.5f);
		FollowerTip.transform.localPosition = Vector3.Lerp(FollowerTip.transform.localPosition, TipPosition[ammoCount], 0.5f);
	}
}
public class HarpoonCrank : MonoBehaviour
{
	public bool isOpen;

	public Transform handCrank;

	public FVRFireArmAttachment attachment;

	public MovableWeaponPartMk2 movableWeaponPartScript;

	public float curLerp = 0f;

	public bool justAttached = false;

	public AudioClip[] crankAudioClips;

	public AudioSource crankAudioSource;

	private float prevLerp = 0f;

	private AudioSourcePool m_pool_handling;

	private int currentAudioSet = -1;

	private int previousAudioSet = -1;

	public void Awake()
	{
	}

	public void Update()
	{
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0240: Unknown result type (might be due to invalid IL or missing references)
		//IL_0245: Unknown result type (might be due to invalid IL or missing references)
		//IL_025a: Unknown result type (might be due to invalid IL or missing references)
		//IL_025f: Unknown result type (might be due to invalid IL or missing references)
		//IL_026f: Unknown result type (might be due to invalid IL or missing references)
		//IL_028a: Unknown result type (might be due to invalid IL or missing references)
		//IL_028f: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f9: 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)
		FVRViveHand hand = ((FVRInteractiveObject)movableWeaponPartScript).m_hand;
		prevLerp = curLerp;
		curLerp = Mathf.InverseLerp(movableWeaponPartScript.LowerLimit, movableWeaponPartScript.UpperLimit, handCrank.localEulerAngles.x);
		previousAudioSet = currentAudioSet;
		if ((double)curLerp < 0.16)
		{
			currentAudioSet = 0;
		}
		else if ((double)curLerp < 0.32)
		{
			currentAudioSet = 1;
		}
		else if ((double)curLerp < 0.48)
		{
			currentAudioSet = 2;
		}
		else if ((double)curLerp < 0.64)
		{
			currentAudioSet = 3;
		}
		else if ((double)curLerp < 0.8)
		{
			currentAudioSet = 4;
		}
		else
		{
			currentAudioSet = 5;
		}
		if ((Object)(object)hand != (Object)null && !crankAudioSource.isPlaying && previousAudioSet != currentAudioSet)
		{
			crankAudioSource.clip = crankAudioClips[currentAudioSet];
			crankAudioSource.Play();
		}
		if ((Object)(object)attachment.curMount == (Object)null)
		{
			justAttached = false;
		}
		else if (Object.op_Implicit((Object)(object)((Component)attachment.curMount).GetComponentInParent<BombLance>()))
		{
			if (!justAttached)
			{
				handCrank.localEulerAngles = new Vector3(0f, handCrank.localEulerAngles.y, handCrank.localEulerAngles.z);
			}
			justAttached = true;
			BombLance componentInParent = ((Component)attachment.curMount).GetComponentInParent<BombLance>();
			componentInParent.harpoonLerp = Mathf.Lerp(componentInParent.harpoonEndPosZ, componentInParent.harpoonStartPosZ, curLerp);
			((Component)componentInParent.harpoonParent).transform.localPosition = new Vector3(((Component)componentInParent.harpoonParent).transform.localPosition.x, ((Component)componentInParent.harpoonParent).transform.localPosition.y, componentInParent.harpoonLerp);
			if (movableWeaponPartScript.UpperLimit - handCrank.localEulerAngles.x <= movableWeaponPartScript.LimitWiggleRoom && !isOpen)
			{
				isOpen = true;
				componentInParent.isHarpoonCocked = true;
				attachment.DetachFromMount();
				handCrank.localEulerAngles = new Vector3(0f, handCrank.localEulerAngles.y, handCrank.localEulerAngles.z);
			}
			else
			{
				isOpen = false;
			}
		}
	}
}
public class IgnoreCollision : MonoBehaviour
{
	public GameObject collidersParent;

	private void OnCollisionEnter(Collision collision)
	{
		if (((Object)collision.gameObject).name.Contains("m6g_reach"))
		{
			collidersParent.SetActive(false);
		}
		else
		{
			collidersParent.SetActive(true);
		}
	}
}
public class LaserMaterialSwap : LaserPointer
{
	public Material offMaterial;

	public Material onMaterial;

	public Renderer rendererToSwap;

	public Light[] lightsToTurnOn;

	public override void UpdateInteraction(FVRViveHand hand)
	{
		((LaserPointer)this).UpdateInteraction(hand);
		if (base.IsOn)
		{
			rendererToSwap.material = onMaterial;
			Light[] array = lightsToTurnOn;
			foreach (Light val in array)
			{
				((Behaviour)val).enabled = true;
			}
		}
		else
		{
			rendererToSwap.material = offMaterial;
			Light[] array2 = lightsToTurnOn;
			foreach (Light val2 in array2)
			{
				((Behaviour)val2).enabled = false;
			}
		}
	}
}
namespace PrimeVR.LeMat_Centerfire_Revolver;

[BepInPlugin("PrimeVR.LeMat_Centerfire_Revolver", "LeMat_Centerfire_Revolver", "1.0.2")]
[BepInProcess("h3vr.exe")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class LeMat_Centerfire_RevolverPlugin : BaseUnityPlugin
{
	private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

	private void Awake()
	{
		LoadAssets();
	}

	private void LoadAssets()
	{
		OtherLoader.RegisterDirectLoad(BasePath, "PrimeVR.LeMat_Centerfire_Revolver", "", "", "primevr-lemat-centerfire", "");
	}
}
public class RandomSpawnerPanel : MonoBehaviour
{
	private Dictionary<ItemSpawnerCategory, List<ItemSpawnerObjectDefinition>> DefDic = new Dictionary<ItemSpawnerCategory, List<ItemSpawnerObjectDefinition>>();

	private List<ItemSpawnerObjectDefinition> Definitions = new List<ItemSpawnerObjectDefinition>();

	private Dictionary<ItemSpawnerCategory, int> CurrentItemIndex = new Dictionary<ItemSpawnerCategory, int>();

	private ItemSpawnerCategory CurrentCategory = (ItemSpawnerCategory)(-1);

	private void PrimeDefs()
	{
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Expected O, but got Unknown
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_00da: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0125: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		//IL_009f: Unknown result type (might be due to invalid IL or missing references)
		Object[] array = Resources.LoadAll("ItemSpawnerDefinitions", typeof(ItemSpawnerObjectDefinition));
		for (int i = 0; i < array.Length; i++)
		{
			ItemSpawnerObjectDefinition val = (ItemSpawnerObjectDefinition)array[i];
			Debug.Log((object)val);
			Definitions.Add(val);
		}
		for (int j = 0; j < Definitions.Count; j++)
		{
			if (DefDic.ContainsKey(Definitions[j].Category))
			{
				Debug.Log((object)Definitions[j].Category);
				DefDic[Definitions[j].Category].Add(Definitions[j]);
				continue;
			}
			List<ItemSpawnerObjectDefinition> value = new List<ItemSpawnerObjectDefinition>();
			DefDic.Add(Definitions[j].Category, value);
			DefDic[Definitions[j].Category].Add(Definitions[j]);
			CurrentItemIndex.Add(Definitions[j].Category, 0);
		}
	}

	private void Awake()
	{
		PrimeDefs();
	}

	private void Update()
	{
	}
}
public class TriggerMagnification : FVRInteractiveObject
{
	public Amplifier scopeInterface;

	public override void SimpleInteraction(FVRViveHand hand)
	{
		int curSelectedOptionIndex = scopeInterface.CurSelectedOptionIndex;
		((FVRInteractiveObject)this).SimpleInteraction(hand);
		scopeInterface.CurSelectedOptionIndex = 1;
		scopeInterface.SetCurSettingUp(true);
		scopeInterface.CurSelectedOptionIndex = curSelectedOptionIndex;
	}
}
public class RetractableBarrelTest : MonoBehaviour
{
	private Quaternion handStartRot;

	private Quaternion objectStartRot;

	private float previousRot;

	public Transform hand;

	public Transform objectToRotate;

	public bool activateGrab;

	public bool firstPass;

	private void Update()
	{
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0066: Unknown result type (might be due to invalid IL or missing references)
		//IL_006b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0094: Unknown result type (might be due to invalid IL or missing references)
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00da: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_010a: Unknown result type (might be due to invalid IL or missing references)
		//IL_010f: Unknown result type (might be due to invalid IL or missing references)
		if (activateGrab)
		{
			if (firstPass)
			{
				handStartRot = hand.localRotation;
				objectStartRot = objectToRotate.localRotation;
				firstPass = false;
			}
			Quaternion val = objectStartRot * Quaternion.Inverse(((Component)hand).transform.localRotation);
			float z = ((Quaternion)(ref val)).eulerAngles.z;
			float val2 = objectStartRot.z - z;
			val2 = CustomClamp(val2, -90f, 0f, objectToRotate.localEulerAngles.z);
			if (previousRot < -10f && val2 >= -10f)
			{
				val2 = 0f;
			}
			objectToRotate.eulerAngles = new Vector3(objectToRotate.localEulerAngles.x, objectToRotate.localEulerAngles.y, 0f - val2);
			previousRot = 0f - objectToRotate.eulerAngles.z;
		}
	}

	public float CustomClamp(float val, float min, float max, float currentRot)
	{
		if (val >= min && val <= max)
		{
			return val;
		}
		return 0f - currentRot;
	}
}
public class ShowCenterMass : MonoBehaviour
{
	public Rigidbody rigidbody;

	public Transform desiredCenterMassPosition;

	private void Awake()
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		rigidbody.centerOfMass = desiredCenterMassPosition.position;
	}

	private void Update()
	{
	}
}
public class SmartlinkTrigger : FVRInteractiveObject
{
	public Transform smartLinkObject;

	private bool isOpening = false;

	public AudioEvent audioClipTurnOn;

	public AudioEvent audioClipTurnOff;

	public MeshRenderer smartLinkMesh;

	public Material turnedOffMaterial;

	public Material turnedOnMaterial;

	public override void SimpleInteraction(FVRViveHand hand)
	{
		//IL_0090: 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)
		((FVRInteractiveObject)this).SimpleInteraction(hand);
		isOpening = !isOpening;
		if (isOpening)
		{
			SM.PlayGenericSound(audioClipTurnOn, ((Component)this).transform.position);
			((Component)smartLinkObject).gameObject.SetActive(true);
			((Renderer)smartLinkMesh).material = turnedOnMaterial;
		}
		else
		{
			((Renderer)smartLinkMesh).material = turnedOffMaterial;
			((Component)smartLinkObject).gameObject.SetActive(false);
			SM.PlayGenericSound(audioClipTurnOff, ((Component)this).transform.position);
		}
	}

	public override void Awake()
	{
		((FVRInteractiveObject)this).Awake();
		isOpening = false;
	}

	public override void FVRUpdate()
	{
		((FVRInteractiveObject)this).FVRUpdate();
	}
}
public class UtasLoadingGate : FVRInteractiveObject
{
	public bool isOpen;

	public AudioEvent audioClipOpen;

	public AudioEvent audioClipClose;

	public FollowerScript follower;

	public override void SimpleInteraction(FVRViveHand hand)
	{
		//IL_004c: 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)
		((FVRInteractiveObject)this).SimpleInteraction(hand);
		isOpen = !isOpen;
		if (isOpen)
		{
			SM.PlayGenericSound(audioClipOpen, ((Component)this).transform.position);
		}
		else
		{
			SM.PlayGenericSound(audioClipClose, ((Component)this).transform.position);
		}
	}
}
public class changeSpring : FVRInteractiveObject
{
	public HingeJoint hinge;

	public override void SimpleInteraction(FVRViveHand hand)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		((FVRInteractiveObject)this).SimpleInteraction(hand);
		JointSpring spring = hinge.spring;
		spring.spring += 0.025f;
		if (spring.spring > 1f)
		{
			spring.spring = 0f;
		}
		hinge.spring = spring;
		Debug.Log((object)spring);
	}
}
public class instantiateTest : MonoBehaviour
{
	public GameObject objectToInstantiate;

	public Transform objectToInstantiateTarget;

	public GameObject instantiatedClone;

	private void Start()
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		instantiatedClone = Object.Instantiate<GameObject>(objectToInstantiate, objectToInstantiateTarget.position, Quaternion.identity);
	}

	private void Update()
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		instantiatedClone.transform.position = objectToInstantiateTarget.position;
		instantiatedClone.transform.rotation = objectToInstantiateTarget.rotation;
	}
}