Decompiled source of ColtKingCobra v1.0.0

ColtKingCobra.dll

Decompiled 2 weeks 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 OpenScripts2;
using OtherLoader;
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 MovableStopMag : MovableObjectPart
{
	public FVRFireArm Firearm;

	public GameObject ReloadTriggerWell;

	[Tooltip("Max allowed fold angle when magazine is inserted.")]
	public float MaxFoldWithMag = 30f;

	[Tooltip("How close to LowerLimit to be considered fully folded.")]
	public float FoldThreshold = 5f;

	private float GetCurrentFoldAngle()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: 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_0020: 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_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_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0064: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: 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_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		//IL_008a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Invalid comparison between Unknown and I4
		//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c4: 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_00cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00de: 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_00e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_00eb: 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_0038: Invalid comparison between Unknown and I4
		//IL_010e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0113: Unknown result type (might be due to invalid IL or missing references)
		//IL_0114: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0120: Unknown result type (might be due to invalid IL or missing references)
		//IL_0125: Unknown result type (might be due to invalid IL or missing references)
		//IL_0129: Unknown result type (might be due to invalid IL or missing references)
		//IL_012e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0135: Unknown result type (might be due to invalid IL or missing references)
		//IL_013a: Unknown result type (might be due to invalid IL or missing references)
		//IL_013b: Unknown result type (might be due to invalid IL or missing references)
		//IL_013c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0146: Unknown result type (might be due to invalid IL or missing references)
		//IL_0147: Unknown result type (might be due to invalid IL or missing references)
		Vector3 val = ((FVRInteractiveObject)this).m_handPos - base.Root.position;
		Vector3 val2 = default(Vector3);
		Vector3 val3 = val2;
		Axis movementAxis = base.MovementAxis;
		if ((int)movementAxis != 0)
		{
			if ((int)movementAxis != 1)
			{
				if ((int)movementAxis == 2)
				{
					val3 = ((Component)base.Root).transform.up;
					Vector3 val4 = Vector3.ProjectOnPlane(val, base.Root.forward);
					val = ((Vector3)(ref val4)).normalized;
					return Mathf.Atan2(Vector3.Dot(base.Root.forward, Vector3.Cross(val3, val)), Vector3.Dot(val3, val)) * 57.29578f;
				}
				return 0f;
			}
			val3 = -((Component)base.Root).transform.forward;
			Vector3 val5 = Vector3.ProjectOnPlane(val, base.Root.up);
			val = ((Vector3)(ref val5)).normalized;
			return Mathf.Atan2(Vector3.Dot(base.Root.up, Vector3.Cross(val3, val)), Vector3.Dot(val3, val)) * 57.29578f;
		}
		val3 = -((Component)base.Root).transform.forward;
		val2 = Vector3.ProjectOnPlane(val, base.Root.right);
		val = ((Vector3)(ref val2)).normalized;
		return Mathf.Atan2(Vector3.Dot(base.Root.right, Vector3.Cross(val3, val)), Vector3.Dot(val3, val)) * 57.29578f;
	}

	private bool IsMagazineInserted()
	{
		return (Object)(object)Firearm != (Object)null && (Object)(object)Firearm.Magazine != (Object)null && !Firearm.Magazine.IsIntegrated;
	}

	public void Update()
	{
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		float num = GetCurrentFoldAngle();
		if (IsMagazineInserted())
		{
			float num2 = base.LowerLimit + MaxFoldWithMag;
			if (num < num2)
			{
				num = num2;
				base.ObjectToMove.localRotation = OpenScripts2_BasePlugin.GetTargetQuaternionFromAxis(num, base.MovementAxis);
			}
		}
		if ((Object)(object)ReloadTriggerWell != (Object)null)
		{
			bool flag = Mathf.Abs(num - base.LowerLimit) < FoldThreshold;
			ReloadTriggerWell.SetActive(!flag);
		}
	}
}
public class LeverActionRifleSafety : LeverActionFirearm
{
	[Header("Safety Params")]
	public bool HasSafety = true;

	public Transform SafetyLever;

	public float SafetyOnAngle = 0f;

	public float SafetyOffAngle = 45f;

	public float SafetyAnimSpeed = 10f;

	private bool _isSafetyEngaged = true;

	public bool IsSafetyEngaged => _isSafetyEngaged;

	protected void Awake()
	{
		((LeverActionFirearm)this).Awake();
		UpdateSafetyVisual();
	}

	public override void UpdateInteraction(FVRViveHand hand)
	{
		if (_isSafetyEngaged && hand.Input.TriggerDown)
		{
			if (base.m_isHammerCocked)
			{
				base.m_isHammerCocked = false;
			}
			else if (base.UsesSecondChamber && base.m_isHammerCocked2)
			{
				base.m_isHammerCocked2 = false;
			}
			((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f);
			((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)14, 1f);
			hand.Buzz(hand.Buzzer.Buzz_OnHoverInteractive);
			return;
		}
		((LeverActionFirearm)this).UpdateInteraction(hand);
		if (hand.IsInStreamlinedMode)
		{
			if (hand.Input.BYButtonDown)
			{
				ToggleSafety();
			}
		}
		else if (hand.Input.TouchpadDown && hand.Input.TouchpadAxes.x < -0.5f)
		{
			ToggleSafety();
		}
	}

	public bool Fire()
	{
		if (_isSafetyEngaged)
		{
			if (base.m_isHammerCocked)
			{
				base.m_isHammerCocked = false;
			}
			else if (base.UsesSecondChamber && base.m_isHammerCocked2)
			{
				base.m_isHammerCocked2 = false;
			}
			((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f);
			return false;
		}
		((LeverActionFirearm)this).Fire();
		return true;
	}

	private void ToggleSafety()
	{
		_isSafetyEngaged = !_isSafetyEngaged;
		((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)14, 1f);
		UpdateSafetyVisual();
	}

	private void UpdateSafetyVisual()
	{
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: Unknown result type (might be due to invalid IL or missing references)
		//IL_0064: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)SafetyLever != (Object)null)
		{
			float num = ((!_isSafetyEngaged) ? SafetyOffAngle : SafetyOnAngle);
			Vector3 localEulerAngles = default(Vector3);
			((Vector3)(ref localEulerAngles))..ctor(num, SafetyLever.localEulerAngles.y, SafetyLever.localEulerAngles.z);
			SafetyLever.localEulerAngles = localEulerAngles;
		}
	}
}
namespace Volks.ColtKingCobra;

[BepInPlugin("Volks.ColtKingCobra", "ColtKingCobra", "1.0.0")]
[BepInProcess("h3vr.exe")]
[Description("Built with MeatKit")]
[BepInDependency("h3vr.otherloader", "1.3.0")]
public class ColtKingCobraPlugin : 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(), "Volks.ColtKingCobra");
		OtherLoader.RegisterDirectLoad(BasePath, "Volks.ColtKingCobra", "", "", "coltkingcobrarevolver", "");
	}
}
public class MagPush : FVRInteractiveObject
{
	public enum Mode
	{
		Translation,
		Rotation,
		Folding
	}

	public enum Axis
	{
		X,
		Y,
		Z
	}

	public enum E_State
	{
		Open,
		Mid,
		Closed
	}

	public FVRFireArm FireArm;

	public FVRFireArmReloadTriggerWell ReloadTriggerWell;

	public Transform ObjectToMove;

	public Transform Root;

	public Mode MovementMode;

	public Axis MovementAxis;

	public float LowerLimit;

	public float UpperLimit;

	public bool SnapsToEndStops = true;

	public float LimitWiggleRoom = 0.02f;

	public AudioEvent CloseSounds;

	public AudioEvent OpenSounds;

	public AudioEvent BeginInteractionSounds;

	public AudioEvent EndInteractionSounds;

	private FVRFireArmMagazine magazine;

	private bool isAttached = false;

	private bool isLoaded = false;

	private Vector3 _lastHandPos;

	private float _currentPositionValue;

	private Vector3 _origPos;

	public E_State State;

	private E_State _lastState;

	public override 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)
		((FVRInteractiveObject)this).Start();
		_origPos = ObjectToMove.localPosition;
	}

	private void Update()
	{
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		if (!isAttached && (Object)(object)ReloadTriggerWell.FireArm.Magazine != (Object)null && Vector3.Distance(((Component)ReloadTriggerWell.FireArm.Magazine).transform.position, ObjectToMove.position) < 0.1f)
		{
			magazine = ReloadTriggerWell.FireArm.Magazine;
			isAttached = true;
			FireArm.PlayAudioEvent((FirearmAudioEventType)20, 1f);
			FireArm.Magazine = null;
		}
	}

	public override void BeginInteraction(FVRViveHand hand)
	{
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		((FVRInteractiveObject)this).BeginInteraction(hand);
		_lastHandPos = ((HandInput)(ref hand.Input)).Pos;
		SM.PlayGenericSound(BeginInteractionSounds, ObjectToMove.position);
	}

	public override void UpdateInteraction(FVRViveHand hand)
	{
		//IL_0025: 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)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_010e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0113: Unknown result type (might be due to invalid IL or missing references)
		((FVRInteractiveObject)this).UpdateInteraction(hand);
		if (isAttached && !isLoaded)
		{
			Vector3 val = ((HandInput)(ref hand.Input)).Pos - _lastHandPos;
			Vector3 vector = ObjectToMove.localPosition + val;
			float num = vector.GetAxisValue(MovementAxis) - _origPos.GetAxisValue(MovementAxis);
			_currentPositionValue = Mathf.Clamp(num, LowerLimit, UpperLimit);
			if (SnapsToEndStops && Mathf.Abs(_currentPositionValue - LowerLimit) < LimitWiggleRoom)
			{
				_currentPositionValue = LowerLimit;
			}
			else if (SnapsToEndStops && Mathf.Abs(_currentPositionValue - UpperLimit) < LimitWiggleRoom)
			{
				_currentPositionValue = UpperLimit;
			}
			ObjectToMove.ModifyLocalPositionAxisValue(MovementAxis, _currentPositionValue);
			_lastHandPos = ((HandInput)(ref hand.Input)).Pos;
			float lerp = Mathf.InverseLerp(LowerLimit, UpperLimit, _currentPositionValue);
			CheckSound(lerp);
			if (Mathf.Abs(_currentPositionValue - UpperLimit) < LimitWiggleRoom)
			{
				isLoaded = true;
				FireArm.PlayAudioEvent((FirearmAudioEventType)21, 1f);
				FireArm.Magazine = magazine;
			}
		}
	}

	public override void EndInteraction(FVRViveHand hand)
	{
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		((FVRInteractiveObject)this).EndInteraction(hand);
		SM.PlayGenericSound(EndInteractionSounds, ObjectToMove.position);
	}

	private void OnEnable()
	{
		FireArm.Magazine = null;
	}

	public bool IsFirearmReady()
	{
		return isLoaded && FireArm.IsLoaded();
	}

	public bool NeedsMagazinePush()
	{
		return isAttached && !isLoaded;
	}

	private void CheckSound(float lerp)
	{
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_0097: Unknown result type (might be due to invalid IL or missing references)
		if (lerp < LimitWiggleRoom)
		{
			State = E_State.Open;
		}
		else if (lerp > 1f - LimitWiggleRoom)
		{
			State = E_State.Closed;
		}
		else
		{
			State = E_State.Mid;
		}
		if (State == E_State.Open && _lastState != 0)
		{
			SM.PlayGenericSound(OpenSounds, ObjectToMove.position);
		}
		if (State == E_State.Closed && _lastState != E_State.Closed)
		{
			SM.PlayGenericSound(CloseSounds, ObjectToMove.position);
		}
		_lastState = State;
	}
}
public static class TransformExtensions
{
	public static float GetAxisValue(this Vector3 vector, MagPush.Axis axis)
	{
		return axis switch
		{
			MagPush.Axis.X => vector.x, 
			MagPush.Axis.Y => vector.y, 
			MagPush.Axis.Z => vector.z, 
			_ => 0f, 
		};
	}

	public static void ModifyLocalPositionAxisValue(this Transform transform, MagPush.Axis axis, float value)
	{
		//IL_0002: 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_0049: Unknown result type (might be due to invalid IL or missing references)
		Vector3 localPosition = transform.localPosition;
		switch (axis)
		{
		case MagPush.Axis.X:
			localPosition.x = value;
			break;
		case MagPush.Axis.Y:
			localPosition.y = value;
			break;
		case MagPush.Axis.Z:
			localPosition.z = value;
			break;
		}
		transform.localPosition = localPosition;
	}
}