Decompiled source of HuntLematCarbine v1.0.2
HuntLematCarbine.dll
Decompiled a week ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; 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 UnityEditor; 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.HuntLematCarbine { [BepInPlugin("BitWizrd.HuntLematCarbine", "HuntLematCarbine", "1.0.2")] [BepInProcess("h3vr.exe")] [Description("Built with MeatKit")] [BepInDependency("h3vr.otherloader", "1.3.0")] public class HuntLematCarbinePlugin : 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.HuntLematCarbine"); OtherLoader.RegisterDirectLoad(BasePath, "BitWizrd.HuntLematCarbine", "", "lemat carbine", "", ""); } } } public class BloodBondSR : MonoBehaviour { private void Awake() { string name = "Ammo_69_CashMoney_D100(Clone)"; ((Object)((Component)this).gameObject).name = name; Collider[] componentsInChildren = ((Component)this).GetComponentsInChildren<Collider>(true); for (int i = 0; i < componentsInChildren.Length; i++) { ((Object)((Component)componentsInChildren[i]).gameObject).name = name; } } } 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 CooldownSound : MonoBehaviour { public ClosedBoltWeapon weapon; public AudioClip[] audioClips; public float volume = 1f; public int minShots = 5; public int maxShots = 10; public float minDelay = 0.5f; public float maxDelay = 2f; public float resetTime = 1.5f; private AudioSource audioSource; private int shotCounter = 0; private float lastShotTime; private bool lastRoundSpent; private int nextShotThreshold; private bool isPlayingSound = false; private void Start() { if ((Object)(object)weapon == (Object)null) { weapon = ((Component)this).GetComponent<ClosedBoltWeapon>(); } if ((Object)(object)weapon == (Object)null) { Debug.LogError((object)"CooldownSound: Weapon reference is missing. Attach this script to a ClosedBoltWeapon."); return; } audioSource = ((Component)weapon).gameObject.GetComponent<AudioSource>(); if ((Object)(object)audioSource == (Object)null) { audioSource = ((Component)weapon).gameObject.AddComponent<AudioSource>(); } audioSource.spatialBlend = 1f; audioSource.playOnAwake = false; audioSource.rolloffMode = (AudioRolloffMode)0; lastRoundSpent = weapon.Chamber.IsSpent; SetNewShotThreshold(); } private void Update() { DetectFiring(); } private void DetectFiring() { if (weapon.Chamber.IsFull && weapon.Chamber.IsSpent && !lastRoundSpent) { OnWeaponFired(); } lastRoundSpent = weapon.Chamber.IsSpent; } private void OnWeaponFired() { float num = Time.time - lastShotTime; if (num > resetTime) { shotCounter = 0; SetNewShotThreshold(); } shotCounter++; lastShotTime = Time.time; if (shotCounter >= nextShotThreshold) { ((MonoBehaviour)this).StartCoroutine(PlaySoundWithDelay()); shotCounter = 0; SetNewShotThreshold(); } } private IEnumerator PlaySoundWithDelay() { if (!isPlayingSound) { isPlayingSound = true; float delay = Random.Range(minDelay, maxDelay); yield return (object)new WaitForSeconds(delay); if (audioClips.Length > 0) { int index = Random.Range(0, audioClips.Length); audioSource.clip = audioClips[index]; audioSource.PlayOneShot(audioSource.clip, volume); yield return (object)new WaitForSeconds(audioSource.clip.length); } isPlayingSound = false; } } private void SetNewShotThreshold() { nextShotThreshold = Random.Range(minShots, maxShots + 1); } } public class CustomWaggleJoint : MonoBehaviour { public float distanceLimit = 0.25f; public float angleLimitLeft = 45f; public float angleLimitRight = 45f; public float gravityScale = 1f; public bool useSpring; public float springApproachRate = 0.95f; public float damping; public Transform hingeGraphic; public Vector3 hingeGraphicRotationOffset; public bool invertWaggleAxis; public bool ManualExecution; public float onHitLimitCooldown = 0.05f; public Vector3 waggleAxis = Vector3.up; public Vector3 rotationAxis = Vector3.up; [Header("Gizmo Options")] public bool debugGizmos = false; public bool showRotationExtremes = false; public bool showRotationDirectionArrows = false; private Vector3 particlePos; private Vector3 particleVel; private bool leftCatchState; private bool rightCatchState; private float lastTouchTime = float.MinValue; private Vector3 EffectiveWaggleDir() { //IL_0023: 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) //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_0033: Unknown result type (might be due to invalid IL or missing references) return ((Component)this).transform.TransformDirection((!invertWaggleAxis) ? waggleAxis : (-waggleAxis)); } private void GetEffectiveAngleLimits(out float effectiveAngleMin, out float effectiveAngleMax) { if (invertWaggleAxis) { effectiveAngleMin = 0f - angleLimitLeft; effectiveAngleMax = angleLimitRight; } else { effectiveAngleMin = 0f - angleLimitRight; effectiveAngleMax = angleLimitLeft; } } public void ResetParticlePos() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) particlePos = ((Component)this).transform.position + EffectiveWaggleDir() * distanceLimit; particleVel = Vector3.zero; } private void OnHitLimit(float angularVelocity) { } public void Execute() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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) //IL_0045: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: 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_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_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: 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_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: 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_0101: 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_0092: 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_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_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_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) float deltaTime = Time.deltaTime; Transform transform = ((Component)this).transform; Vector3 val = Physics.gravity * gravityScale; Vector3 val2 = particlePos; Vector3 val3 = particleVel * Mathf.Pow(1f - damping, deltaTime) + val * deltaTime; Vector3 val4 = val2 + val3 * deltaTime; Vector3 val5 = transform.TransformDirection(((Vector3)(ref rotationAxis)).normalized); Vector3 val6 = EffectiveWaggleDir(); Vector3 position = transform.position; if (useSpring) { val4 = Vector3.Lerp(val4, position + val6 * distanceLimit, 1f - Mathf.Pow(1f - springApproachRate, deltaTime)); } GetEffectiveAngleLimits(out var effectiveAngleMin, out var effectiveAngleMax); particlePos = ProjectOnHinge(val4, position, val5, val6, distanceLimit, effectiveAngleMin, effectiveAngleMax); particleVel = (particlePos - val2) / deltaTime; if ((Object)(object)hingeGraphic != (Object)null) { hingeGraphic.rotation = Quaternion.LookRotation(particlePos - transform.position, val5) * Quaternion.Euler(hingeGraphicRotationOffset); } } private Vector3 ProjectOnHinge(Vector3 point, Vector3 hingePivot, Vector3 hingeAxis, Vector3 hingeDirection, float distanceLimit, float angleMin, float angleMax) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002a: 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_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) float num = ToHingeAngle(point, hingePivot, hingeAxis, hingeDirection); num = Mathf.Clamp(num, angleMin, angleMax); Vector3 val = Quaternion.AngleAxis(num, hingeAxis) * hingeDirection; return val * distanceLimit + hingePivot; } private float ToHingeAngle(Vector3 point, Vector3 hingePivot, Vector3 hingeAxis, Vector3 hingeDirection) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: 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) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) Vector3 val = point - hingePivot; Vector3 val2 = Vector3.ProjectOnPlane(val, hingeAxis); Vector3 normalized = ((Vector3)(ref val2)).normalized; return SignedAngle(hingeDirection, normalized, hingeAxis); } private float SignedAngle(Vector3 from, Vector3 to, Vector3 axis) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000c: 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) float num = Vector3.Angle(from, to); return num * Mathf.Sign(Vector3.Dot(axis, Vector3.Cross(from, to))); } private void Start() { ResetParticlePos(); } private void Update() { if (!ManualExecution) { Execute(); } } private void OnDrawGizmosSelected() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: 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_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: 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_0072: 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_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: 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_008c: 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_009b: Unknown result type (might be due to invalid IL or missing references) //IL_009c: 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_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: 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_00ba: 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_00c5: 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_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: 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_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_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_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0131: 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_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_017a: 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_0182: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01da: 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_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: 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_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_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) if (debugGizmos && !((Object)(object)Selection.activeGameObject != (Object)(object)((Component)this).gameObject)) { Transform transform = ((Component)this).transform; Vector3 position = transform.position; Vector3 val = EffectiveWaggleDir(); Vector3 val2 = transform.TransformDirection(((Vector3)(ref rotationAxis)).normalized); Vector3 val3 = position + val * distanceLimit; Gizmos.color = Color.white; float num = 0.01f; Gizmos.DrawLine(position + Vector3.left * num, position + Vector3.right * num); Gizmos.DrawLine(position + Vector3.up * num, position + Vector3.down * num); Gizmos.DrawLine(position + Vector3.forward * num, position + Vector3.back * num); Handles.BeginGUI(); Handles.Label(position, "Pivot"); Handles.EndGUI(); Gizmos.color = Color.green; Gizmos.DrawLine(position, val3); GetEffectiveAngleLimits(out var effectiveAngleMin, out var effectiveAngleMax); Vector3 val4 = Quaternion.AngleAxis(effectiveAngleMax, val2) * val; Vector3 val5 = Quaternion.AngleAxis(effectiveAngleMin, val2) * val; Vector3 val6 = position + val4 * distanceLimit; Vector3 val7 = position + val5 * distanceLimit; Gizmos.color = Color.cyan; Gizmos.DrawLine(position, val6); Gizmos.DrawLine(position, val7); Handles.color = Color.yellow; Handles.DrawWireArc(position, val2, val5, effectiveAngleMax - effectiveAngleMin, distanceLimit * 0.5f); if (Application.isPlaying) { Gizmos.color = Color.red; float num2 = 0.01f; Gizmos.DrawLine(particlePos + Vector3.left * num2, particlePos + Vector3.right * num2); Gizmos.DrawLine(particlePos + Vector3.up * num2, particlePos + Vector3.down * num2); Gizmos.DrawLine(particlePos + Vector3.forward * num2, particlePos + Vector3.back * num2); } } } } namespace BitWizrd.RevolverMod { public class DoubleActionEjectorRod : FVRInteractiveObject { public DoubleActionLoadingGateRevolver revolver; } public class DoubleActionLoadingGateEjectorRod : FVRInteractiveObject { public DoubleActionLoadingGateRevolver Revolver; public override void SimpleInteraction(FVRViveHand hand) { ((FVRInteractiveObject)this).SimpleInteraction(hand); Revolver.EjectPrevCylinder(); } } public class DoubleActionLoadingGateRevolver : FVRFireArm { [Header("Single Action Revolver")] public bool AllowsSuppressor; public Transform Hammer; public Transform LoadingGate; public Transform Trigger; public Transform EjectorRod; public SingleActionRevolverCylinder Cylinder; public Transform HammerFanDir; private int m_curChamber; private float m_curChamberLerp; private float m_tarChamberLerp; [Header("Component Movement Params")] 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 Vector3 EjectorRod_Pos_Forward; public Vector3 EjectorRod_Pos_Rearward; public bool DoesCylinderTranslateForward; public bool IsAccessTwoChambersBack; public Vector3 CylinderBackPos; public Vector3 CylinderFrontPos; [Header("Spinning Config")] public Transform PoseSpinHolder; public bool CanSpin = true; private bool m_isSpinning; [Header("StateToggling")] public bool StateToggles = true; private bool m_isStateToggled; public Transform Pose_Main; public Transform Pose_Toggled; public float TriggerThreshold = 0.9f; 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; [Header("DoubleAction Config")] private float m_tarTriggerFloat; private float m_tarRealTriggerFloat; private float m_triggerCurrentRot; private float m_curTriggerFloat; private float m_curRealTriggerFloat; private float lastTriggerRot; private RecockingState m_recockingState; private float m_recockingLerp; private bool m_shouldRecock; private bool DoesFiringRecock; private bool m_hasTriggerCycled; public bool CanManuallyCockHammer; private bool m_isHammerLocked; private float m_hammerCurrentRot; private Vector2 RecockingSpeeds = new Vector2(8f, 3f); public Transform RecockingPiece; public Transform RecockingPoint_Forward; public Transform RecockingPoint_Rearward; public float ejectedRoundOffset; public bool doesToggleStateHalfRotatesCylinder; public int CurChamber { get { return m_curChamber; } set { m_curChamber = value % Cylinder.NumChambers; } } public int NextChamber => (m_curChamber + 1) % 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_0058: 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) ((FVRFireArm)this).Awake(); FVRFireArmChamber[] chambers = Cylinder.Chambers; foreach (FVRFireArmChamber item in chambers) { base.FChambers.Add(item); } 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_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_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_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: 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) ((FVRPhysicalObject)this).UpdateInteraction(hand); m_isSpinning = false; if (!((FVRPhysicalObject)this).IsAltHeld) { if (!m_isStateToggled) { if (hand.Input.TouchpadPressed && !hand.IsInStreamlinedMode && (double)Vector2.Angle(hand.Input.TouchpadAxes, Vector2.up) < 45.0) { m_isSpinning = true; } if (hand.IsInStreamlinedMode) { if (hand.Input.BYButtonDown && StateToggles) { ToggleState(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)17, 1f); } } else if (hand.Input.TouchpadDown && (double)Vector2.Angle(hand.Input.TouchpadAxes, Vector2.left) < 45.0 && 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 ((double)Vector2.Angle(hand.Input.TouchpadAxes, Vector2.left) < 45.0 && StateToggles) { ToggleState(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)18, 1f); } else if ((double)Vector2.Angle(hand.Input.TouchpadAxes, Vector2.right) < 45.0) { AdvanceCylinder(); } } if (hand.Input.TriggerDown) { EjectPrevCylinder(); } } } UpdateTriggerHammer(); UpdateCylinderRot(); UpdateCylinderRelease(); if (!((FVRInteractiveObject)this).IsHeld) { m_isSpinning = false; } } 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 ((double)timeSinceColFire < 3.0) { timeSinceColFire += Time.deltaTime; } ((FVRFireArm)this).FVRFixedUpdate(); UpdateRecocking(); } private void UpdateRecocking() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Invalid comparison between Unknown and I4 //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Invalid comparison between Unknown and I4 //IL_0085: 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_009b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0116: 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_00df: Unknown result type (might be due to invalid IL or missing references) RecockingState recockingState = m_recockingState; if ((int)recockingState != 1) { if ((int)recockingState == 2) { m_recockingLerp -= Time.deltaTime * RecockingSpeeds.y; if ((double)m_recockingLerp <= 0.0) { m_recockingState = (RecockingState)0; } m_recockingLerp = Mathf.Clamp(m_recockingLerp, 0f, 1f); RecockingPiece.position = Vector3.Lerp(RecockingPoint_Forward.position, RecockingPoint_Rearward.position, m_recockingLerp); } } else { m_recockingLerp += Time.deltaTime * RecockingSpeeds.x; if ((double)m_recockingLerp >= 1.0) { m_recockingState = (RecockingState)2; m_isHammerLocked = true; } m_recockingLerp = Mathf.Clamp(m_recockingLerp, 0f, 1f); RecockingPiece.position = Vector3.Lerp(RecockingPoint_Forward.position, RecockingPoint_Rearward.position, m_recockingLerp); } } private void InitiateRecock() { //IL_0002: 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) if ((int)m_recockingState == 0) { m_recockingLerp = 0f; m_recockingState = (RecockingState)1; } } private void UpdateTriggerHammer() { //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_006a: 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_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_02a1: Unknown result type (might be due to invalid IL or missing references) //IL_0523: Unknown result type (might be due to invalid IL or missing references) //IL_057b: Unknown result type (might be due to invalid IL or missing references) //IL_0561: Unknown result type (might be due to invalid IL or missing references) //IL_0379: Unknown result type (might be due to invalid IL or missing references) //IL_03fb: Unknown result type (might be due to invalid IL or missing references) //IL_0400: Unknown result type (might be due to invalid IL or missing references) if (((FVRInteractiveObject)this).IsHeld && !m_isStateToggled && !m_isHammerCocked && !m_isHammerCocking && (Object)(object)((FVRInteractiveObject)this).m_hand.OtherHand != (Object)null) { Vector3 velLinearWorld = ((FVRInteractiveObject)this).m_hand.OtherHand.Input.VelLinearWorld; if (Vector3.Distance(((FVRInteractiveObject)this).m_hand.OtherHand.PalmTransform.position, HammerFanDir.position) < 0.15f && Vector3.Angle(velLinearWorld, HammerFanDir.forward) < 60f && ((Vector3)(ref velLinearWorld)).magnitude > 1f) { CockHammer(10f); } } if (((FVRInteractiveObject)this).m_hasTriggeredUpSinceBegin && !m_isSpinning && !m_isStateToggled) { m_tarTriggerFloat = ((FVRInteractiveObject)this).m_hand.Input.TriggerFloat; m_tarRealTriggerFloat = ((FVRInteractiveObject)this).m_hand.Input.TriggerFloat; } else { m_tarTriggerFloat = 0f; m_tarRealTriggerFloat = 0f; } if (m_isHammerLocked) { m_tarTriggerFloat += 0.8f; m_triggerCurrentRot = Mathf.Lerp(Trigger_Rot_Forward, Trigger_Rot_Rearward, m_curTriggerFloat); } else { m_triggerCurrentRot = Mathf.Lerp(Trigger_Rot_Forward, Trigger_Rot_Rearward, m_curTriggerFloat); } m_curTriggerFloat = Mathf.MoveTowards(m_curTriggerFloat, m_tarTriggerFloat, Time.deltaTime * 14f); m_curRealTriggerFloat = Mathf.MoveTowards(m_curRealTriggerFloat, m_tarRealTriggerFloat, Time.deltaTime * 14f); if (DoesCylinderTranslateForward) { ((Component)Cylinder).transform.localPosition = Vector3.Lerp(CylinderBackPos, CylinderFrontPos, m_curTriggerFloat); } if (Mathf.Abs(m_triggerCurrentRot - lastTriggerRot) > 0.01f && (Object)(object)Trigger != (Object)null) { Trigger.localEulerAngles = new Vector3(m_triggerCurrentRot, 0f, 0f); } lastTriggerRot = m_triggerCurrentRot; if (m_shouldRecock) { m_shouldRecock = false; InitiateRecock(); } if (!m_hasTriggerCycled && !DoesFiringRecock) { bool flag = false; if (DoesFiringRecock && (int)m_recockingState != 0) { flag = true; } if (!flag && m_curTriggerFloat >= 0.98f && !((FVRInteractiveObject)this).m_hand.Input.TouchpadPressed) { if (!m_isStateToggled) { m_hasTriggerCycled = true; m_isHammerLocked = false; CurChamber++; m_curChamberLerp = 0f; m_tarChamberLerp = 0f; ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); Fire(); if (DoesFiringRecock) { m_shouldRecock = true; } } } else if (m_curTriggerFloat <= 0.08f && !m_isHammerLocked && CanManuallyCockHammer) { bool flag2 = false; if (DoesFiringRecock && (int)m_recockingState != 0) { flag2 = true; } if (!((FVRPhysicalObject)this).IsAltHeld && !flag2 && !m_isStateToggled) { if (((FVRInteractiveObject)this).m_hand.IsInStreamlinedMode) { if (((FVRInteractiveObject)this).m_hand.Input.AXButtonDown) { CockHammer(5f); } } else if (((FVRInteractiveObject)this).m_hand.Input.TouchpadDown && Vector2.Angle(((FVRInteractiveObject)this).m_hand.Input.TouchpadAxes, Vector2.down) < 45f) { CockHammer(5f); } } } } else if (m_hasTriggerCycled && m_curRealTriggerFloat <= 0.08f) { m_hasTriggerCycled = false; ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)16, 1f); } m_hammerCurrentRot = (m_hasTriggerCycled ? (m_isHammerLocked ? Mathf.Lerp(m_hammerCurrentRot, Hammer_Rot_Cocked, Time.deltaTime * 10f) : Mathf.Lerp(m_hammerCurrentRot, Hammer_Rot_Uncocked, Time.deltaTime * 30f)) : (m_isHammerLocked ? Mathf.Lerp(m_hammerCurrentRot, Hammer_Rot_Cocked, Time.deltaTime * 10f) : Mathf.Lerp(Hammer_Rot_Uncocked, Hammer_Rot_Cocked, m_curTriggerFloat))); if ((Object)(object)Hammer != (Object)null) { Hammer.localEulerAngles = new Vector3(m_hammerCurrentRot, 0f, 0f); } if ((Object)(object)LoadingGate != (Object)null) { LoadingGate.localEulerAngles = ((!m_isStateToggled) ? new Vector3(0f, 0f, LoadingGate_Rot_Closed) : new Vector3(0f, 0f, LoadingGate_Rot_Open)); } } private void UpdateCylinderRelease() { //IL_00b8: Unknown result type (might be due to invalid IL or missing references)