Decompiled source of HuntTenPaces v1.0.1
HuntTenPaces.dll
Decompiled 3 days ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; 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 BitWizrd.Revolver; using BitWizrd.Speedloader; using FistVR; using HarmonyLib; 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] namespace BitWizrd.HuntTenPaces { [BepInPlugin("BitWizrd.HuntTenPaces", "HuntTenPaces", "1.0.1")] [BepInProcess("h3vr.exe")] [Description("Built with MeatKit")] [BepInDependency("h3vr.otherloader", "1.3.0")] public class HuntTenPacesPlugin : 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(), "BitWizrd.HuntTenPaces"); OtherLoader.RegisterDirectLoad(BasePath, "BitWizrd.HuntTenPaces", "", "ten paces", "", ""); } } } namespace BitWizrd.Revolver { public class Chain : FVRFireArm { [Header("Chain Revolver")] public ChainCylinder ChainCylinder; public Transform Hammer; public Transform LoadingGate; public Transform Trigger; public Transform HammerFanDir; public Transform PoseSpinHolder; public Transform Pose_Main; public Transform Pose_Toggled; public float Hammer_Rot_Uncocked; public float Hammer_Rot_Halfcocked; public float Hammer_Rot_Cocked; public float LoadingGate_Rot_Closed; public float LoadingGate_Rot_Open; public float Trigger_Rot_Forward; public float Trigger_Rot_Rearward; public bool StateToggles = true; public float TriggerThreshold = 0.9f; public bool CanSpin = true; public bool HasTransferBarSafety; public bool IsAccessTwoChambersBack; public Transform ChainHolder; public bool AllChambersAccessible = false; private int m_curChamber; private float m_curChamberLerp; private float m_tarChamberLerp; private bool m_isSpinning; private bool m_isStateToggled; private float m_triggerFloat; private bool m_isHammerCocking; private bool m_isHammerCocked; private float m_hammerCockLerp; private float m_hammerCockSpeed = 10f; private float xSpinRot; private float xSpinVel; private float timeSinceColFire; private float m_chainHolderBaseAngle; private float m_chainHolderCurAngle; private float m_chainHolderTargetAngle; private float m_chainHolderLerp; private float m_chainHolderLerpDuration = 0.1f; public int CurChamber { get { return m_curChamber; } set { m_curChamber = value; if (m_curChamber < 0) { m_curChamber += ChainCylinder.NumChambers; } m_curChamber %= ChainCylinder.NumChambers; } } public int NextChamber => (m_curChamber - 1 + ChainCylinder.NumChambers) % ChainCylinder.NumChambers; public int PrevChamber => (m_curChamber + 1) % ChainCylinder.NumChambers; public int PrevChamber2 => (m_curChamber + 2) % ChainCylinder.NumChambers; public override void Awake() { //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) ((FVRFireArm)this).Awake(); base.FChambers.Clear(); FVRFireArmChamber[] chambers = ChainCylinder.Chambers; foreach (FVRFireArmChamber item in chambers) { base.FChambers.Add(item); } m_chainHolderBaseAngle = 0f; m_chainHolderCurAngle = 0f; m_chainHolderTargetAngle = 0f; m_chainHolderLerp = 1f; if ((Object)(object)ChainCylinder != (Object)null && ChainCylinder.LerpSpeed > 0f) { m_chainHolderLerpDuration = 1f / ChainCylinder.LerpSpeed; } if ((Object)(object)((FVRInteractiveObject)this).PoseOverride_Touch != (Object)null) { Pose_Main.localPosition = ((FVRInteractiveObject)this).PoseOverride_Touch.localPosition; Pose_Main.localRotation = ((FVRInteractiveObject)this).PoseOverride_Touch.localRotation; } } public override void BeginInteraction(FVRViveHand hand) { //IL_00a2: 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_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) ((FVRFireArm)this).BeginInteraction(hand); if (((FVRPhysicalObject)this).IsAltHeld) { return; } if (!m_isStateToggled) { ((FVRInteractiveObject)this).PoseOverride.localPosition = Pose_Main.localPosition; ((FVRInteractiveObject)this).PoseOverride.localRotation = Pose_Main.localRotation; if ((Object)(object)((FVRInteractiveObject)this).m_grabPointTransform != (Object)null) { ((FVRInteractiveObject)this).m_grabPointTransform.localPosition = Pose_Main.localPosition; ((FVRInteractiveObject)this).m_grabPointTransform.localRotation = Pose_Main.localRotation; } } else { ((FVRInteractiveObject)this).PoseOverride.localPosition = Pose_Toggled.localPosition; ((FVRInteractiveObject)this).PoseOverride.localRotation = Pose_Toggled.localRotation; if ((Object)(object)((FVRInteractiveObject)this).m_grabPointTransform != (Object)null) { ((FVRInteractiveObject)this).m_grabPointTransform.localPosition = Pose_Toggled.localPosition; ((FVRInteractiveObject)this).m_grabPointTransform.localRotation = Pose_Toggled.localRotation; } } } public override void UpdateInteraction(FVRViveHand hand) { //IL_0304: Unknown result type (might be due to invalid IL or missing references) //IL_0309: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_02cb: Unknown result type (might be due to invalid IL or missing references) //IL_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_02df: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: 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_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) ((FVRPhysicalObject)this).UpdateInteraction(hand); m_isSpinning = false; if (!((FVRPhysicalObject)this).IsAltHeld) { if (!m_isStateToggled) { if (hand.Input.TouchpadPressed && !hand.IsInStreamlinedMode && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.up) < 45f) { m_isSpinning = true; } if (hand.IsInStreamlinedMode) { if (hand.Input.AXButtonDown) { CockHammer(5f); } if (hand.Input.BYButtonDown && StateToggles) { ToggleState(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)17, 1f); } } else if (hand.Input.TouchpadDown) { if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.down) < 45f) { CockHammer(5f); } else if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.left) < 45f && StateToggles) { ToggleState(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)17, 1f); } } } else { if (hand.IsInStreamlinedMode) { if (hand.Input.AXButtonDown) { AdvanceCylinder(); } if (hand.Input.BYButtonDown && StateToggles) { ToggleState(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)17, 1f); } } else if (hand.Input.TouchpadDown) { if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.left) < 45f && StateToggles) { ToggleState(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)18, 1f); } else if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.right) < 45f) { AdvanceCylinder(); } } if (hand.Input.TriggerDown) { EjectPrevCylinder(); } } } UpdateTriggerHammer(hand); UpdateCylinderRot(); if (!((FVRInteractiveObject)this).IsHeld) { m_isSpinning = false; } if (m_chainHolderLerp < 1f) { m_chainHolderLerp += Time.deltaTime / m_chainHolderLerpDuration; if (m_chainHolderLerp > 1f) { m_chainHolderLerp = 1f; } float z = Mathf.Lerp(m_chainHolderCurAngle, m_chainHolderTargetAngle, m_chainHolderLerp); if ((Object)(object)ChainHolder != (Object)null) { Vector3 localEulerAngles = ChainHolder.localEulerAngles; localEulerAngles.z = z; ChainHolder.localEulerAngles = localEulerAngles; } } else if ((Object)(object)ChainHolder != (Object)null) { Vector3 localEulerAngles2 = ChainHolder.localEulerAngles; localEulerAngles2.z = m_chainHolderTargetAngle; ChainHolder.localEulerAngles = localEulerAngles2; } } public override void EndInteraction(FVRViveHand hand) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) m_triggerFloat = 0f; ((FVRFireArm)this).EndInteraction(hand); ((FVRPhysicalObject)this).RootRigidbody.AddRelativeTorque(new Vector3(xSpinVel, 0f, 0f), (ForceMode)1); } public override void FVRFixedUpdate() { UpdateSpinning(); if (timeSinceColFire < 3f) { timeSinceColFire += Time.deltaTime; } ((FVRFireArm)this).FVRFixedUpdate(); } private void UpdateTriggerHammer(FVRViveHand hand) { //IL_01a2: 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_005b: 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_006c: 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) //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) ChainCylinder.CurrentChamberIndex = CurChamber; if (((FVRInteractiveObject)this).IsHeld && !m_isStateToggled && !m_isHammerCocked && !m_isHammerCocking && (Object)(object)hand.OtherHand != (Object)null) { Vector3 velLinearWorld = hand.OtherHand.Input.VelLinearWorld; float num = Vector3.Distance(hand.OtherHand.PalmTransform.position, HammerFanDir.position); if (num < 0.15f && Vector2.Angle(Vector2.op_Implicit(velLinearWorld), Vector2.op_Implicit(HammerFanDir.forward)) < 60f && ((Vector3)(ref velLinearWorld)).magnitude > 1f) { CockHammer(10f); } } if (m_isHammerCocking) { if (m_hammerCockLerp < 1f) { m_hammerCockLerp += Time.deltaTime * m_hammerCockSpeed; } else { m_hammerCockLerp = 1f; m_isHammerCocking = false; m_isHammerCocked = true; CurChamber--; m_curChamberLerp = 0f; m_tarChamberLerp = 0f; } } if (!m_isStateToggled) { Hammer.localEulerAngles = new Vector3(Mathf.Lerp(Hammer_Rot_Uncocked, Hammer_Rot_Cocked, m_hammerCockLerp), 0f, 0f); } else { Hammer.localEulerAngles = new Vector3(Hammer_Rot_Halfcocked, 0f, 0f); } if ((Object)(object)LoadingGate != (Object)null) { if (!m_isStateToggled) { LoadingGate.localEulerAngles = new Vector3(0f, 0f, LoadingGate_Rot_Closed); } else { LoadingGate.localEulerAngles = new Vector3(0f, 0f, LoadingGate_Rot_Open); } } m_triggerFloat = 0f; if (((FVRInteractiveObject)this).m_hasTriggeredUpSinceBegin && !m_isSpinning && !m_isStateToggled) { m_triggerFloat = hand.Input.TriggerFloat; } Trigger.localEulerAngles = new Vector3(Mathf.Lerp(Trigger_Rot_Forward, Trigger_Rot_Rearward, m_triggerFloat), 0f, 0f); if (m_triggerFloat > TriggerThreshold) { DropHammer(); } } private void DropHammer() { if (m_isHammerCocked) { m_isHammerCocked = false; m_isHammerCocking = false; m_hammerCockLerp = 0f; Fire(); } } private void AdvanceCylinder() { CurChamber--; ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)15, 1f); ChainCylinder.CurrentLerpDuration = 1f / ((!(ChainCylinder.LerpSpeed > 0f)) ? 10f : ChainCylinder.LerpSpeed); ChainCylinder.Advance(); m_chainHolderTargetAngle = (m_chainHolderCurAngle = m_chainHolderTargetAngle) - 72f; m_chainHolderLerp = 0f; } public void EjectPrevCylinder() { //IL_0057: 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_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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: 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) if (m_isStateToggled) { int num = PrevChamber; if (IsAccessTwoChambersBack) { num = PrevChamber2; } FVRFireArmChamber val = ChainCylinder.Chambers[num]; if (val.IsFull) { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)29, 1f); } val.EjectRound(((Component)val).transform.position + ((Component)val).transform.forward * 0.0025f, -((Component)val).transform.forward, Vector3.zero, false); } } private void Fire() { //IL_008f: Unknown result type (might be due to invalid IL or missing references) ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); if (base.FChambers[CurChamber].Fire()) { FVRFireArmChamber val = base.FChambers[CurChamber]; ((FVRFireArm)this).Fire(val, ((FVRFireArm)this).GetMuzzle(), true, 1f, -1f); ((FVRFireArm)this).FireMuzzleSmoke(); bool flag = ((FVRFireArm)this).IsTwoHandStabilized(); bool flag2 = (Object)(object)((FVRPhysicalObject)this).AltGrip != (Object)null; bool flag3 = ((FVRFireArm)this).IsShoulderStabilized(); ((FVRFireArm)this).Recoil(flag, flag2, flag3, (FVRFireArmRecoilProfile)null, 1f); ((FVRFireArm)this).PlayAudioGunShot(val.GetRound(), GM.CurrentPlayerBody.GetCurrentSoundEnvironment(), 1f); if (GM.CurrentSceneSettings.IsAmmoInfinite || GM.CurrentPlayerBody.IsInfiniteAmmo) { val.IsSpent = false; val.UpdateProxyDisplay(); } } } private void UpdateCylinderRot() { if (AllChambersAccessible) { for (int i = 0; i < base.FChambers.Count; i++) { int curChamber = CurChamber; int num = (CurChamber + 1) % ChainCylinder.NumChambers; int num2 = (CurChamber + ChainCylinder.NumChambers - 1) % ChainCylinder.NumChambers; if (i == curChamber || i == num || i == num2) { base.FChambers[i].IsAccessible = false; } else { base.FChambers[i].IsAccessible = true; } } if (m_isStateToggled) { int num3 = (CurChamber + 1) % ChainCylinder.NumChambers; if (num3 >= 0 && num3 < base.FChambers.Count) { base.FChambers[num3].IsAccessible = true; } } return; } for (int j = 0; j < base.FChambers.Count; j++) { base.FChambers[j].IsAccessible = false; } if (m_isStateToggled) { int num4 = (CurChamber + 1) % ChainCylinder.NumChambers; if (IsAccessTwoChambersBack) { num4 = (CurChamber + 2) % ChainCylinder.NumChambers; } if (num4 >= 0 && num4 < base.FChambers.Count) { base.FChambers[num4].IsAccessible = true; } } } private void UpdateSpinning() { //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_0261: Unknown result type (might be due to invalid IL or missing references) //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: 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_0054: 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_0046: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: 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_014b: Unknown result type (might be due to invalid IL or missing references) if (!((FVRInteractiveObject)this).IsHeld) { m_isSpinning = false; } if (m_isSpinning) { Vector3 val = Vector3.zero; if ((Object)(object)((FVRInteractiveObject)this).m_hand != (Object)null) { val = ((FVRInteractiveObject)this).m_hand.Input.VelLinearLocal; } float num = Vector3.Dot(((Vector3)(ref val)).normalized, ((Component)this).transform.up); num = Mathf.Clamp(num, 0f - ((Vector3)(ref val)).magnitude, ((Vector3)(ref val)).magnitude); if (Mathf.Abs(xSpinVel) < 90f) { xSpinVel += num * Time.deltaTime * 600f; } else if (Mathf.Sign(num) == Mathf.Sign(xSpinVel)) { xSpinVel += num * Time.deltaTime * 600f; } if (Mathf.Abs(xSpinVel) < 90f) { if (Vector3.Dot(((Component)this).transform.up, Vector3.down) >= 0f && Mathf.Sign(xSpinVel) == 1f) { xSpinVel += Time.deltaTime * 50f; } if (Vector3.Dot(((Component)this).transform.up, Vector3.down) < 0f && Mathf.Sign(xSpinVel) == -1f) { xSpinVel -= Time.deltaTime * 50f; } } xSpinVel = Mathf.Clamp(xSpinVel, -500f, 500f); xSpinRot += xSpinVel * Time.deltaTime * 5f; PoseSpinHolder.localEulerAngles = new Vector3(xSpinRot, 0f, 0f); xSpinVel = Mathf.Lerp(xSpinVel, 0f, Time.deltaTime * 0.6f); } else { xSpinRot = 0f; xSpinVel = 0f; PoseSpinHolder.localRotation = Quaternion.RotateTowards(PoseSpinHolder.localRotation, Quaternion.identity, Time.deltaTime * 500f); PoseSpinHolder.localEulerAngles = new Vector3(PoseSpinHolder.localEulerAngles.x, 0f, 0f); } } public override List<FireArmRoundClass> GetChamberRoundList() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) bool flag = false; List<FireArmRoundClass> list = new List<FireArmRoundClass>(); for (int i = 0; i < base.FChambers.Count; i++) { if (base.FChambers[i].IsFull) { list.Add(base.FChambers[i].GetRound().RoundClass); flag = true; } } if (flag) { return list; } return null; } public override void SetLoadedChambers(List<FireArmRoundClass> rounds) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) if (rounds.Count <= 0) { return; } for (int i = 0; i < base.FChambers.Count; i++) { if (i < rounds.Count) { base.FChambers[i].Autochamber(rounds[i]); } } } private void CockHammer(float speed) { if (!m_isHammerCocked && !m_isHammerCocking) { m_hammerCockSpeed = speed; m_isHammerCocking = true; ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)7, 1f); ChainCylinder.CurrentLerpDuration = 1f / m_hammerCockSpeed; ChainCylinder.StartAdvanceLerp(); m_chainHolderTargetAngle = (m_chainHolderCurAngle = m_chainHolderTargetAngle) - 72f; m_chainHolderLerp = 0f; } } private void ToggleState() { //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) m_isStateToggled = !m_isStateToggled; if (!((FVRPhysicalObject)this).IsAltHeld) { if (!m_isStateToggled) { ((FVRInteractiveObject)this).PoseOverride.localPosition = Pose_Main.localPosition; ((FVRInteractiveObject)this).PoseOverride.localRotation = Pose_Main.localRotation; if ((Object)(object)((FVRInteractiveObject)this).m_grabPointTransform != (Object)null) { ((FVRInteractiveObject)this).m_grabPointTransform.localPosition = Pose_Main.localPosition; ((FVRInteractiveObject)this).m_grabPointTransform.localRotation = Pose_Main.localRotation; } } else { ((FVRInteractiveObject)this).PoseOverride.localPosition = Pose_Toggled.localPosition; ((FVRInteractiveObject)this).PoseOverride.localRotation = Pose_Toggled.localRotation; if ((Object)(object)((FVRInteractiveObject)this).m_grabPointTransform != (Object)null) { ((FVRInteractiveObject)this).m_grabPointTransform.localPosition = Pose_Toggled.localPosition; ((FVRInteractiveObject)this).m_grabPointTransform.localRotation = Pose_Toggled.localRotation; } } } m_isHammerCocking = false; m_isHammerCocked = false; m_hammerCockLerp = 0f; } } public class ChainCylinder : MonoBehaviour { private class ChainLink { public Transform transform; public Vector3 baseLocalPos; public Quaternion baseLocalRot; public Vector3 particlePos; private Vector3 particleVel; private float restVelocityThreshold = 0.003f; public float distanceLimit = 0.12f; public float gravityScale = 0.8f; public float springRate = 0.85f; public float damping = 0.6f; public float positionScale = 0.2f; public bool isKinematic = false; public ChainLink prevLink; public ChainLink nextLink; private float idealDistanceToPrev; private float idealDistanceToNext; private float uniqueOffset1; private float uniqueOffset2; private float uniqueOffset3; private float moveScale; private float noiseFrequency1; private float noiseFrequency2; private float noiseFrequency3; public void Initialize() { //IL_0008: 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_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) baseLocalPos = transform.localPosition; baseLocalRot = transform.localRotation; ResetParticle(); uniqueOffset1 = Random.Range(0f, 100f); uniqueOffset2 = Random.Range(0f, 100f); uniqueOffset3 = Random.Range(0f, 100f); noiseFrequency1 = Random.Range(0.6f, 1.2f); noiseFrequency2 = Random.Range(0.6f, 1.2f); noiseFrequency3 = Random.Range(0.6f, 1.2f); moveScale = Random.Range(0.7f, 1f); } public void ResetParticle() { //IL_0008: 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_0013: 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) particlePos = transform.position; particleVel = Vector3.zero; } public void SetToBasePosition() { //IL_0008: 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) transform.localPosition = baseLocalPos; transform.localRotation = baseLocalRot; ResetParticle(); } public void SetBasePosition(Vector3 pos, Quaternion rot) { //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_0009: 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_0022: 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) baseLocalPos = pos; baseLocalRot = rot; if (isKinematic) { transform.localPosition = baseLocalPos; transform.localRotation = baseLocalRot; ResetParticle(); } } public void UpdatePhysics(float deltaTime, float movementAmount, bool advancing) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: 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_0254: Unknown result type (might be due to invalid IL or missing references) //IL_0259: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_0292: Unknown result type (might be due to invalid IL or missing references) //IL_0297: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_0299: Unknown result type (might be due to invalid IL or missing references) //IL_029f: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Unknown result type (might be due to invalid IL or missing references) //IL_02b1: Unknown result type (might be due to invalid IL or missing references) //IL_02ba: Unknown result type (might be due to invalid IL or missing references) //IL_02bf: Unknown result type (might be due to invalid IL or missing references) //IL_02c1: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Unknown result type (might be due to invalid IL or missing references) //IL_02cb: Unknown result type (might be due to invalid IL or missing references) //IL_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_0316: Unknown result type (might be due to invalid IL or missing references) //IL_031b: Unknown result type (might be due to invalid IL or missing references) //IL_0320: Unknown result type (might be due to invalid IL or missing references) //IL_0322: Unknown result type (might be due to invalid IL or missing references) //IL_0324: Unknown result type (might be due to invalid IL or missing references) //IL_032a: Unknown result type (might be due to invalid IL or missing references) //IL_032f: Unknown result type (might be due to invalid IL or missing references) //IL_0357: Unknown result type (might be due to invalid IL or missing references) //IL_0359: Unknown result type (might be due to invalid IL or missing references) //IL_038d: Unknown result type (might be due to invalid IL or missing references) //IL_038f: Unknown result type (might be due to invalid IL or missing references) //IL_0396: Unknown result type (might be due to invalid IL or missing references) //IL_039b: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_03a3: Unknown result type (might be due to invalid IL or missing references) //IL_03a8: Unknown result type (might be due to invalid IL or missing references) //IL_036b: Unknown result type (might be due to invalid IL or missing references) //IL_036c: Unknown result type (might be due to invalid IL or missing references) //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Unknown result type (might be due to invalid IL or missing references) //IL_0374: Unknown result type (might be due to invalid IL or missing references) //IL_0378: Unknown result type (might be due to invalid IL or missing references) //IL_037f: Unknown result type (might be due to invalid IL or missing references) //IL_0384: Unknown result type (might be due to invalid IL or missing references) //IL_0389: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03c0: Unknown result type (might be due to invalid IL or missing references) //IL_03c5: Unknown result type (might be due to invalid IL or missing references) //IL_0425: Unknown result type (might be due to invalid IL or missing references) //IL_042a: Unknown result type (might be due to invalid IL or missing references) //IL_042b: Unknown result type (might be due to invalid IL or missing references) //IL_0430: Unknown result type (might be due to invalid IL or missing references) //IL_043d: Unknown result type (might be due to invalid IL or missing references) //IL_043f: Unknown result type (might be due to invalid IL or missing references) //IL_0444: Unknown result type (might be due to invalid IL or missing references) //IL_046c: Unknown result type (might be due to invalid IL or missing references) //IL_0470: Unknown result type (might be due to invalid IL or missing references) //IL_0475: Unknown result type (might be due to invalid IL or missing references) //IL_047e: Unknown result type (might be due to invalid IL or missing references) //IL_0483: Unknown result type (might be due to invalid IL or missing references) //IL_0485: Unknown result type (might be due to invalid IL or missing references) //IL_0496: Unknown result type (might be due to invalid IL or missing references) if (isKinematic) { transform.localPosition = baseLocalPos; transform.localRotation = baseLocalRot; ResetParticle(); return; } Vector3 position = transform.position; bool flag = movementAmount < 0.001f && !advancing; if (flag && ((Vector3)(ref particleVel)).magnitude < restVelocityThreshold) { transform.localPosition = Vector3.Lerp(transform.localPosition, baseLocalPos, deltaTime * 3f); transform.localRotation = baseLocalRot; particleVel = Vector3.zero; particlePos = transform.position; return; } Vector3 val = Physics.gravity * gravityScale; Vector3 val2 = Vector3.zero; if (movementAmount > 0.005f && !advancing) { float time = Time.time; float num = Mathf.PerlinNoise(time * noiseFrequency1 + uniqueOffset1, uniqueOffset2) * 2f - 1f; float num2 = Mathf.PerlinNoise(uniqueOffset2, time * noiseFrequency2 + uniqueOffset3) * 2f - 1f; float num3 = Mathf.PerlinNoise(uniqueOffset3 + time * noiseFrequency3, time * noiseFrequency1) * 2f - 1f; val2 = new Vector3(num * 0.05f, num2 * 0.05f, num3 * 0.05f) * moveScale * Mathf.Min(1f, movementAmount * 6f); } if (!advancing && ((Vector3)(ref val2)).magnitude < 0.001f) { float num4 = Time.time * 0.3f; val2 += new Vector3(Mathf.Sin(num4 * 1.2f + uniqueOffset1) * 0.006f, Mathf.Cos(num4 * 0.9f + uniqueOffset2) * 0.006f, Mathf.Sin(num4 * 0.7f + uniqueOffset3) * 0.006f) * moveScale * 0.1f; } Vector3 val3 = particlePos; float num5 = ((!advancing) ? (damping * Random.Range(0.9f, 1.1f)) : 0.85f); Vector3 val4 = Vector3.Lerp(particleVel, Vector3.zero, num5 * deltaTime) + (val + val2) * deltaTime; val4 = Vector3.Lerp(particleVel, val4, deltaTime * 6f); Vector3 val5 = val3 + val4 * deltaTime; float num6 = (advancing ? 0.95f : ((!flag) ? (springRate * Random.Range(0.85f, 1.15f)) : 0.98f)); Vector3 val6 = transform.parent.TransformPoint(baseLocalPos); val5 = Vector3.Lerp(val5, val6, num6 * deltaTime); float num7 = ((!advancing) ? (distanceLimit * moveScale) : (distanceLimit * 0.3f)); float num8 = Vector3.Distance(val5, position); if (num8 > num7) { Vector3 val7 = val5 - position; val5 = position + ((Vector3)(ref val7)).normalized * num7; } particlePos = val5; particleVel = (particlePos - val3) / deltaTime; if (flag) { particleVel *= 0.8f; } if ((prevLink != null && prevLink.isKinematic) || (nextLink != null && nextLink.isKinematic)) { EnforceKinematicConnectivity(ref val5); } else { EnforceLooseConnectivity(ref val5); } Vector3 val8 = particlePos - position; Vector3 val9 = transform.parent.InverseTransformDirection(val8); float num9 = ((!advancing) ? (positionScale * moveScale) : (positionScale * 0.3f)); val9 *= num9; transform.localPosition = baseLocalPos + val9; transform.localRotation = baseLocalRot; } private void EnforceLooseConnectivity(ref Vector3 newPos) { //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: 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_002d: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_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_00cc: 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_005b: 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_0061: 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_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_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_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_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0136: 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) if (prevLink != null && !prevLink.isKinematic) { Vector3 position = prevLink.transform.position; float num = Vector3.Distance(newPos, position); if (Mathf.Abs(num - idealDistanceToPrev) > idealDistanceToPrev * 0.6f) { Vector3 val = newPos - position; Vector3 normalized = ((Vector3)(ref val)).normalized; Vector3 val2 = position + normalized * idealDistanceToPrev; newPos = Vector3.Lerp(newPos, val2, 0.3f); } } if (nextLink != null && !nextLink.isKinematic) { Vector3 position2 = nextLink.transform.position; float num2 = Vector3.Distance(newPos, position2); if (Mathf.Abs(num2 - idealDistanceToNext) > idealDistanceToNext * 0.6f) { Vector3 val3 = newPos - position2; Vector3 normalized2 = ((Vector3)(ref val3)).normalized; Vector3 val4 = position2 + normalized2 * idealDistanceToNext; newPos = Vector3.Lerp(newPos, val4, 0.3f); } } particlePos = newPos; } public void SetupConnectivity() { //IL_000f: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) if (prevLink != null) { idealDistanceToPrev = Vector3.Distance(baseLocalPos, prevLink.baseLocalPos); } if (nextLink != null) { idealDistanceToNext = Vector3.Distance(baseLocalPos, nextLink.baseLocalPos); } } private void EnforceKinematicConnectivity(ref Vector3 newPos) { //IL_0136: 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_0028: 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_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: 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_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_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_007a: 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_0083: 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_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: 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_00fd: 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_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) if (prevLink != null && prevLink.isKinematic) { Vector3 position = prevLink.transform.position; float num = Vector3.Distance(newPos, position); if (Mathf.Abs(num - idealDistanceToPrev) > 0.005f) { Vector3 val = newPos - position; Vector3 normalized = ((Vector3)(ref val)).normalized; Vector3 val2 = position + normalized * idealDistanceToPrev; newPos = Vector3.Lerp(newPos, val2, 0.95f); } } if (nextLink != null && nextLink.isKinematic) { Vector3 position2 = nextLink.transform.position; float num2 = Vector3.Distance(newPos, position2); if (Mathf.Abs(num2 - idealDistanceToNext) > 0.005f) { Vector3 val3 = newPos - position2; Vector3 normalized2 = ((Vector3)(ref val3)).normalized; Vector3 val4 = position2 + normalized2 * idealDistanceToNext; newPos = Vector3.Lerp(newPos, val4, 0.95f); } } particlePos = newPos; } } public int NumChambers = 17; public Transform[] ChamberModels; public FVRFireArmChamber[] Chambers; [HideInInspector] public Vector3[] ChamberPositions; [HideInInspector] public Quaternion[] ChamberRotations; public float LerpSpeed = 10f; private int m_curChamber = 0; private float[] m_lerpProgress; private int[] m_targetIndices; private float m_hammerLerp = 0f; public int CurrentChamberIndex = 0; public float CurrentLerpDuration = 0.1f; [Tooltip("The distance the particle is clamped to")] public float WaggleDistanceLimit = 0.15f; [Tooltip("Left angle limit for chain links")] public float WaggleAngleLimitLeft = 25f; [Tooltip("Right angle limit for chain links")] public float WaggleAngleLimitRight = 25f; [Tooltip("Multiplier for physics gravity affecting the particles")] public float WaggleGravityScale = 0.7f; [Tooltip("Pulls particles back to their hinge direction")] public bool WaggleUseSpring = true; [Tooltip("Rate at which particles approach the hinge direction (0.95 = 95% closer each second)")] public float WaggleSpringApproachRate = 0.8f; [Tooltip("Rate at which particles lose velocity (0.7 = 70% slower each second)")] public float WaggleDamping = 0.6f; private ChainLink[] m_chainLinks; private Vector3 m_lastPosition; private Quaternion m_lastRotation; private float m_movementAmount = 0f; private const float STABILITY_THRESHOLD = 0.002f; private bool m_isAdvancing = false; [Header("Audio Cue Settings")] [Tooltip("Velocity threshold for playing jingle sound")] public float JingleVelocityThreshold = 1.5f; [Tooltip("Minimum time between jingle sounds in seconds")] public float JingleCooldownTime = 0.7f; private float m_lastJingleTime = 0f; private FVRFireArm m_firearm; private Rigidbody m_firearmRb; [Tooltip("Enable or disable the jingle sound when the chain moves")] public bool EnableJingleSound = true; private void Awake() { //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: 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_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Unknown result type (might be due to invalid IL or missing references) //IL_0321: Unknown result type (might be due to invalid IL or missing references) //IL_0326: Unknown result type (might be due to invalid IL or missing references) //IL_0332: Unknown result type (might be due to invalid IL or missing references) //IL_0337: Unknown result type (might be due to invalid IL or missing references) if (ChamberModels == null || ChamberModels.Length != NumChambers || Chambers == null || Chambers.Length != NumChambers) { return; } ChamberPositions = (Vector3[])(object)new Vector3[NumChambers]; ChamberRotations = (Quaternion[])(object)new Quaternion[NumChambers]; for (int i = 0; i < NumChambers; i++) { ref Vector3 reference = ref ChamberPositions[i]; reference = ChamberModels[i].localPosition; ref Quaternion reference2 = ref ChamberRotations[i]; reference2 = ChamberModels[i].localRotation; } m_firearm = ((Component)this).GetComponentInParent<FVRFireArm>(); if ((Object)(object)m_firearm != (Object)null) { m_firearmRb = ((Component)m_firearm).GetComponent<Rigidbody>(); } m_lerpProgress = new float[NumChambers]; m_targetIndices = new int[NumChambers]; for (int j = 0; j < NumChambers; j++) { m_targetIndices[j] = j; } m_chainLinks = new ChainLink[NumChambers]; for (int k = 0; k < NumChambers; k++) { m_chainLinks[k] = new ChainLink(); m_chainLinks[k].transform = ChamberModels[k]; m_chainLinks[k].distanceLimit = WaggleDistanceLimit; m_chainLinks[k].gravityScale = WaggleGravityScale; m_chainLinks[k].springRate = WaggleSpringApproachRate; m_chainLinks[k].damping = WaggleDamping; if (k == 4 || k == 14) { m_chainLinks[k].damping *= 1.2f; m_chainLinks[k].springRate *= 1.1f; } m_chainLinks[k].positionScale = 0.2f; m_chainLinks[k].Initialize(); } for (int l = 0; l < NumChambers; l++) { int num = (l - 1 + NumChambers) % NumChambers; int num2 = (l + 1) % NumChambers; m_chainLinks[l].prevLink = m_chainLinks[num]; m_chainLinks[l].nextLink = m_chainLinks[num2]; } for (int m = 0; m < NumChambers; m++) { m_chainLinks[m].SetupConnectivity(); } for (int n = 0; n < NumChambers; n++) { ChamberModels[n].localPosition = ChamberPositions[n]; ChamberModels[n].localRotation = ChamberRotations[n]; } DisableCollisionsBetweenLinks(); m_lastPosition = ((Component)this).transform.position; m_lastRotation = ((Component)this).transform.rotation; } private void DisableCollisionsBetweenLinks() { List<Collider> list = new List<Collider>(); Transform[] chamberModels = ChamberModels; foreach (Transform val in chamberModels) { Collider[] componentsInChildren = ((Component)val).GetComponentsInChildren<Collider>(true); if (componentsInChildren != null && componentsInChildren.Length > 0) { list.AddRange(componentsInChildren); } } if (list.Count <= 0) { return; } for (int j = 0; j < list.Count; j++) { if ((Object)(object)list[j] == (Object)null || !list[j].enabled) { continue; } for (int k = j + 1; k < list.Count; k++) { if (!((Object)(object)list[k] == (Object)null) && list[k].enabled) { Physics.IgnoreCollision(list[j], list[k], true); } } } } public void Advance() { m_isAdvancing = true; for (int i = 0; i < NumChambers; i++) { m_targetIndices[i] = (m_targetIndices[i] + 1) % NumChambers; m_lerpProgress[i] = 0f; } } public void StartAdvanceLerp() { m_isAdvancing = true; for (int i = 0; i < NumChambers; i++) { m_targetIndices[i] = (m_targetIndices[i] + 1) % NumChambers; m_lerpProgress[i] = 0f; } } public void SetHammerLerp(float lerp) { m_hammerLerp = lerp; } private float CalculateMovement() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_007d: 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_00cd: 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_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) float num = 0f; if ((Object)(object)m_firearmRb != (Object)null) { Vector3 velocity = m_firearmRb.velocity; num = ((Vector3)(ref velocity)).magnitude; } else if ((Object)(object)m_firearm != (Object)null) { num = Vector3.Distance(((Component)m_firearm).transform.position, m_lastPosition) / Mathf.Max(Time.deltaTime, 0.0001f); m_lastPosition = ((Component)m_firearm).transform.position; } else { num = Vector3.Distance(((Component)this).transform.position, m_lastPosition) / Mathf.Max(Time.deltaTime, 0.0001f); m_lastPosition = ((Component)this).transform.position; } float num2 = Quaternion.Angle(((Component)this).transform.rotation, m_lastRotation) / 90f; m_lastRotation = ((Component)this).transform.rotation; float num3 = Mathf.Max(num, num2 * 5f); m_movementAmount = Mathf.Lerp(m_movementAmount, num3, Time.deltaTime * 10f); CheckPlayJingleSound(m_movementAmount); return m_movementAmount; } private void CheckPlayJingleSound(float movement) { if (!EnableJingleSound || !((Object)(object)m_firearm != (Object)null) || !((FVRInteractiveObject)m_firearm).IsHeld || !(movement > JingleVelocityThreshold) || !(Time.time > m_lastJingleTime + JingleCooldownTime)) { return; } try { if ((Object)(object)m_firearm != (Object)null && (Object)(object)m_firearm.AudioClipSet != (Object)null && m_firearm.AudioClipSet.BeltGrab != null && m_firearm.AudioClipSet.BeltGrab.Clips != null && m_firearm.AudioClipSet.BeltGrab.Clips.Count > 0) { m_firearm.PlayAudioEvent((FirearmAudioEventType)50, 1f); m_lastJingleTime = Time.time; } } catch (Exception) { } } private void UpdateKinematicLinks() { int num = -2; int num2 = 6; for (int i = 0; i < NumChambers; i++) { m_chainLinks[i].isKinematic = false; } for (int j = 0; j < num2; j++) { int num3 = (CurrentChamberIndex + num + j + NumChambers) % NumChambers; if (num3 >= 0 && num3 < NumChambers) { m_chainLinks[num3].isKinematic = true; } } } private void Update() { //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_024a: 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_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: 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_011a: 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) float movementAmount = CalculateMovement(); bool flag = true; for (int i = 0; i < NumChambers; i++) { if (m_lerpProgress[i] < 1f) { flag = false; break; } } if (flag) { m_isAdvancing = false; } if (m_hammerLerp > 0f && m_hammerLerp < 1f) { for (int j = 0; j < NumChambers; j++) { int num = m_targetIndices[j]; int num2 = (m_targetIndices[j] + 1) % NumChambers; Vector3 val = Vector3.Lerp(ChamberPositions[num], ChamberPositions[num2], m_hammerLerp); Quaternion val2 = Quaternion.Slerp(ChamberRotations[num], ChamberRotations[num2], m_hammerLerp); ChamberModels[j].localPosition = val; ChamberModels[j].localRotation = val2; m_chainLinks[j].SetBasePosition(val, val2); } } else { for (int k = 0; k < NumChambers; k++) { if (m_lerpProgress[k] < 1f) { m_lerpProgress[k] += Time.deltaTime / ((!(CurrentLerpDuration > 0f)) ? 0.1f : CurrentLerpDuration); if (m_lerpProgress[k] > 1f) { m_lerpProgress[k] = 1f; } } int num3 = (m_targetIndices[k] + NumChambers - 1) % NumChambers; int num4 = m_targetIndices[k]; Vector3 pos = Vector3.Lerp(ChamberPositions[num3], ChamberPositions[num4], m_lerpProgress[k]); Quaternion rot = Quaternion.Slerp(ChamberRotations[num3], ChamberRotations[num4], m_lerpProgress[k]); m_chainLinks[k].SetBasePosition(pos, rot); } } UpdateKinematicLinks(); for (int l = 0; l < NumChambers; l++) { m_chainLinks[l].UpdatePhysics(Time.deltaTime, movementAmount, m_isAdvancing); } } } public class ChainEjectorRod : FVRInteractiveObject { public Chain ChainRevolver; public override void SimpleInteraction(FVRViveHand hand) { ((FVRInteractiveObject)this).SimpleInteraction(hand); if ((Object)(object)ChainRevolver != (Object)null) { ChainRevolver.EjectPrevCylinder(); } } } public class Lemat : BreakActionWeapon { public enum FireMode { Revolver, Shotgun } [Header("Shotgun Hinge Setup")] public HingeJoint hinge; public float hingeLimit = 45f; public float hingeEjectLimit = 30f; [Header("Lemat Mode (Default Revolver)")] public FireMode CurrentMode = FireMode.Revolver; [Header("Barrels & Chambers")] public Transform RevolverMuzzle; public Transform ShotgunMuzzle; public FVRFireArmChamber ShotgunChamber; [Header("Shotgun Ejection")] public float ShotgunEjectOffset = -0.06f; public float ShotgunEjectSpeed = -2.5f; [Header("Selector Pin")] public Transform FireSelectorPin; public Vector3 RevolverPinRotation = Vector3.zero; public Vector3 ShotgunPinRotation = new Vector3(90f, 0f, 0f); [Header("Revolver Cylinder")] public SingleActionRevolverCylinder Cylinder; [Header("Revolver Mechanics")] public Transform Hammer; public Transform LoadingGate; public Transform Trigger; [Tooltip("Trigger rotates on X-axis.")] public float Trigger_Rot_Forward = 0f; public float Trigger_Rot_Rearward = 25f; private bool hasTriggeredUpSinceBegin = false; [Tooltip("Rotate revolve gate around Z-axis.")] public float LoadingGate_Rot_Closed = 0f; public float LoadingGate_Rot_Open = 40f; [Tooltip("Revolver hammer angles (X-axis).")] public float Hammer_Rot_Uncocked_Revolver = 0f; public float Hammer_Rot_Cocked_Revolver = 30f; [Tooltip("Shotgun hammer angles (X-axis).")] public float Hammer_Rot_Uncocked_Shotgun = 0f; public float Hammer_Rot_Cocked_Shotgun = 30f; [Tooltip("Revolver hammer angle for half-cock (X-axis).")] public float Hammer_Rot_Halfcock_Revolver = 15f; [Tooltip("Trigger threshold to fire.")] public float TriggerThreshold = 0.9f; [Header("Cylinder Mechanics (Classic Single-Action)")] public bool DoesCylinderTranslateForward; public bool DoesHalfCockHalfRotCylinder; public bool HasTransferBarSafety; public bool IsAccessTwoChambersBack; public Vector3 CylinderBackPos; public Vector3 CylinderFrontPos; [Header("Optional Spin Feature (Revolver Only)")] public Transform PoseSpinHolder; public bool CanSpin = true; [Tooltip("Allows revolve gate toggling (half-cock).")] public bool StateToggles = true; [Header("Revolver Muzzle Effects")] public int RevolverMuzzleFireIndex = 0; public int RevolverMuzzleSmokeIndex = 1; public int RevolverGasOutIndex = 2; [Header("Shotgun Muzzle Effects")] public int ShotgunMuzzleFireIndex = 0; public int ShotgunMuzzleSmokeIndex = 1; public int ShotgunGasOutIndex = 2; [Header("Revolver Pose Toggling (like SingleActionRevolver)")] public Transform Pose_Main; public Transform Pose_Toggled; public bool StateTogglesPose = true; [Header("LematMk2-Style Audio / Recoil")] public FVRFireArmRecoilProfile ShotgunRecoilProfile; [Header("Fanning")] public bool CanFan = true; public Transform HammerFanDir; public float FanDistance = 0.15f; public float FanAngle = 60f; public float FanVelocityThreshold = 1f; [Header("Foregrip Reference")] public LematForegrip ForegripRef; [Header("Shotgun Ammo Type")] public FireArmRoundType ShotgunRoundType = (FireArmRoundType)21; private FireArmRoundType m_originalRoundType; private bool m_hasInitializedRoundTypes = false; private bool _inputsBlocked = false; private bool m_isGateOpen; public bool m_isShotgunOpen; public bool foregripLatch; private bool m_isHammerCocked; private bool m_isHammerCocking; private float m_hammerCockLerp; private float m_hammerCockSpeed = 10f; private float Hammer_Rot_Uncocked; private float Hammer_Rot_Cocked; private int m_curChamber; private float m_curChamberLerp; private float m_tarChamberLerp; private float timeSinceColFire = 999f; private bool m_isSpinning; private float xSpinRot; private float xSpinVel; private bool mWasShotgunChamberFull; private bool mToggleDebounce; private Vector3 m_TargetSelectorRotation; private float m_SelectorPinSpeed = 10f; private bool mLemat_HasUnlockedBreak; private bool mLemat_HasEjectedThisOpen; private Vector3 m_HingeStartPos; public bool m_IsLatchHeldOpen; public bool TriggerReset = true; private float prevTriggerFloat = 0f; private bool m_isStateToggled = false; private List<FVRFireArmChamber> m_allChambers = new List<FVRFireArmChamber>(); private bool m_isFilteringChambers = false; private FireArmRoundType? m_lastFilteredType = null; private FireArmRoundType m_savedRoundType; public int CurChamber { get { return m_curChamber; } set { m_curChamber = value % Cylinder.NumChambers; } } public int PrevChamber { get { int num = m_curChamber - 1; return (num >= 0) ? num : (Cylinder.NumChambers - 1); } } public int PrevChamber2 { get { int num = m_curChamber - 2; return (num >= 0) ? num : (Cylinder.NumChambers + num); } } public override void Awake() { //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_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) if (!m_hasInitializedRoundTypes) { m_originalRoundType = ((FVRFireArm)this).RoundType; m_hasInitializedRoundTypes = true; } ((BreakActionWeapon)this).Awake(); ((BreakActionWeapon)this).SetHasLatchButton(false); ((FVRFireArm)this).FChambers = new List<FVRFireArmChamber>(); if ((Object)(object)Cylinder != (Object)null && Cylinder.Chambers != null) { FVRFireArmChamber[] chambers = Cylinder.Chambers; foreach (FVRFireArmChamber val in chambers) { if ((Object)(object)val != (Object)null) { val.Firearm = (FVRFireArm)(object)this; ((FVRFireArm)this).FChambers.Add(val); } } } if ((Object)(object)ShotgunChamber != (Object)null) { ShotgunChamber.Firearm = (FVRFireArm)(object)this; ShotgunChamber.RoundType = ShotgunRoundType; if (!((FVRFireArm)this).FChambers.Contains(ShotgunChamber)) { ((FVRFireArm)this).FChambers.Add(ShotgunChamber); } } m_allChambers.Clear(); m_allChambers.AddRange(((FVRFireArm)this).FChambers); CurrentMode = FireMode.Revolver; Hammer_Rot_Uncocked = Hammer_Rot_Uncocked_Revolver; Hammer_Rot_Cocked = Hammer_Rot_Cocked_Revolver; m_TargetSelectorRotation = RevolverPinRotation; if ((Object)(object)FireSelectorPin != (Object)null) { FireSelectorPin.localEulerAngles = RevolverPinRotation; } m_IsLatchHeldOpen = false; m_isShotgunOpen = false; mLemat_HasUnlockedBreak = false; mLemat_HasEjectedThisOpen = false; ((BreakActionWeapon)this).SetIsExternallyUnlatched(false); if ((Object)(object)hinge != (Object)null) { m_HingeStartPos = ((Component)hinge).transform.localPosition; } } public override void BeginInteraction(FVRViveHand hand) { ((FVRFireArm)this).BeginInteraction(hand); if ((Object)(object)hand != (Object)null && hand.Input.TriggerFloat <= 0.45f) { hasTriggeredUpSinceBegin = true; } else { hasTriggeredUpSinceBegin = false; } } public override Transform GetMuzzle() { return (CurrentMode != 0) ? ShotgunMuzzle : RevolverMuzzle; } private void FireMuzzleFire(int index) { ((FVRFireArm)this).FireMuzzleSmoke(index); } public void Fire() { if ((CurrentMode == FireMode.Revolver && m_isGateOpen) || (CurrentMode == FireMode.Shotgun && m_isShotgunOpen)) { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); } else if (CurrentMode == FireMode.Revolver) { if ((Object)(object)Cylinder == (Object)null || Cylinder.Chambers == null || Cylinder.NumChambers == 0) { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); return; } FVRFireArmChamber val = Cylinder.Chambers[m_curChamber]; if ((Object)(object)val == (Object)null || !val.IsFull || val.IsSpent || (Object)(object)val.GetRound() == (Object)null) { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); } else if (val.Fire()) { FVRFireArmRound round = val.GetRound(); ((FVRFireArm)this).Fire(val, ((FVRFireArm)this).GetMuzzle(), true, 1f, -1f); FireMuzzleFire(RevolverMuzzleFireIndex); ((FVRFireArm)this).FireMuzzleSmoke(RevolverMuzzleSmokeIndex); ((FVRFireArm)this).AddGas(RevolverGasOutIndex); ((FVRFireArm)this).Recoil(((FVRFireArm)this).IsTwoHandStabilized(), (Object)(object)((FVRPhysicalObject)this).AltGrip != (Object)null, ((FVRFireArm)this).IsShoulderStabilized(), (FVRFireArmRecoilProfile)null, 1f); HandleRoundDischarge(val, round); } } else if ((Object)(object)ShotgunChamber == (Object)null || !ShotgunChamber.IsFull || ShotgunChamber.IsSpent || (Object)(object)ShotgunChamber.GetRound() == (Object)null) { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); } else if (ShotgunChamber.Fire()) { FVRFireArmRound round2 = ShotgunChamber.GetRound(); ((FVRFireArm)this).Fire(ShotgunChamber, ((FVRFireArm)this).GetMuzzle(), true, 1f, -1f); FireMuzzleFire(ShotgunMuzzleFireIndex); ((FVRFireArm)this).FireMuzzleSmoke(ShotgunMuzzleSmokeIndex); ((FVRFireArm)this).AddGas(ShotgunGasOutIndex); ((FVRFireArm)this).Recoil(((FVRFireArm)this).IsTwoHandStabilized(), (Object)(object)((FVRPhysicalObject)this).AltGrip != (Object)null, ((FVRFireArm)this).IsShoulderStabilized(), ShotgunRecoilProfile, 1f); HandleRoundDischarge(ShotgunChamber, round2); } } private void HandleRoundDischarge(FVRFireArmChamber chamber, FVRFireArmRound round) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)round != (Object)null) { ((FVRFireArm)this).PlayAudioGunShot(round, GM.CurrentPlayerBody.GetCurrentSoundEnvironment(), 1f); if (round.IsCaseless && !chamber.SuppressCaselessDeletion) { chamber.SetRound((FVRFireArmRound)null, false); } } if (GM.CurrentSceneSettings.IsAmmoInfinite || GM.CurrentPlayerBody.IsInfiniteAmmo) { chamber.IsSpent = false; chamber.UpdateProxyDisplay(); } } public override void FVRUpdate() { ((FVRFireArm)this).FVRUpdate(); UpdateHammerShared(); UpdateFanning(); UpdateSpinning(); UpdateTriggerLogic(); if (CurrentMode == FireMode.Revolver) { UpdateCylinderRot(); } UpdateChamberStateFeedback(); UpdateSelectorPin(); UpdateLoadingGate(); if (StateTogglesPose && CurrentMode == FireMode.Revolver) { ToggleRevolverPose(m_isGateOpen); } CheckQuickBeltSlotsForAmmo(); } private void UpdateSelectorPin() { //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_0077: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)FireSelectorPin == (Object)null) && (CurrentMode != 0 || !m_isGateOpen)) { float x = FireSelectorPin.localEulerAngles.x; float x2 = m_TargetSelectorRotation.x; float num = Mathf.LerpAngle(x, x2, Time.deltaTime * m_SelectorPinSpeed); FireSelectorPin.localEulerAngles = new Vector3(num, 0f, 0f); } } private void UpdateLoadingGate() { //IL_0034: 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_008e: Unknown result type (might be due to invalid IL or missing references) if (m_isShotgunOpen) { if ((Object)(object)LoadingGate != (Object)null) { LoadingGate.localEulerAngles = new Vector3(0f, 0f, LoadingGate_Rot_Closed); } } else if (CurrentMode == FireMode.Revolver && (Object)(object)LoadingGate != (Object)null) { float num = ((!m_isGateOpen) ? LoadingGate_Rot_Closed : LoadingGate_Rot_Open); LoadingGate.localEulerAngles = new Vector3(0f, 0f, num); } else if ((Object)(object)LoadingGate != (Object)null) { LoadingGate.localEulerAngles = new Vector3(0f, 0f, LoadingGate_Rot_Closed); } } public override void FVRFixedUpdate() { ((BreakActionWeapon)this).FVRFixedUpdate(); timeSinceColFire += Time.deltaTime; if (m_isShotgunOpen && !((BreakActionWeapon)this).IsLatched && (Object)(object)hinge != (Object)null && !mLemat_HasEjectedThisOpen && Mathf.Abs(hinge.angle) >= hingeEjectLimit) { mLemat_HasEjectedThisOpen = true; if (base.m_EjectsOnOpen) { PopOutEmpties(); } } UpdateChamberAccessibility(); } private void UpdateChamberAccessibility() { if (CurrentMode == FireMode.Shotgun && (Object)(object)ShotgunChamber != (Object)null) { ShotgunChamber.IsAccessible = m_isShotgunOpen && !((BreakActionWeapon)this).IsLatched; } } private void UpdateChamberStateFeedback() { if ((Object)(object)ShotgunChamber != (Object)null && ShotgunChamber.IsFull && !mWasShotgunChamberFull) { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)20, 1f); } mWasShotgunChamberFull = (Object)(object)ShotgunChamber != (Object)null && ShotgunChamber.IsFull; } public override void UpdateInteraction(FVRViveHand hand) { //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0163: 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_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0340: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) ((BreakActionWeapon)this).UpdateInteraction(hand); if ((Object)(object)hand == (Object)null) { return; } if (hand.IsInStreamlinedMode) { if (CurrentMode == FireMode.Revolver) { if (hand.Input.BYButtonDown) { ToggleRevolverGate(!m_isGateOpen); } if (hand.Input.AXButtonDown) { if (m_isGateOpen) { AdvanceCylinder(); } else if (!m_isHammerCocked && !m_isHammerCocking) { CockHammerRevolver(5f); } else if (m_isHammerCocked) { ToggleFireMode(); } } } else { if (hand.Input.BYButtonPressed) { m_IsLatchHeldOpen = true; } else { m_IsLatchHeldOpen = false; } if (hand.Input.AXButtonDown) { if (!m_isHammerCocked && !m_isHammerCocking) { CockHammerShotgun(5f); } else if (m_isHammerCocked) { ToggleFireMode(); } } } } else { Vector2 touchpadAxes = hand.Input.TouchpadAxes; if (CurrentMode == FireMode.Revolver) { if (hand.Input.TouchpadDown) { float num = Vector2.Angle(touchpadAxes, Vector2.up); float num2 = Vector2.Angle(touchpadAxes, Vector2.down); float num3 = Vector2.Angle(touchpadAxes, Vector2.left); float num4 = Vector2.Angle(touchpadAxes, Vector2.right); if (num < 45f) { m_isSpinning = true; } else if (num2 < 45f) { if (!m_isHammerCocked && !m_isHammerCocking) { CockHammerRevolver(5f); } else if (m_isHammerCocked) { ToggleFireMode(); } } else if (num3 < 45f) { ToggleRevolverGate(!m_isGateOpen); } else if (num4 < 45f && m_isGateOpen) { AdvanceCylinder(); } } } else if (hand.Input.TouchpadPressed) { if (touchpadAxes.y > 0.1f) { m_IsLatchHeldOpen = true; } else { m_IsLatchHeldOpen = false; } if (hand.Input.TouchpadDown && touchpadAxes.y < -0.1f) { if (!m_isHammerCocked && !m_isHammerCocking) { CockHammerShotgun(5f); } else if (m_isHammerCocked) { ToggleFireMode(); } } } else { m_IsLatchHeldOpen = false; } } m_IsLatchHeldOpen = m_IsLatchHeldOpen || foregripLatch; if (m_IsLatchHeldOpen) { if (!m_isShotgunOpen && !m_isGateOpen) { ((BreakActionWeapon)this).SetIsExternallyUnlatched(true); BreakOpen(); } } else if ((Object)(object)hinge != (Object)null && ((Component)hinge).transform.localEulerAngles.x <= 1f) { BreakClose(); } } public override void EndInteraction(FVRViveHand hand) { //IL_0046: Unknown result type (might be due to invalid IL or missing references) ((BreakActionWeapon)this).EndInteraction(hand); if (m_isSpinning && (Object)(object)PoseSpinHolder != (Object)null && (Object)(object)hand != (Object)null) { ((FVRPhysicalObject)this).RootRigidbody.AddRelativeTorque(new Vector3(xSpinVel, 0f, 0f), (ForceMode)1); } m_isSpinning = false; } private void UpdateTriggerLogic() { //IL_0061: Unknown result type (might be due to invalid IL or missing references) float num = ((!((Object)(object)((FVRInteractiveObject)this).m_hand != (Object)null)) ? 0f : ((FVRInteractiveObject)this).m_hand.Input.TriggerFloat); if ((Object)(object)Trigger != (Object)null) { Trigger.localEulerAngles = new Vector3(Mathf.Lerp(Trigger_Rot_Forward, Trigger_Rot_Rearward, num), 0f, 0f); } if (num <= 0.45f) { hasTriggeredUpSinceBegin = true; TriggerReset = true; } float num2 = ((!hasTriggeredUpSinceBegin) ? 0f : num); if (!(num2 > TriggerThreshold)) { return; } if (CurrentMode == FireMode.Revolver) { if (m_isGateOpen && !m_isShotgunOpen) { if (TriggerReset) { EjectAccessibleRevolverChamber(); TriggerReset = false; } } else if (!m_isGateOpen && m_isShotgunOpen) { if (m_isHammerCocked && TriggerReset) { ResetHammerState(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); TriggerReset = false; } } else if (m_isHammerCocked) { m_isHammerCocked = false; m_isHammerCocking = false; m_hammerCockLerp = 0f; Fire(); } } else { if (CurrentMode != FireMode.Shotgun) { return; } if (m_isShotgunOpen) { if (m_isHammerCocked && TriggerReset) { ResetHammerState(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); TriggerReset = false; } } else if (m_isHammerCocked) { ResetHammerState(); Fire(); } } } private void ResetHammerState() { m_isHammerCocked = false; m_isHammerCocking = false; m_hammerCockLerp = 0f; } private void UpdateHammerShared() { //IL_016f: Unknown result type (might be due to invalid IL or missing references) if (m_isHammerCocking) { if (m_hammerCockLerp < 1f) { m_hammerCockLerp += Time.deltaTime * m_hammerCockSpeed; } else { m_hammerCockLerp = 1f; m_isHammerCocking = false; m_isHammerCocked = true; if (CurrentMode == FireMode.Revolver && (Object)(object)Cylinder != (Object)null && Cylinder.Chambers != null) { m_curChamber++; if (m_curChamber >= Cylinder.NumChambers) { m_curChamber = 0; } m_curChamberLerp = 0f; m_tarChamberLerp = 0f; } } } if (CurrentMode == FireMode.Revolver && m_isGateOpen && !m_isHammerCocking && !m_isHammerCocked) { float num = Hammer_Rot_Cocked_Revolver - Hammer_Rot_Uncocked_Revolver; if (Mathf.Abs(num) > 0.001f) { float num2 = (Hammer_Rot_Halfcock_Revolver - Hammer_Rot_Uncocked_Revolver) / num; num2 = Mathf.Clamp01(num2); m_hammerCockLerp = num2; } } if ((Object)(object)Hammer != (Object)null) { float num3 = Mathf.Lerp(Hammer_Rot_Uncocked, Hammer_Rot_Cocked, m_hammerCockLerp); Hammer.localEulerAngles = new Vector3(num3, 0f, 0f); } } private void UpdateFanning() { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: 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) if (!CanFan || !((FVRInteractiveObject)this).IsHeld || (Object)(object)((FVRInteractiveObject)this).m_hand == (Object)null || (Object)(object)((FVRInteractiveObject)this).m_hand.OtherHand == (Object)null || (Object)(object)HammerFanDir == (Object)null || m_isHammerCocked || m_isHammerCocking || (CurrentMode == FireMode.Revolver && m_isGateOpen)) { return; } Vector3 velLinearWorld = ((FVRInteractiveObject)this).m_hand.OtherHand.Input.VelLinearWorld; float num = Vector3.Distance(((FVRInteractiveObject)this).m_hand.OtherHand.PalmTransform.position, HammerFanDir.position); if (num < FanDistance && Vector3.Angle(velLinearWorld, HammerFanDir.forward) < FanAngle && ((Vector3)(ref velLinearWorld)).magnitude > FanVelocityThreshold) { if (CurrentMode == FireMode.Revolver) { CockHammerRevolver(10f); } else { CockHammerShotgun(10f); } } } private void UpdateSpinning() { //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: 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_00d8: 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_01a2: 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_0098: 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_009a: Unknown result type (might be due to invalid IL or missing references) if (!CanSpin || !((FVRInteractiveObject)this).IsHeld || (Object)(object)PoseSpinHolder == (Object)null) { return; } bool isSpinning = false; if (!m_isGateOpen && (Object)(object)((FVRInteractiveObject)this).m_hand != (Object)null && !m_isHammerCocking && !m_isHammerCocked && !((FVRInteractiveObject)this).m_hand.IsInStreamlinedMode && ((FVRInteractiveObject)this).m_hand.Input.TouchpadPressed) { Vector2 touchpadAxes = ((FVRInteractiveObject)this).m_hand.Input.TouchpadAxes; if (Vector2.Angle(touchpadAxes, Vector2.up) < 45f) { isSpinning = true; } } m_isSpinning = isSpinning; if (m_isSpinning) { Vector3 velLinearLocal = ((FVRInteractiveObject)this).m_hand.Input.VelLinearLocal; float num = Vector3.Dot(((Vector3)(ref velLinearLocal)).normalized, ((Component)this).transform.up); if (Mathf.Abs(xSpinVel) < 90f) { xSpinVel += num * Time.deltaTime * 600f; } else if (Mathf.Sign(num) == Mathf.Sign(xSpinVel)) { xSpinVel += num * Time.deltaTime * 600f; } xSpinVel = Mathf.Clamp(xSpinVel, -500f, 500f); xSpinRot += xSpinVel * Time.deltaTime * 5f; PoseSpinHolder.localEulerAngles = new Vector3(xSpinRot, 0f, 0f); xSpinVel = Mathf.Lerp(xSpinVel, 0f, Time.deltaTime * 0.6f); } else { xSpinRot = 0f; xSpinVel = 0f; PoseSpinHolder.localRotation = Quaternion.RotateTowards(PoseSpinHolder.localRotation, Quaternion.identity, Time.deltaTime * 500f); PoseSpinHolder.localEulerAngles = new Vector3(PoseSpinHolder.localEulerAngles.x, 0f, 0f); } } private void UpdateCylinderRot() { //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0247: 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) if (m_isShotgunOpen) { for (int i = 0; i < Cylinder.Chambers.Length; i++) { Cylinder.Chambers[i].IsAccessible = false; } } else if (m_isStateToggled || m_isGateOpen) { int num = PrevChamber; if (IsAccessTwoChambersBack) { num = PrevChamber2; } for (int j = 0; j < Cylinder.Chambers.Length; j++) { Cylinder.Chambers[j].IsAccessible = j == num; } if (DoesHalfCockHalfRotCylinder) { int num2 = (CurChamber + 1) % Cylinder.NumChambers; ((Component)Cylinder).transform.localRotation = Quaternion.Slerp(Cylinder.GetLocalRotationFromCylinder(CurChamber), Cylinder.GetLocalRotationFromCylinder(num2), 0.5f); } else { ((Component)Cylinder).transform.localRotation = Cylinder.GetLocalRotationFromCylinder(CurChamber); } if (DoesCylinderTranslateForward) { ((Component)Cylinder).transform.localPosition = CylinderBackPos; } } else { for (int k = 0; k < Cylinder.Chambers.Length; k++) { Cylinder.Chambers[k].IsAccessible = false; } m_tarChamberLerp = ((!m_isHammerCocking) ? 0f : m_hammerCockLerp); m_curChamberLerp = Mathf.Lerp(m_curChamberLerp, m_tarChamberLerp, Time.deltaTime * 16f); int num3 = (CurChamber + 1) % Cylinder.NumChambers; ((Component)Cylinder).transform.localRotation = Quaternion.Slerp(Cylinder.GetLocalRotationFromCylinder(CurChamber), Cylinder.GetLocalRotationFromCylinder(num3), m_curChamberLerp); if (DoesCylinderTranslateForward) { ((Component)Cylinder).transform.localPosition = Vector3.Lerp(CylinderBackPos, CylinderFrontPos, m_hammerCockLerp); } } } private void CockHammerRevolver(float speed) { if (!m_isHammerCocked && !m_isHammerCocking) { m_hammerCockSpeed = speed; m_isHammerCocking = true; ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)7, 1f); } } private void CockHammerShotgun(float speed) { if (!m_isHammerCocked && !m_isHammerCocking) { m_hammerCockSpeed = speed; m_isHammerCocking = true; ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)7, 1f); } } private void ToggleFireMode() { //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) if (!m_isGateOpen) { bool isHammerCocked = m_isHammerCocked; bool isHammerCocking = m_isHammerCocking; float hammerCockLerp = m_hammerCockLerp; if (CurrentMode == FireMode.Revolver) { CurrentMode = FireMode.Shotgun; Hammer_Rot_Uncocked = Hammer_Rot_Uncocked_Shotgun; Hammer_Rot_Cocked = Hammer_Rot_Cocked_Shotgun; ((FVRFireArm)this).RoundType = ShotgunRoundType; } else { CurrentMode = FireMode.Revolver; Hammer_Rot_Uncocked = Hammer_Rot_Uncocked_Revolver; Hammer_Rot_Cocked = Hammer_Rot_Cocked_Revolver; ((FVRFireArm)this).RoundType = m_originalRoundType; } m_TargetSelectorRotation = ((CurrentMode != 0) ? ShotgunPinRotation : RevolverPinRotation); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)15, 1f); m_isHammerCocked = isHammerCocked; m_isHammerCocking = isHammerCocking; m_hammerCockLerp = hammerCockLerp; } } private void ToggleRevolverPose(bool openGatePose) { //IL_00c4: 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_0052: 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_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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) if ((Object)(object)Pose_Main == (Object)null || (Object)(object)Pose_Toggled == (Object)null || ((FVRPhysicalObject)this).IsAltHeld || !((FVRInteractiveObject)this).IsHeld) { return; } if (!openGatePose) { ((FVRInteractiveObject)this).PoseOverride.localPosition = Pose_Main.localPosition; ((FVRInteractiveObject)this).PoseOverride.localRotation = Pose_Main.localRotation; if ((Object)(object)((FVRInteractiveObject)this).m_grabPointTransform != (Object)null) { ((FVRInteractiveObject)this).m_grabPointTransform.localPosition = Pose_Main.localPosition; ((FVRInteractiveObject)this).m_grabPointTransform.localRotation = Pose_Main.localRotation; } } else { ((FVRInteractiveObject)this).PoseOverride.localPosition = Pose_Toggled.localPosition; ((FVRInteractiveObject)this).PoseOverride.localRotation = Pose_Toggled.localRotation; if ((Object)(object)((FVRInteractiveObject)this).m_grabPointTransform != (Object)null) { ((FVRInteractiveObject)this).m_grabPointTransform.localPosition = Pose_Toggled.localPosition; ((FVRInteractiveObject)this).m_grabPointTransform.localRotation = Pose_Toggled.localRotation; } } } private void ToggleRevolverGate(bool open) { //IL_0087: Unknown result type (might be due to invalid IL or missing references) if (m_isShotgunOpen || CurrentMode != 0 || m_isGateOpen == open) { return; } m_isGateOpen = open; ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)((!open) ? 31 : 30), 1f); if (!open) { ResetHammerState(); if ((Object)(object)Hammer != (Object)null) { Hammer.localEulerAngles = new Vector3(Hammer_Rot_Uncocked, 0f, 0f); } return; } m_isHammerCocking = false; m_isHammerCocked = false; float num = Hammer_Rot_Cocked_Revolver - Hammer_Rot_Uncocked_Revolver; if (Mathf.Abs(num) > 0.001f) { float num2 = (Hammer_Rot_Halfcock_Revolver - Hammer_Rot_Uncocked_Revolver) / num; num2 = Mathf.Clamp01(num2); m_hammerCockLerp = num2; } } private void AdvanceCylinder() { m_curChamber++; if (m_curChamber >= Cylinder.NumChambers) { m_curChamber = 0; } ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)0, 1f); } private void EjectAccessibleRevolverChamber() { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0073: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)Cylinder == (Object)null || Cylinder.Chambers == null) { return; } for (int i = 0; i < Cylinder.Chambers.Length; i++) { FVRFireArmChamber val = Cylinder.Chambers[i]; if (val.IsAccessible) { if (val.IsFull) { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)29, 1f); } val.EjectRound(((Component)val).transform.position + ((Component)val).transform.forward * 0.0025f, -((Component)val).transform.forward, Vector3.zero, false); break; } } } public void PopOutEmpties() { if ((Object)(object)ShotgunChamber != (Object)null && ShotgunChamber.IsFull && ShotgunChamber.IsSpent) { PopOutRound(ShotgunChamber); } } public void PopOutRound(FVRFireArmChamber chamber) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)21, 1f); chamber.EjectRound(((Component)chamber).transform.position + ((Component)chamber).transform.forward * base.EjectOffset, ((Component)chamber).transform.forward * base.EjectSpeed, Vector3.right, false); ((FVRFireArm)this).AddGas(ShotgunGasOutIndex); } public void BreakOpen() { //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_005b: 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_0074: Unknown result type (might be due to invalid IL or missing references) if (!m_isShotgunOpen && !m_isGateOpen) { m_isShotgunOpen = true; ((BreakActionWeapon)this).SetIsExternallyUnlatched(true); if (CurrentMode == FireMode.Revolver) { ((FVRFireArm)this).RoundType = ShotgunRoundType; } if ((Object)(object)hinge != (Object)null) { JointLimits limits = hinge.limits; ((JointLimits)(ref limits)).max = hingeLimit; hinge.limits = limits; } if ((Object)(object)ShotgunChamber != (Object)null) { ShotgunChamber.IsAccessible = true; } } } public void BreakClose() { //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) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) if (m_isShotgunOpen) { m_isShotgunOpen = false; mLemat_HasEjectedThisOpen = false; ((BreakActionWeapon)this).SetIsExternallyUnlatched(false); if (CurrentMode == FireMode.Revolver) { ((FVRFireArm)this).RoundType = m_originalRoundType; } if ((Object)(object)hinge != (Object)null) { JointLimits limits = hinge.limits; ((JointLimits)(ref limits)).max = 0f; hinge.limits = limits; ((Component)hinge).transform.localPosition = m_HingeStartPos; } if ((Object)(object)ShotgunChamber != (Object)null) { ShotgunChamber.IsAccessible = false; } } } private void CheckQuickBeltSlotsForAmmo() { //IL_00fe: 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_00e1: Unknown result type (might be due to invalid IL or missing references) FVRViveHand val = null; FVRViveHand[] hands = GM.CurrentMovementManager.Hands; foreach (FVRViveHand val2 in hands) { if ((Object)(object)val2.CurrentInteractable == (Object)(object)this) { val = val2; break; } } if ((Object)(object)val == (Object)null) { return; } FVRViveHand val3 = ((!((Object)(object)val == (Object)(object)GM.CurrentMovementManager.Hands[0])) ? GM.CurrentMovementManager.Hands[0] : GM.CurrentMovementManager.Hands[1]); if ((Object)(object)val3.CurrentHoveredQuickbeltSlot != (Object)null && val3.CurrentHoveredQuickbeltSlot.HeldObject is FVRFireArmRound) { FVRInteractiveObject heldObject = val3.CurrentHoveredQuickbeltSlot.HeldObject; FVRFireArmRound val4 = (FVRFireArmRound)(object)((heldObject is FVRFireArmRound) ? heldObject : null); if (m_isFilteringChambers) { FireArmRoundType? lastFilteredType = m_lastFilteredType; if (lastFilteredType.GetValueOrDefault() == val4.RoundType && lastFilteredType.HasValue) { return; } } FilterChambersForRoundType(val4.RoundType); } else if (m_isFilteringChambers) { RestoreAllChambers(); } } private void FilterChambersForRoundType(FireArmRoundType roundType) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: 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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) m_isFilteringChambers = true; m_lastFilteredType = roundType; m_savedRoundType = ((FVRFireArm)this).RoundType; ((FVRFireArm)this).RoundType = roundType; ((FVRFireArm)this).FChambers.Clear(); foreach (FVRFireArmChamber allChamber in m_allChambers) { if (allChamber.RoundType == roundType) { ((FVRFireArm)this).FChambers.Add(allChamber); } } } private void RestoreAllChambers() { //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) ((FVRFireArm)this).RoundType = m_savedRoundType; m_isFilteringChambers = false; m_lastFilteredType = null; ((FVRFireArm)this).FChambers.Clear(); ((FVRFireArm)this).FChambers.AddRange(m_allChambers); } } public class LematForegrip : FVRAlternateGrip { [Header("Shotgun Setup")] public Transform ShotgunBase; public HingeJoint Hinge; private Vector3 localPosStart; private Rigidbody RB; private Lemat Wep; private float m_initialDamp = 0.05f; private float m_initialSpring = 0.05f; public override void Awake() { //IL_0013: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) ((FVRAlternateGrip)this).Awake(); localPosStart = ((Component)Hinge).transform.localPosition; RB = ((Compo