Decompiled source of SMG5 Sakura v1.0.1
SMG5_Sakura.dll
Decompiled 2 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using FistVR; using HarmonyLib; using OpenScripts2; using OtherLoader; using Steamworks; using UnityEngine; using UnityEngine.Serialization; using UnityEngine.UI; [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 MeatKit { public class HideInNormalInspectorAttribute : PropertyAttribute { } } namespace Niko666.SMG5_Sakura { [BepInPlugin("Niko666.SMG5_Sakura", "SMG5_Sakura", "1.0.1")] [BepInProcess("h3vr.exe")] [Description("Built with MeatKit")] [BepInDependency("h3vr.otherloader", "1.3.0")] public class SMG5_SakuraPlugin : 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(), "Niko666.SMG5_Sakura"); OtherLoader.RegisterDirectLoad(BasePath, "Niko666.SMG5_Sakura", "", "", "mp5sakura", ""); } } } namespace Niko666 { public class AudioRecoilForDiffModes : MonoBehaviour { public ClosedBoltWeapon Weapon; public int FireSelectorPosition1; public int FireSelectorPosition2; public FVRFireArmRecoilProfile Recoil1; public FVRFireArmRecoilProfile Recoil2; public FVRFirearmAudioSet AudioSet1; public FVRFirearmAudioSet AudioSet2; public bool _hasSetStartAudio = false; public bool _hasSetStopAudio = false; public void Update() { if (!((Object)(object)((FVRInteractiveObject)Weapon).m_hand != (Object)null)) { return; } if (Weapon.m_fireSelectorMode == FireSelectorPosition1) { _hasSetStartAudio = false; if (!_hasSetStopAudio) { ((FVRFireArm)Weapon).RecoilProfile = Recoil1; ((FVRFireArm)Weapon).AudioClipSet = AudioSet1; } _hasSetStopAudio = true; } else if (Weapon.m_fireSelectorMode == FireSelectorPosition2) { _hasSetStopAudio = false; if (!_hasSetStartAudio) { ((FVRFireArm)Weapon).RecoilProfile = Recoil2; ((FVRFireArm)Weapon).AudioClipSet = AudioSet2; } _hasSetStartAudio = true; } } } public class ConsumeMultipleAmmoPerShot : MonoBehaviour { public ClosedBoltWeapon Weapon; public FVRFireArmChamber Chamber; public int FireSelectorPosition; public int AmountToConsume; [HideInInspector] public bool _hasConsumedAmmo = false; public void Update() { if ((Object)(object)((FVRInteractiveObject)Weapon).m_hand != (Object)null && Weapon.m_fireSelectorMode == FireSelectorPosition && !Chamber.IsFull) { if (!_hasConsumedAmmo && (Object)(object)((FVRFireArm)Weapon).Magazine != (Object)null && ((FVRFireArm)Weapon).Magazine.HasARound()) { for (int i = 1; i < AmountToConsume; i++) { ((FVRFireArm)Weapon).Magazine.RemoveRound(); } } _hasConsumedAmmo = true; } if ((Object)(object)((FVRInteractiveObject)Weapon).m_hand != (Object)null && Chamber.IsFull && !Chamber.IsSpent) { _hasConsumedAmmo = false; } } } public class MuzzlePointForDiffModes : MonoBehaviour { public ClosedBoltWeapon Weapon; public int FireSelectorPosition1; public int FireSelectorPosition2; public Transform Muzzle1; public Transform Muzzle2; public void Update() { if ((Object)(object)((FVRInteractiveObject)Weapon).m_hand != (Object)null) { if (Weapon.m_fireSelectorMode == FireSelectorPosition1) { ((FVRFireArm)Weapon).MuzzlePos = Muzzle1; ((FVRFireArm)Weapon).CurrentMuzzle = Muzzle1; } if (Weapon.m_fireSelectorMode == FireSelectorPosition2) { ((FVRFireArm)Weapon).MuzzlePos = Muzzle2; ((FVRFireArm)Weapon).CurrentMuzzle = Muzzle2; } } } } public class PlayAnimWhenModeChange : MonoBehaviour { public ClosedBoltWeapon Weapon; public Animator Animator; public string AnimationNode1Name = "animation1"; public string AnimationNode2Name = "animation2"; public int FireSelectorPosition1; public int FireSelectorPosition2; private Vector2 dir = Vector2.left; public void Awake() { Animator.cullingMode = (AnimatorCullingMode)0; } public void Update() { //IL_003d: 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 (!((Object)(object)((FVRInteractiveObject)Weapon).m_hand != (Object)null)) { return; } if (!((FVRInteractiveObject)Weapon).m_hand.IsInStreamlinedMode && Vector2.Angle(((FVRInteractiveObject)Weapon).m_hand.Input.TouchpadAxes, dir) <= 45f && ((Vector2)(ref ((FVRInteractiveObject)Weapon).m_hand.Input.TouchpadAxes)).magnitude > 0.4f && ((FVRInteractiveObject)Weapon).m_hand.Input.TouchpadPressed) { if (Weapon.m_fireSelectorMode == FireSelectorPosition1) { Animator.Play(AnimationNode1Name); } else if (Weapon.m_fireSelectorMode == FireSelectorPosition2) { Animator.Play(AnimationNode2Name); } } if (((FVRInteractiveObject)Weapon).m_hand.IsInStreamlinedMode && ((FVRInteractiveObject)Weapon).m_hand.Input.BYButtonPressed) { if (Weapon.m_fireSelectorMode == FireSelectorPosition1) { Animator.Play(AnimationNode1Name); } else if (Weapon.m_fireSelectorMode == FireSelectorPosition2) { Animator.Play(AnimationNode2Name); } } } } public class PlayAudioWhenModeChange : MonoBehaviour { public ClosedBoltWeapon Weapon; public int SemiAutoFireSelectorPosition; public int FullAutoFireSelectorPosition; public AudioClip FullAutoAudioClips; public AudioClip SemiAutoAudioClips; public AudioSource AudioSource; private Vector2 dir = Vector2.left; public void Update() { //IL_003d: 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 (!((Object)(object)((FVRInteractiveObject)Weapon).m_hand != (Object)null)) { return; } if (!((FVRInteractiveObject)Weapon).m_hand.IsInStreamlinedMode && Vector2.Angle(((FVRInteractiveObject)Weapon).m_hand.Input.TouchpadAxes, dir) <= 45f && ((Vector2)(ref ((FVRInteractiveObject)Weapon).m_hand.Input.TouchpadAxes)).magnitude > 0.4f && ((FVRInteractiveObject)Weapon).m_hand.Input.TouchpadPressed) { if (Weapon.m_fireSelectorMode == SemiAutoFireSelectorPosition) { AudioSource.clip = SemiAutoAudioClips; if (!AudioSource.isPlaying) { AudioSource.Play(); } } else if (Weapon.m_fireSelectorMode == FullAutoFireSelectorPosition) { AudioSource.clip = FullAutoAudioClips; if (!AudioSource.isPlaying) { AudioSource.Play(); } } } if (!((FVRInteractiveObject)Weapon).m_hand.IsInStreamlinedMode || !((FVRInteractiveObject)Weapon).m_hand.Input.BYButtonPressed) { return; } if (Weapon.m_fireSelectorMode == SemiAutoFireSelectorPosition) { AudioSource.clip = SemiAutoAudioClips; if (!AudioSource.isPlaying) { AudioSource.Play(); } } else if (Weapon.m_fireSelectorMode == FullAutoFireSelectorPosition) { AudioSource.clip = FullAutoAudioClips; if (!AudioSource.isPlaying) { AudioSource.Play(); } } } } public class PlayAudioWhenTransform : MonoBehaviour { public enum dirtype { x, y, z, w } public enum transformtype { position, rotation, scale, quaternion, quaternionPresentedEuler } [Header("Object Being Observed")] public GameObject ObservedObject; public dirtype DirectionOfObservation; public transformtype TransformationTypeOfObservedObject; public float StartOfObservation; public float StopOfObservation; [Header("Audio")] public AudioClip AudioClipsStartOfObservation; public AudioClip AudioClipsStopOfObservation; public AudioSource AudioSource; [HideInInspector] public float observationpoint; [HideInInspector] public bool _isObservedObjectNotNull; public bool _hasPlayedStartAudio = false; public bool _hasPlayedStopAudio = false; public void Start() { _isObservedObjectNotNull = (Object)(object)ObservedObject != (Object)null; _hasPlayedStartAudio = false; _hasPlayedStopAudio = false; } public void Update() { //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_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_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_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_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) if (_isObservedObjectNotNull) { switch (TransformationTypeOfObservedObject) { case transformtype.position: { Vector3 localPosition = ObservedObject.transform.localPosition; observationpoint = ((Vector3)(ref localPosition))[(int)DirectionOfObservation]; break; } case transformtype.rotation: { Vector3 localEulerAngles = ObservedObject.transform.localEulerAngles; observationpoint = ((Vector3)(ref localEulerAngles))[(int)DirectionOfObservation]; break; } case transformtype.scale: { Vector3 localScale = ObservedObject.transform.localScale; observationpoint = ((Vector3)(ref localScale))[(int)DirectionOfObservation]; break; } case transformtype.quaternion: { Quaternion localRotation2 = ObservedObject.transform.localRotation; observationpoint = ((Quaternion)(ref localRotation2))[(int)DirectionOfObservation]; break; } case transformtype.quaternionPresentedEuler: { Quaternion localRotation = ObservedObject.transform.localRotation; observationpoint = ((Quaternion)(ref localRotation))[(int)DirectionOfObservation] * 180f; break; } } } if (observationpoint == StopOfObservation) { _hasPlayedStartAudio = false; if (!_hasPlayedStopAudio) { AudioSource.clip = AudioClipsStopOfObservation; if (!AudioSource.isPlaying) { AudioSource.PlayOneShot(AudioClipsStopOfObservation, 0.4f); } } _hasPlayedStopAudio = true; } if (observationpoint != StartOfObservation) { return; } _hasPlayedStopAudio = false; if (!_hasPlayedStartAudio) { AudioSource.clip = AudioClipsStartOfObservation; if (!AudioSource.isPlaying) { AudioSource.PlayOneShot(AudioClipsStartOfObservation, 0.4f); } _hasPlayedStartAudio = true; } } } public class RoundClassForDiffModes : MonoBehaviour { public ClosedBoltWeapon Weapon; public int FireSelectorPosition1; public int FireSelectorPosition2; public FireArmRoundClass RoundClass1; public FireArmRoundClass RoundClass2; public void Update() { //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: 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_0157: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)((FVRInteractiveObject)Weapon).m_hand != (Object)null) { if (Weapon.m_fireSelectorMode == FireSelectorPosition1 && (Object)(object)Weapon.Chamber != (Object)null && (Object)(object)Weapon.Chamber.m_round != (Object)null && Weapon.Chamber.m_round.RoundClass != RoundClass1) { Weapon.Chamber.m_round = ((AnvilAsset)AM.GetRoundSelfPrefab(Weapon.Chamber.m_round.RoundType, RoundClass1)).GetGameObject().GetComponent<FVRFireArmRound>(); Weapon.Chamber.UpdateProxyDisplay(); } if (Weapon.m_fireSelectorMode == FireSelectorPosition2 && (Object)(object)Weapon.Chamber != (Object)null && (Object)(object)Weapon.Chamber.m_round != (Object)null && Weapon.Chamber.m_round.RoundClass != RoundClass2) { Weapon.Chamber.m_round = ((AnvilAsset)AM.GetRoundSelfPrefab(Weapon.Chamber.m_round.RoundType, RoundClass2)).GetGameObject().GetComponent<FVRFireArmRound>(); Weapon.Chamber.UpdateProxyDisplay(); } } } } } namespace H3VRUtils.Vehicles { public class ButtonIgnition : FVRInteractiveObject { public VehicleControl vehicle; public VehicleAudioSet audioSet; public float ignitionTime; private float m_it; public float failChance; public Random rand; public void Start() { rand = new Random(); } public void BeginInteraction(FVRViveHand hand) { m_it = ignitionTime; if (!vehicle.isOn) { if (vehicle.isForciblyOff) { } } else { vehicle.TurnOffEngine(forcibly: false); } } public void UpdateInteraction(FVRViveHand hand) { m_it -= Time.fixedDeltaTime; if (m_it <= 0f) { float num = (float)rand.Next(0, 10000) / 100f; if (!(num <= failChance)) { vehicle.TurnOnEngine(forcibly: false); } } } } } namespace H3VRUtils.Vehicles.Core { public class DamagingArea : MonoBehaviour { public VehicleControl vehicle; public float damageMult = 15f; public float sharpyness = 50f; } } namespace H3VRUtils.Vehicles { [Serializable] public class DriveShiftNode { public Vector3 localposition; public Vector3 rotation; public int left = -1; public int up = -1; public int right = -1; public int down = -1; public int gear = 0; } public class DriveShift : FVRInteractiveObject { public VehicleControl vehicle; public Text gearText; public int currentNode; public List<DriveShiftNode> driveShiftNodes; public VehicleAudioSet audioSet; public void Update() { if (vehicle.carSetting.automaticGear) { if (vehicle.currentGear > 0 && vehicle.speed > 1f) { gearText.text = vehicle.currentGear.ToString(); } else if (vehicle.speed > 1f) { gearText.text = "R"; } else { gearText.text = "N"; } } else if (vehicle.NeutralGear) { gearText.text = "N"; } else if (vehicle.currentGear != 0) { gearText.text = vehicle.currentGear.ToString(); } else { gearText.text = "R"; } } public void UpdateInteraction(FVRViveHand hand) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_0117: 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_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) bool flag = false; if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.left) <= 45f && hand.Input.TouchpadDown && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f && driveShiftNodes[currentNode].left != -1) { flag = true; currentNode = driveShiftNodes[currentNode].left; } if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.up) <= 45f && hand.Input.TouchpadDown && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f && driveShiftNodes[currentNode].up != -1) { flag = true; currentNode = driveShiftNodes[currentNode].up; } if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.right) <= 45f && hand.Input.TouchpadDown && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f && driveShiftNodes[currentNode].right != -1) { flag = true; currentNode = driveShiftNodes[currentNode].right; } if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.down) <= 45f && hand.Input.TouchpadDown && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f && driveShiftNodes[currentNode].down != -1) { flag = true; currentNode = driveShiftNodes[currentNode].down; } if (flag) { vehicle.ShiftTo(driveShiftNodes[currentNode].gear); ((Component)this).transform.localPosition = driveShiftNodes[currentNode].localposition; ((Component)this).transform.localEulerAngles = driveShiftNodes[currentNode].rotation; } } } internal class EngineDamagable : VehicleDamagable { public GameObject particleSystemCentre; public GameObject explosionCentre; public float SmokeParticleHPThreshold; public float explosionStrength = 200f; public GameObject particleSmokePrefab; public GameObject particleFirePrefab; public GameObject explosionPrefab; public GameObject fixedMesh; public GameObject damagedMesh; public GameObject destroyedMesh; private ParticleSystem particleSmoke; private ParticleSystem particleFire; public void Start() { GameObject val = Object.Instantiate<GameObject>(particleSmokePrefab, particleSystemCentre.transform); particleSmoke = val.GetComponent<ParticleSystem>(); particleSmoke.Stop(); GameObject val2 = Object.Instantiate<GameObject>(particleFirePrefab, particleSystemCentre.transform); particleFire = val2.GetComponent<ParticleSystem>(); particleFire.Stop(); } public override void onHealthChange() { if (HPLessThanPercent(SmokeParticleHPThreshold)) { if (!particleSmoke.IsAlive()) { particleSmoke.Play(); } } else { particleSmoke.Stop(); } if (health < 0f) { fixedMesh.SetActive(false); damagedMesh.SetActive(false); destroyedMesh.SetActive(true); } else if (HPLessThanPercent(SmokeParticleHPThreshold)) { fixedMesh.SetActive(false); damagedMesh.SetActive(true); destroyedMesh.SetActive(false); } else { fixedMesh.SetActive(true); damagedMesh.SetActive(false); destroyedMesh.SetActive(false); } } public override void onDeath() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) particleFire.Play(); if ((Object)(object)explosionPrefab != (Object)null) { Object.Instantiate<GameObject>(explosionPrefab, explosionCentre.transform.position, explosionCentre.transform.rotation); } } public override void whileDead() { } public override void whileUndead() { } public override void Heal(float heal) { base.Heal(heal); } public override void HealPercent(float percentHeal) { base.HealPercent(percentHeal); } public override void onUndeath() { particleFire.Stop(); } public override void Damage() { } } internal class EnterVehicle : FVRInteractiveObject { public VehicleSeat vehicleSeat; } internal class ForkliftLift : FVRInteractiveObject { public Vector3 rotUpwards; public Vector3 rotRegular; public Vector3 rotDownwards; public GameObject lift; public float liftSpeed; public float minLiftY; public float maxLiftY; public void UpdateInteraction(FVRViveHand hand) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0019: 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) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_008e: 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_0104: Unknown result type (might be due to invalid IL or missing references) Vector3 position = lift.transform.position; ((Component)this).transform.localEulerAngles = rotRegular; if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.up) <= 45f && hand.Input.TouchpadPressed && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f) { position.y += liftSpeed / 50f; ((Component)this).transform.localEulerAngles = rotUpwards; } if (Vector2.Angle(hand.Input.TouchpadAxes, Vector2.down) <= 45f && hand.Input.TouchpadPressed && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f) { position.y -= liftSpeed / 50f; ((Component)this).transform.localEulerAngles = rotDownwards; } if (position.y > maxLiftY) { position.y = maxLiftY; } else if (position.y < minLiftY) { position.y = minLiftY; } lift.transform.position = position; } } public class FuelNeedle : MonoBehaviour { public FuelTank tank; public GameObject needle; public bool isImperial; public Vector3 needleNoFuel; public Vector3 needleMaxFuel; public void Update() { //IL_0043: 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_004f: Unknown result type (might be due to invalid IL or missing references) float num = tank.currentFuel; if (isImperial) { num *= 0.6213712f; } float num2 = Mathf.InverseLerp(0f, tank.maxFuel, num); needle.transform.localEulerAngles = Vector3.Lerp(needleNoFuel, needleMaxFuel, num2); } } public class FuelTank : VehicleDamagable { public float currentFuel; public float maxFuel; public float fuelUsagePer1000Rpm = 0.01f; public float leakMult; public GameObject explosionEffect; public bool BlowsOnDeath; public AudioSource leakSound; private new void FixedUpdate() { base.FixedUpdate(); float num = vehicle.motorRPM / 1000f; float num2 = num * (fuelUsagePer1000Rpm / 3000f); currentFuel -= num2; float num3 = Mathf.InverseLerp(maxHealth, 0f, health); currentFuel -= num3 * leakMult / 50f; if ((Object)(object)leakSound != (Object)null) { leakSound.volume = num3; } } public override void onDeath() { //IL_001f: 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) base.onDeath(); if (BlowsOnDeath) { Object.Instantiate<GameObject>(explosionEffect, ((Component)this).transform.position, ((Component)this).transform.rotation); } } public float AddFuel(float fuelAdded) { currentFuel += fuelAdded; float num = maxFuel - currentFuel; if (num <= 0f) { return 0f; } return num; } } } namespace H3VRUtils { internal class LockGun : MonoBehaviour { public FVRPhysicalObject Firearm; public GameObject LockPos; public void Update() { } } } namespace H3VRUtils.Vehicles { public class ParkingBrakeClick : FVRInteractiveObject { public VehicleControl vehicle; public Vector3 positionOff; public Vector3 positionOn; public Vector3 rotationOff; public Vector3 rotationOn; public bool isOn; public VehicleAudioSet audioSet; } public class SpedometerNeedle : MonoBehaviour { public VehicleControl vehicle; public GameObject needle; public bool isImperial; public float maxSpeed; public Vector3 needleNoSpeed; public Vector3 needleMaxSpeed; public void Update() { //IL_0043: 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_004f: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Abs(vehicle.speed); if (isImperial) { num *= 0.6213712f; } float num2 = Mathf.InverseLerp(0f, maxSpeed, num); needle.transform.localEulerAngles = Vector3.Lerp(needleNoSpeed, needleMaxSpeed, num2); } } internal class SteeringWheel : FVRInteractiveObject { public VehicleControl vehicle; public float resetLerpSpeed; public float maxRot; public bool isBraking; public bool reverseRot; [Header("Debug Values")] public Text rotText; public float rot; public float rh; public float lr; public float inlerp; public float lerp; public float rotAmt; public VehicleAudioSet audioSet; public void BeginInteraction(FVRViveHand hand) { //IL_001b: 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_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_0059: Unknown result type (might be due to invalid IL or missing references) Transform child = ((Component)this).transform.GetChild(0); child.parent = null; Vector3 localEulerAngles = ((Component)this).transform.localEulerAngles; ((Component)this).transform.LookAt(((Component)hand).transform); ((Component)this).transform.localEulerAngles = new Vector3(localEulerAngles.x, ((Component)this).transform.localEulerAngles.y, localEulerAngles.z); child.parent = ((Component)this).transform; } public void EndInteraction(FVRViveHand hand) { //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_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) Transform child = ((Component)this).transform.GetChild(0); child.parent = null; ((Component)this).transform.localEulerAngles = new Vector3(((Component)this).transform.localEulerAngles.x, 0f, ((Component)this).transform.localEulerAngles.z); child.parent = ((Component)this).transform; } public void UpdateInteraction(FVRViveHand hand) { //IL_0007: 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_0024: 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_0088: 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_00ba: 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_011d: Unknown result type (might be due to invalid IL or missing references) Vector3 localEulerAngles = ((Component)this).transform.localEulerAngles; ((Component)this).transform.LookAt(((Component)hand).transform); Vector3 localEulerAngles2 = ((Component)this).transform.localEulerAngles; rot = Mathf.DeltaAngle((float)Math.Round(localEulerAngles2.y), (float)Math.Round(localEulerAngles.y)); rotAmt += rot; if (rotAmt >= maxRot) { rotAmt = maxRot; ((Component)this).transform.localEulerAngles = localEulerAngles; } else if (rotAmt <= 0f - maxRot) { rotAmt = 0f - maxRot; ((Component)this).transform.localEulerAngles = localEulerAngles; } else { ((Component)this).transform.localEulerAngles = new Vector3(localEulerAngles.x, localEulerAngles2.y, localEulerAngles.z); } rh = localEulerAngles2.y; lr = localEulerAngles.y; SetRot(); if (Vector2.Angle(hand.Input.TouchpadAxes, -Vector2.up) <= 45f && hand.Input.TouchpadDown && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.3f) { isBraking = !isBraking; } float triggerFloat = hand.Input.TriggerFloat; if (isBraking) { vehicle.accel = 0f - triggerFloat; } else { vehicle.accel = triggerFloat; } } private void FixedUpdate() { //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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: 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_008e: 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) if ((Object)(object)base.m_hand != (Object)null) { float num = resetLerpSpeed; if (rotAmt > 0f) { num = 0f - num; } if (rotAmt > num || rotAmt < 0f - num) { rotAmt += num; ((Component)this).transform.localEulerAngles = new Vector3(((Component)this).transform.localEulerAngles.x, ((Component)this).transform.localEulerAngles.y + num, ((Component)this).transform.localEulerAngles.z); vehicle.accel = 0f; SetRot(); } } } private void SetRot() { if (rotAmt > 0f) { inlerp = Mathf.InverseLerp(0f, maxRot, rotAmt); lerp = 0f - Mathf.Lerp(0f, 1f, inlerp); } else { inlerp = Mathf.InverseLerp(0f, 0f - maxRot, rotAmt); lerp = Mathf.Lerp(0f, 1f, inlerp); } if (reverseRot) { lerp = 0f - lerp; } vehicle.steer = lerp; } } [CreateAssetMenu(fileName = "New Vehicle Audio Set", menuName = "Vehicles/AudioSet", order = 0)] public class VehicleAudioSet : ScriptableObject { private static AudioEvent defaultAE; public AudioEvent VehicleStart; public AudioEvent VehicleIdle; public AudioEvent VehicleStop; public AudioEvent HandbrakeUp; public AudioEvent HandbrakeDown; public AudioEvent ShiftDownGear; public AudioEvent RevLoop; public AudioEvent ShiftUpGear; public AudioEvent Brake; public AudioEvent BrakeLong; public AudioEvent PedalSwitchSound; static VehicleAudioSet() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) AudioEvent val = new AudioEvent(); val.PitchRange = new Vector2(0.98f, 1.04f); val.VolumeRange = new Vector2(0.98f, 1.04f); val.ClipLengthRange = new Vector2(1f, 1f); defaultAE = val; } } } public enum ControlMode { simple = 1, touch } public class VehicleControl : MonoBehaviour { [Serializable] public class CarWheels { public ConnectWheel wheels; } [Serializable] public class ConnectWheel { public bool frontWheelDrive = true; public Transform frontRight; public Transform frontLeft; public WheelSetting frontSetting; public bool backWheelDrive = true; public Transform backRight; public Transform backLeft; public WheelSetting rearSetting; } [Serializable] public class WheelSetting { public float Radius = 0.4f; public float Weight = 1000f; public float Distance = 0.2f; } [Serializable] public class CarLights { public Light[] brakeLights; public Light[] reverseLights; } [Serializable] public class CarSounds { public AudioSource IdleEngine; public AudioSource LowEngine; public AudioSource HighEngine; public float minPitch = 1f; public float maxPitch = 10f; public AudioSource nitro; public AudioSource switchGear; } [Serializable] public class CarParticles { public GameObject brakeParticlePerfab; public ParticleSystem shiftParticle1; public ParticleSystem shiftParticle2; private GameObject[] wheelParticle = (GameObject[])(object)new GameObject[4]; } [Serializable] public class CarSetting { public bool showNormalGizmos = false; public Transform carSteer; public HitGround[] hitGround; public List<Transform> cameraSwitchView; public float springs = 25000f; public float dampers = 1500f; public float carPower = 120f; public float shiftPower = 150f; public float brakePower = 8000f; public Vector3 shiftCentre = new Vector3(0f, -0.8f, 0f); public float maxSteerAngle = 25f; public float shiftDownRPM = 1500f; public float shiftUpRPM = 2500f; public float idleRPM = 500f; public float stiffness = 2f; public bool automaticGear = true; public float[] gears = new float[6] { -10f, 9f, 6f, 4.5f, 3f, 2.5f }; public float LimitBackwardSpeed = 60f; public float LimitForwardSpeed = 220f; } [Serializable] public class HitGround { public string tag = "street"; public bool grounded = false; public AudioClip brakeSound; public AudioClip groundSound; public Color brakeColor; } private class WheelComponent { public Transform wheel; public WheelCollider collider; public Vector3 startPos; public float rotation = 0f; public float rotation2 = 0f; public float maxSteer; public bool drive; public float pos_y = 0f; public WheelSetting settings; } public ControlMode controlMode = ControlMode.simple; public bool activeControl = false; public CarWheels carWheels; public CarLights carLights; public CarSounds carSounds; public CarParticles carParticles; public CarSetting carSetting; [HideInInspector] public float steer = 0f; [HideInInspector] public float accel = 0f; [HideInInspector] public bool brake; private bool shifmotor; [HideInInspector] public float curTorque = 100f; [HideInInspector] public float powerShift = 100f; [HideInInspector] public bool shift; private float torque = 100f; [HideInInspector] public float speed = 0f; private float lastSpeed = -10f; private bool shifting = false; private float[] efficiencyTable = new float[22] { 0.6f, 0.65f, 0.7f, 0.75f, 0.8f, 0.85f, 0.9f, 1f, 1f, 0.95f, 0.8f, 0.7f, 0.6f, 0.5f, 0.45f, 0.4f, 0.36f, 0.33f, 0.3f, 0.2f, 0.1f, 0.05f }; private float efficiencyTableStep = 250f; private float Pitch; private float PitchDelay; private float shiftTime = 0f; private float shiftDelay = 0f; [HideInInspector] public int currentGear = 0; [HideInInspector] public bool NeutralGear = true; [HideInInspector] public float motorRPM = 0f; [HideInInspector] public bool Backward = false; [HideInInspector] public float accelFwd = 0f; [HideInInspector] public float accelBack = 0f; [HideInInspector] public float steerAmount = 0f; private float wantedRPM = 0f; private float w_rotate; private float slip; private float slip2 = 0f; private GameObject[] Particle = (GameObject[])(object)new GameObject[4]; private Vector3 steerCurAngle; private Rigidbody myRigidbody; private WheelComponent[] wheels; public bool isOn = true; public bool isForciblyOff = false; private WheelComponent SetWheelComponent(Transform wheel, float maxSteer, bool drive, float pos_y, WheelSetting setting) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_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_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown //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) WheelComponent wheelComponent = new WheelComponent(); GameObject val = new GameObject(((Object)wheel).name + "WheelCollider"); val.transform.parent = ((Component)this).transform; val.transform.position = wheel.position; val.transform.eulerAngles = ((Component)this).transform.eulerAngles; pos_y = val.transform.localPosition.y; WheelCollider val2 = (WheelCollider)val.AddComponent(typeof(WheelCollider)); wheelComponent.wheel = wheel; wheelComponent.collider = val.GetComponent<WheelCollider>(); wheelComponent.drive = drive; wheelComponent.pos_y = pos_y; wheelComponent.maxSteer = maxSteer; wheelComponent.startPos = val.transform.localPosition; wheelComponent.settings = setting; return wheelComponent; } private void Awake() { //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_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_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_027f: 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_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Unknown result type (might be due to invalid IL or missing references) //IL_02cc: Unknown result type (might be due to invalid IL or missing references) //IL_02fa: Unknown result type (might be due to invalid IL or missing references) if (carSetting.automaticGear) { NeutralGear = false; } myRigidbody = ((Component)((Component)this).transform).GetComponent<Rigidbody>(); wheels = new WheelComponent[4]; wheels[0] = SetWheelComponent(carWheels.wheels.frontRight, carSetting.maxSteerAngle, carWheels.wheels.frontWheelDrive, carWheels.wheels.frontRight.position.y, carWheels.wheels.frontSetting); wheels[1] = SetWheelComponent(carWheels.wheels.frontLeft, carSetting.maxSteerAngle, carWheels.wheels.frontWheelDrive, carWheels.wheels.frontLeft.position.y, carWheels.wheels.frontSetting); wheels[2] = SetWheelComponent(carWheels.wheels.backRight, 0f, carWheels.wheels.backWheelDrive, carWheels.wheels.backRight.position.y, carWheels.wheels.rearSetting); wheels[3] = SetWheelComponent(carWheels.wheels.backLeft, 0f, carWheels.wheels.backWheelDrive, carWheels.wheels.backLeft.position.y, carWheels.wheels.rearSetting); if (Object.op_Implicit((Object)(object)carSetting.carSteer)) { steerCurAngle = carSetting.carSteer.localEulerAngles; } WheelComponent[] array = wheels; foreach (WheelComponent wheelComponent in array) { WheelCollider collider = wheelComponent.collider; collider.suspensionDistance = wheelComponent.settings.Distance; JointSpring suspensionSpring = collider.suspensionSpring; suspensionSpring.spring = carSetting.springs; suspensionSpring.damper = carSetting.dampers; collider.suspensionSpring = suspensionSpring; collider.radius = wheelComponent.settings.Radius; collider.mass = wheelComponent.settings.Weight; WheelFrictionCurve val = collider.forwardFriction; ((WheelFrictionCurve)(ref val)).asymptoteValue = 5000f; ((WheelFrictionCurve)(ref val)).extremumSlip = 2f; ((WheelFrictionCurve)(ref val)).asymptoteSlip = 20f; ((WheelFrictionCurve)(ref val)).stiffness = carSetting.stiffness; collider.forwardFriction = val; val = collider.sidewaysFriction; ((WheelFrictionCurve)(ref val)).asymptoteValue = 7500f; ((WheelFrictionCurve)(ref val)).asymptoteSlip = 2f; ((WheelFrictionCurve)(ref val)).stiffness = carSetting.stiffness; collider.sidewaysFriction = val; } } public void TurnOnEngine(bool forcibly) { if (!isForciblyOff) { isOn = true; } else if (forcibly) { isForciblyOff = false; isOn = true; } } public void TurnOffEngine(bool forcibly) { isForciblyOff = forcibly; isOn = false; } public void ShiftTo(int newGear) { ((Component)carSounds.switchGear).GetComponent<AudioSource>().Play(); currentGear = newGear; if (currentGear == 0) { NeutralGear = true; } else { NeutralGear = false; } if (currentGear == -1) { currentGear = 0; } } public void ShiftUp(bool ignoreDelay) { float timeSinceLevelLoad = Time.timeSinceLevelLoad; if ((timeSinceLevelLoad < shiftDelay && !ignoreDelay) || currentGear >= carSetting.gears.Length - 1) { return; } ((Component)carSounds.switchGear).GetComponent<AudioSource>().Play(); if (!carSetting.automaticGear) { if (currentGear == 0) { if (NeutralGear) { currentGear++; NeutralGear = false; } else { NeutralGear = true; } } else { currentGear++; } } else { currentGear++; } shiftDelay = timeSinceLevelLoad + 1f; shiftTime = 1.5f; } public void ShiftDown(bool ignoreDelay) { float timeSinceLevelLoad = Time.timeSinceLevelLoad; if ((timeSinceLevelLoad < shiftDelay && !ignoreDelay) || (currentGear <= 0 && !NeutralGear)) { return; } ((Component)carSounds.switchGear).GetComponent<AudioSource>().Play(); if (!carSetting.automaticGear) { if (currentGear == 1) { if (!NeutralGear) { currentGear--; NeutralGear = true; } } else if (currentGear == 0) { NeutralGear = false; } else { currentGear--; } } else { currentGear--; } shiftDelay = timeSinceLevelLoad + 0.1f; shiftTime = 2f; } private void OnCollisionEnter(Collision collision) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)((Component)collision.transform.root).GetComponent<VehicleControl>())) { VehicleControl component = ((Component)collision.transform.root).GetComponent<VehicleControl>(); Vector3 relativeVelocity = collision.relativeVelocity; component.slip2 = Mathf.Clamp(((Vector3)(ref relativeVelocity)).magnitude, 0f, 10f); myRigidbody.angularVelocity = new Vector3((0f - myRigidbody.angularVelocity.x) * 0.5f, myRigidbody.angularVelocity.y * 0.5f, (0f - myRigidbody.angularVelocity.z) * 0.5f); myRigidbody.velocity = new Vector3(myRigidbody.velocity.x, myRigidbody.velocity.y * 0.5f, myRigidbody.velocity.z); } } private void OnCollisionStay(Collision collision) { if (Object.op_Implicit((Object)(object)((Component)collision.transform.root).GetComponent<VehicleControl>())) { ((Component)collision.transform.root).GetComponent<VehicleControl>().slip2 = 5f; } } private void Update() { } private void FixedUpdate() { //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_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0704: Unknown result type (might be due to invalid IL or missing references) //IL_0709: Unknown result type (might be due to invalid IL or missing references) //IL_0751: Unknown result type (might be due to invalid IL or missing references) //IL_075a: Unknown result type (might be due to invalid IL or missing references) //IL_075f: Unknown result type (might be due to invalid IL or missing references) //IL_079b: Unknown result type (might be due to invalid IL or missing references) //IL_0acf: Unknown result type (might be due to invalid IL or missing references) //IL_0ae0: Unknown result type (might be due to invalid IL or missing references) //IL_0ae5: Unknown result type (might be due to invalid IL or missing references) //IL_0fca: Unknown result type (might be due to invalid IL or missing references) //IL_0fd4: Unknown result type (might be due to invalid IL or missing references) //IL_0ee6: Unknown result type (might be due to invalid IL or missing references) //IL_0eed: Unknown result type (might be due to invalid IL or missing references) //IL_0ef2: Unknown result type (might be due to invalid IL or missing references) //IL_0f0c: Unknown result type (might be due to invalid IL or missing references) //IL_0f17: Unknown result type (might be due to invalid IL or missing references) //IL_0f1c: Unknown result type (might be due to invalid IL or missing references) //IL_0f25: Unknown result type (might be due to invalid IL or missing references) //IL_0fec: Unknown result type (might be due to invalid IL or missing references) //IL_0b3b: Unknown result type (might be due to invalid IL or missing references) //IL_0b40: Unknown result type (might be due to invalid IL or missing references) //IL_0d23: Unknown result type (might be due to invalid IL or missing references) if (!isOn) { accel = 0f; } Vector3 velocity = myRigidbody.velocity; speed = ((Vector3)(ref velocity)).magnitude * 2.7f; if (speed < lastSpeed - 10f && slip < 10f) { slip = lastSpeed / 15f; } lastSpeed = speed; if (slip2 != 0f) { slip2 = Mathf.MoveTowards(slip2, 0f, 0.1f); } myRigidbody.centerOfMass = carSetting.shiftCentre; if (!carWheels.wheels.frontWheelDrive && !carWheels.wheels.backWheelDrive) { accel = 0f; } if (Object.op_Implicit((Object)(object)carSetting.carSteer)) { carSetting.carSteer.localEulerAngles = new Vector3(steerCurAngle.x, steerCurAngle.y, steerCurAngle.z + steer * -120f); } if (carSetting.automaticGear && currentGear == 1 && accel < 0f) { if (speed < 5f) { ShiftDown(ignoreDelay: false); } } else if (carSetting.automaticGear && currentGear == 0 && accel > 0f) { if (speed < 5f) { ShiftUp(ignoreDelay: false); } } else if (carSetting.automaticGear && motorRPM > carSetting.shiftUpRPM && accel > 0f && speed > 10f && !brake) { ShiftUp(ignoreDelay: false); } else if (carSetting.automaticGear && motorRPM < carSetting.shiftDownRPM && currentGear > 1) { ShiftDown(ignoreDelay: false); } if (speed < 1f) { Backward = true; } if (currentGear != 0 || !Backward) { Backward = false; } Light[] brakeLights = carLights.brakeLights; foreach (Light val in brakeLights) { if (brake || accel < 0f || speed < 1f) { val.intensity = Mathf.MoveTowards(val.intensity, 8f, 0.5f); } else { val.intensity = Mathf.MoveTowards(val.intensity, 0f, 0.5f); } ((Behaviour)val).enabled = val.intensity != 0f; } Light[] reverseLights = carLights.reverseLights; foreach (Light val2 in reverseLights) { if (speed > 2f && currentGear == 0) { val2.intensity = Mathf.MoveTowards(val2.intensity, 8f, 0.5f); } else { val2.intensity = Mathf.MoveTowards(val2.intensity, 0f, 0.5f); } ((Behaviour)val2).enabled = val2.intensity != 0f; } wantedRPM = 5500f * accel * 0.1f + wantedRPM * 0.9f; float num = 0f; int num2 = 0; bool flag = false; int num3 = 0; WheelComponent[] array = wheels; WheelHit val4 = default(WheelHit); foreach (WheelComponent wheelComponent in array) { WheelCollider collider = wheelComponent.collider; if (wheelComponent.drive) { num = ((!NeutralGear && brake && currentGear < 2) ? (num + accel * carSetting.idleRPM) : (NeutralGear ? (num + carSetting.idleRPM * accel) : (num + collider.rpm))); num2++; } if (brake || accel < 0f) { if (accel < 0f || (brake && (wheelComponent == wheels[2] || wheelComponent == wheels[3]))) { if (brake && accel > 0f) { slip = Mathf.Lerp(slip, 5f, accel * 0.01f); } else if (speed > 1f) { slip = Mathf.Lerp(slip, 1f, 0.002f); } else { slip = Mathf.Lerp(slip, 1f, 0.02f); } wantedRPM = 0f; collider.brakeTorque = carSetting.brakePower; wheelComponent.rotation = w_rotate; } } else { float brakeTorque; if (accel == 0f || NeutralGear) { float num5 = (collider.brakeTorque = 1000f); brakeTorque = num5; } else { float num5 = (collider.brakeTorque = 0f); brakeTorque = num5; } collider.brakeTorque = brakeTorque; slip = ((!(speed > 0f)) ? (slip = Mathf.Lerp(slip, 0.01f, 0.02f)) : ((!(speed > 100f)) ? (slip = Mathf.Lerp(slip, 1.5f, 0.02f)) : (slip = Mathf.Lerp(slip, 1f + Mathf.Abs(steer), 0.02f)))); w_rotate = wheelComponent.rotation; } WheelFrictionCurve val3 = collider.forwardFriction; ((WheelFrictionCurve)(ref val3)).asymptoteValue = 5000f; ((WheelFrictionCurve)(ref val3)).extremumSlip = 2f; ((WheelFrictionCurve)(ref val3)).asymptoteSlip = 20f; ((WheelFrictionCurve)(ref val3)).stiffness = carSetting.stiffness / (slip + slip2); collider.forwardFriction = val3; val3 = collider.sidewaysFriction; ((WheelFrictionCurve)(ref val3)).stiffness = carSetting.stiffness / (slip + slip2); ((WheelFrictionCurve)(ref val3)).extremumSlip = 0.2f + Mathf.Abs(steer); collider.sidewaysFriction = val3; if (shift && currentGear > 1 && speed > 50f && shifmotor && Mathf.Abs(steer) < 0.2f) { if (powerShift == 0f) { shifmotor = false; } powerShift = Mathf.MoveTowards(powerShift, 0f, Time.deltaTime * 10f); carSounds.nitro.volume = Mathf.Lerp(carSounds.nitro.volume, 1f, Time.deltaTime * 10f); if (!carSounds.nitro.isPlaying) { ((Component)carSounds.nitro).GetComponent<AudioSource>().Play(); } curTorque = ((!(powerShift > 0f)) ? carSetting.carPower : carSetting.shiftPower); carParticles.shiftParticle1.emissionRate = Mathf.Lerp(carParticles.shiftParticle1.emissionRate, (float)((powerShift > 0f) ? 50 : 0), Time.deltaTime * 10f); carParticles.shiftParticle2.emissionRate = Mathf.Lerp(carParticles.shiftParticle2.emissionRate, (float)((powerShift > 0f) ? 50 : 0), Time.deltaTime * 10f); } else { if (powerShift > 20f) { shifmotor = true; } carSounds.nitro.volume = Mathf.MoveTowards(carSounds.nitro.volume, 0f, Time.deltaTime * 2f); if (carSounds.nitro.volume == 0f) { carSounds.nitro.Stop(); } powerShift = Mathf.MoveTowards(powerShift, 100f, Time.deltaTime * 5f); curTorque = carSetting.carPower; carParticles.shiftParticle1.emissionRate = Mathf.Lerp(carParticles.shiftParticle1.emissionRate, 0f, Time.deltaTime * 10f); carParticles.shiftParticle2.emissionRate = Mathf.Lerp(carParticles.shiftParticle2.emissionRate, 0f, Time.deltaTime * 10f); } wheelComponent.rotation = Mathf.Repeat(wheelComponent.rotation + Time.deltaTime * collider.rpm * 360f / 60f, 360f); wheelComponent.rotation2 = Mathf.Lerp(wheelComponent.rotation2, collider.steerAngle, 0.1f); wheelComponent.wheel.localRotation = Quaternion.Euler(wheelComponent.rotation, wheelComponent.rotation2, 0f); Vector3 localPosition = wheelComponent.wheel.localPosition; if (collider.GetGroundHit(ref val4)) { if (Object.op_Implicit((Object)(object)carParticles.brakeParticlePerfab)) { if ((Object)(object)Particle[num3] == (Object)null) { Particle[num3] = Object.Instantiate<GameObject>(carParticles.brakeParticlePerfab, wheelComponent.wheel.position, Quaternion.identity); ((Object)Particle[num3]).name = "WheelParticle"; Particle[num3].transform.parent = ((Component)this).transform; Particle[num3].AddComponent<AudioSource>(); Particle[num3].GetComponent<AudioSource>().maxDistance = 50f; Particle[num3].GetComponent<AudioSource>().spatialBlend = 1f; Particle[num3].GetComponent<AudioSource>().dopplerLevel = 5f; Particle[num3].GetComponent<AudioSource>().rolloffMode = (AudioRolloffMode)2; } ParticleSystem component = Particle[num3].GetComponent<ParticleSystem>(); bool flag2 = false; for (int l = 0; l < carSetting.hitGround.Length; l++) { if (((Component)((WheelHit)(ref val4)).collider).CompareTag(carSetting.hitGround[l].tag)) { flag2 = carSetting.hitGround[l].grounded; if ((brake || Mathf.Abs(((WheelHit)(ref val4)).sidewaysSlip) > 0.5f) && speed > 1f) { Particle[num3].GetComponent<AudioSource>().clip = carSetting.hitGround[l].brakeSound; } else if ((Object)(object)Particle[num3].GetComponent<AudioSource>().clip != (Object)(object)carSetting.hitGround[l].groundSound && !Particle[num3].GetComponent<AudioSource>().isPlaying) { Particle[num3].GetComponent<AudioSource>().clip = carSetting.hitGround[l].groundSound; } Particle[num3].GetComponent<ParticleSystem>().startColor = carSetting.hitGround[l].brakeColor; } } if (flag2 && speed > 5f && !brake) { component.enableEmission = true; Particle[num3].GetComponent<AudioSource>().volume = 0.5f; if (!Particle[num3].GetComponent<AudioSource>().isPlaying) { Particle[num3].GetComponent<AudioSource>().Play(); } } else if ((brake || Mathf.Abs(((WheelHit)(ref val4)).sidewaysSlip) > 0.6f) && speed > 1f) { if (accel < 0f || ((brake || Mathf.Abs(((WheelHit)(ref val4)).sidewaysSlip) > 0.6f) && (wheelComponent == wheels[2] || wheelComponent == wheels[3]))) { if (!Particle[num3].GetComponent<AudioSource>().isPlaying) { Particle[num3].GetComponent<AudioSource>().Play(); } component.enableEmission = true; Particle[num3].GetComponent<AudioSource>().volume = 10f; } } else { component.enableEmission = false; Particle[num3].GetComponent<AudioSource>().volume = Mathf.Lerp(Particle[num3].GetComponent<AudioSource>().volume, 0f, Time.deltaTime * 10f); } } localPosition.y -= Vector3.Dot(wheelComponent.wheel.position - ((WheelHit)(ref val4)).point, ((Component)this).transform.TransformDirection(0f, 1f, 0f) / ((Component)this).transform.lossyScale.x) - collider.radius; localPosition.y = Mathf.Clamp(localPosition.y, -10f, wheelComponent.pos_y); flag = flag || wheelComponent.drive; } else { if ((Object)(object)Particle[num3] != (Object)null) { ParticleSystem component2 = Particle[num3].GetComponent<ParticleSystem>(); component2.enableEmission = false; } localPosition.y = wheelComponent.startPos.y - wheelComponent.settings.Distance; myRigidbody.AddForce(Vector3.down * 5000f); } num3++; wheelComponent.wheel.localPosition = localPosition; } if (num2 > 1) { num /= (float)num2; } motorRPM = 0.95f * motorRPM + 0.05f * Mathf.Abs(num * carSetting.gears[currentGear]); if (motorRPM > 5500f) { motorRPM = 5200f; } int num7 = (int)(motorRPM / efficiencyTableStep); if (num7 >= efficiencyTable.Length) { num7 = efficiencyTable.Length - 1; } if (num7 < 0) { num7 = 0; } float num8 = curTorque * carSetting.gears[currentGear] * efficiencyTable[num7]; WheelComponent[] array2 = wheels; foreach (WheelComponent wheelComponent2 in array2) { WheelCollider collider2 = wheelComponent2.collider; if (wheelComponent2.drive) { if (Mathf.Abs(collider2.rpm) > Mathf.Abs(wantedRPM)) { collider2.motorTorque = 0f; } else { float motorTorque = collider2.motorTorque; if (!brake && accel != 0f && !NeutralGear) { if ((speed < carSetting.LimitForwardSpeed && currentGear > 0) || (speed < carSetting.LimitBackwardSpeed && currentGear == 0)) { collider2.motorTorque = motorTorque * 0.9f + num8 * 1f; } else { collider2.motorTorque = 0f; collider2.brakeTorque = 2000f; } } else { collider2.motorTorque = 0f; } } } if (brake || slip2 > 2f) { collider2.steerAngle = Mathf.Lerp(collider2.steerAngle, steer * wheelComponent2.maxSteer, 0.02f); continue; } float num9 = Mathf.Clamp(speed / carSetting.maxSteerAngle, 1f, carSetting.maxSteerAngle); collider2.steerAngle = steer * (wheelComponent2.maxSteer / num9); } Pitch = Mathf.Clamp(1.2f + (motorRPM - carSetting.idleRPM) / (carSetting.shiftUpRPM - carSetting.idleRPM), 1f, 10f); shiftTime = Mathf.MoveTowards(shiftTime, 0f, 0.1f); if (Pitch == 1f) { carSounds.IdleEngine.volume = Mathf.Lerp(carSounds.IdleEngine.volume, 1f, 0.1f); carSounds.LowEngine.volume = Mathf.Lerp(carSounds.LowEngine.volume, 0.5f, 0.1f); carSounds.HighEngine.volume = Mathf.Lerp(carSounds.HighEngine.volume, 0f, 0.1f); } else { carSounds.IdleEngine.volume = Mathf.Lerp(carSounds.IdleEngine.volume, 1.8f - Pitch, 0.1f); if ((Pitch > PitchDelay || accel > 0f) && shiftTime == 0f) { carSounds.LowEngine.volume = Mathf.Lerp(carSounds.LowEngine.volume, 0f, 0.2f); carSounds.HighEngine.volume = Mathf.Lerp(carSounds.HighEngine.volume, 1f, 0.1f); } else { carSounds.LowEngine.volume = Mathf.Lerp(carSounds.LowEngine.volume, 0.5f, 0.1f); carSounds.HighEngine.volume = Mathf.Lerp(carSounds.HighEngine.volume, 0f, 0.2f); } carSounds.HighEngine.pitch = Pitch; carSounds.LowEngine.pitch = Pitch; PitchDelay = Pitch; } if (!isOn) { carSounds.IdleEngine.volume = 0f; carSounds.LowEngine.volume = 0f; carSounds.HighEngine.volume = 0f; } } private void OnDrawGizmos() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: 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_0061: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0075: 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_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: 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) if (carSetting.showNormalGizmos && !Application.isPlaying) { Matrix4x4 matrix = Matrix4x4.TRS(((Component)this).transform.position, ((Component)this).transform.rotation, ((Component)this).transform.lossyScale); Gizmos.matrix = matrix; Gizmos.color = new Color(1f, 0f, 0f, 0.5f); Gizmos.DrawCube(Vector3.up / 1.5f, new Vector3(2.5f, 2f, 6f)); Gizmos.DrawSphere(carSetting.shiftCentre / ((Component)this).transform.lossyScale.x, 0.2f); } } } namespace H3VRUtils.Vehicles { [Serializable] public class VehicleDamagableMult { public float projectileMult = 1f; public float meleeMult = 1f; public float explosionMult = 1f; public float piercingMult = 1f; public float cuttingMult = 1f; public float thermalMult = 1f; public float bluntMult = 1f; public float totalKineticMult = 1f; } public class VehicleDamagable : MonoBehaviour { public float health; public float maxHealth; public float minHealth; public VehicleDamagableMult dmgMult; public VehicleControl vehicle; public bool dead; private float prevhealth; public virtual void FixedUpdate() { if (health < 0f) { if (!dead) { onDeath(); dead = true; } whileDead(); } else { if (dead) { onUndeath(); dead = false; } whileUndead(); } if (health < minHealth) { health = minHealth; } if (health != prevhealth) { onHealthChange(); } prevhealth = health; } public virtual void onHealthChange() { } public bool HPLessThan(float num) { if (health < num) { return true; } return false; } public bool HPLessThanPercent(float num) { if (health < num * maxHealth) { return true; } return false; } public virtual void onDeath() { } public virtual void whileDead() { } public virtual void whileUndead() { } public virtual void onUndeath() { } public virtual void HealPercent(float percentHeal) { Heal(percentHeal * maxHealth); Debug.Log((object)("percenthealing for " + percentHeal)); } public virtual void Heal(float heal) { health += heal; Debug.Log((object)("Healed for " + heal)); } public virtual void Damage() { } public float getDamage() { return 0f; } } public class VehicleRepairTool : MonoBehaviour { public float percentHeal; private void OnCollisionEnter(Collision collision) { //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) Vector3 relativeVelocity = collision.relativeVelocity; if (!(((Vector3)(ref relativeVelocity)).magnitude < 2f)) { VehicleDamagable component = collision.gameObject.GetComponent<VehicleDamagable>(); if ((Object)(object)component != (Object)null) { component.HealPercent(percentHeal); } } } } internal class VehicleSeat : MonoBehaviour { public FVRViveHand hand; public GameObject SitPos; public GameObject EjectPos; public void Update() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)hand != (Object)null) { ((Component)hand.MovementManager).transform.position = SitPos.transform.position; } } } } namespace AndrewFTW { public class AttachableMagWell : FVRFireArmReloadTriggerWell { public FVRFireArmAttachment Attachment; public UniversalMagazineGrabTrigger MagGrabTrigger; public Transform MagMountPos; public Transform MagEjectPos; private float EjectDelay = 0f; private static Dictionary<FVRFireArm, List<AttachableMagWell>> _attachMagwelllDict = new Dictionary<FVRFireArm, List<AttachableMagWell>>(); private int _index; private SecondaryMagazineSlot _mySlot; } public class AttachableSimpleFirearm : AttachableFirearm { public FVRFireArmChamber Chamber; [Header("Trigger Config")] public Transform Trigger; public float TriggerFiringThreshold = 0.8f; public float TriggerResetThreshold = 0.4f; public float Trigger_ForwardValue; public float Trigger_RearwardValue; public Axis TriggerAxis; public InterpStyle TriggerInterpStyle = (InterpStyle)1; [NonSerialized] [HideInInspector] public float m_triggerFloat; [NonSerialized] [HideInInspector] public bool m_hasTriggerReset; [Header("Fore Slide Stuff")] public MovableObjectPart MoveableComponent; public FVRFirearmAudioSet[] AudioSets; public bool isDebug = false; } } namespace Plugin.src { public class AutoBolt : FVRFireArm { public enum ZPos { Forward, Middle, Rear } public enum HammerCockType { OnBack, OnUp, OnClose, OnForward } public enum FireSelectorModeType { Safe, Single } [Serializable] public class FireSelectorMode { public float SelectorPosition; public FireSelectorModeType ModeType; public bool IsBoltLocked; } private bool debug = false; [Header("BoltActionRifle Config")] public FVRFireArmChamber Chamber; public bool HasMagEjectionButton = true; public bool HasFireSelectorButton = true; public AutoBoltHandle BoltHandle; public float BoltLerp; public bool BoltMovingForward; public AutoBoltHandle.BoltActionHandleState CurBoltHandleState; public AutoBoltHandle.BoltActionHandleState LastBoltHandleState; [Header("Hammer Config")] public bool HasVisualHammer; public Transform Hammer; public float HammerUncocked; public float HammerCocked; private bool m_isHammerCocked; public HammerCockType CockType; private FVRFirearmMovingProxyRound m_proxy; [Header("Round Positions Config")] public Transform Extraction_MagazinePos; public Transform Extraction_ChamberPos; public Transform Extraction_Ejecting; public Transform EjectionPos; public float UpwardEjectionForce; public float RightwardEjectionForce = 2f; public float XSpinEjectionTorque = 80f; public Transform Muzzle; public GameObject ReloadTriggerWell; [Header("Control Config")] public float TriggerResetThreshold = 0.1f; public float TriggerFiringThreshold = 0.8f; private float m_triggerFloat; private bool m_hasTriggerCycled; private bool m_isMagReleasePressed; public Transform Trigger_Display; public float Trigger_ForwardValue; public float Trigger_RearwardValue; public InterpStyle TriggerInterpStyle = (InterpStyle)1; public Transform Trigger_Display2; public float Trigger_ForwardValue2; public float Trigger_RearwardValue2; public InterpStyle TriggerInterpStyle2 = (InterpStyle)1; public Transform MagReleaseButton_Display; public Axis MagReleaseAxis; public InterpStyle MagReleaseInterpStyle = (InterpStyle)1; public float MagReleasePressedValue; public float MagReleaseUnpressedValue; private float m_magReleaseCurValue; private float m_magReleaseTarValue; private Vector2 TouchPadAxes = Vector2.zero; public Transform FireSelector_Display; public Axis FireSelector_Axis; public InterpStyle FireSelector_InterpStyle = (InterpStyle)1; public FireSelectorMode[] FireSelector_Modes; private int m_fireSelectorMode; public bool RequiresHammerUncockedToToggleFireSelector; public bool UsesSecondFireSelectorChange; public Transform FireSelector_Display_Secondary; public Axis FireSelector_Axis_Secondary; public InterpStyle FireSelector_InterpStyle_Secondary = (InterpStyle)1; public FireSelectorMode[] FireSelector_Modes_Secondary; [Header("Special Features")] public bool EjectsMagazineOnEmpty; public bool PlaysExtraTailOnShot; public FVRTailSoundClass ExtraTail = (FVRTailSoundClass)8; private bool justFired = false; private bool isLerping1 = false; private bool isLerping2 = false; private bool doneLerp1 = false; private float startTime; private float journeyLengthBolt1; private float journeyLengthStock1; private float journeyLengthBolt2; private float journeyLengthStock2; private bool obj1Complete; private bool obj2Complete; private bool obj1Complete2; private bool obj2Complete2; private bool beginLerp2 = false; [Header("Lerp Speed >1")] public float lerpSpeedboltUp = 0.5f; public float lerpSpeedboltBack = 0.5f; public float lerpSpeedStockF = 0.5f; public float lerpSpeedStockR = 0.5f; [Header("Things to Lerp")] public GameObject boltObject; public GameObject stockObject; [Header("BoltPoints")] public Transform boltPt1; public Transform boltPt2; public Transform boltPt3; [Header("Stock Points")] public Transform stockPt1; public Transform stockPt2; [Header("Reciprocating Barrel")] public bool HasReciprocatingBarrel; public G11RecoilingSystem RecoilSystem; private bool m_isQuickboltTouching; private Vector2 lastTPTouchPoint = Vector2.zero; } public class AutoBoltHandle : FVRInteractiveObject { public enum BoltActionHandleState { Forward, Mid, Rear } public enum BoltActionHandleRot { Up, Mid, Down } public AutoBolt Rifle; public bool UsesQuickRelease; public Transform BoltActionHandleRoot; public Transform BoltActionHandle; public float BaseRotOffset; private float rotAngle; public float MinRot; public float MaxRot; public float UnlockThreshold = 70f; public Transform Point_Forward; public Transform Point_Rearward; public Vector3 HandPosOffset = new Vector3(0f, 0f, 0f); private bool m_wasTPInitiated; public bool UsesExtraRotationPiece; public Transform ExtraRotationPiece; public BoltActionHandleState HandleState; public BoltActionHandleState LastHandleState; public BoltActionHandleRot HandleRot = BoltActionHandleRot.Down; public BoltActionHandleRot LastHandleRot = BoltActionHandleRot.Down; private Vector3 m_localHandPos_BoltDown; private Vector3 m_localHandPos_BoltUp; private Vector3 m_localHandPos_BoltBack; private float fakeBoltDrive; } } namespace AndrewFTW { public class BackBlast : MonoBehaviour { public FVRFireArm Firearm; public List<GameObject> SpawnOnSplode; } } namespace FistVR { public class BetterAffixedFlashlight : FVRInteractiveObject { private bool IsOn; public GameObject LightParts; public AudioEvent AudEvent_LaserOnClip; public AudioEvent AudEvent_LaserOffClip; public override void SimpleInteraction(FVRViveHand hand) { ((FVRInteractiveObject)this).SimpleInteraction(hand); ToggleOn(); } private void ToggleOn() { //IL_005b: 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) IsOn = !IsOn; LightParts.SetActive(IsOn); if (IsOn) { SM.PlayCoreSound((FVRPooledAudioType)10, AudEvent_LaserOnClip, ((Component)this).transform.position); } else { SM.PlayCoreSound((FVRPooledAudioType)10, AudEvent_LaserOffClip, ((Component)this).transform.position); } } } } namespace AndrewFTW { public class BetterCaseless : MonoBehaviour { private FVRFireArmRound Round; } public class BipodExtras : MonoBehaviour { public FVRFireArmBipod Bipod; public bool Rotatelegs; public GameObject LegHolder1; public GameObject LegHolder2; public Vector3 LegOpenAngles1; public Vector3 LegOpenAngles2; public bool MoveObj; public GameObject ObjToMove; public Vector3 ObjOpenLocalPos; private bool m_beenUpdated = false; } public class BlastJumpOnFire : MonoBehaviour { public FVRFireArm Firearm; public bool IsMinigun; public float lungeStrength = -2f; } public class Blaster : FVRFireArm { [Header("Blaster Parts")] public FVRFireArmChamber Chamber; public Transform Trigger; public float TriggerFiringThreshold = 0.8f; public float TriggerResetThreshold = 0.4f; public float Trigger_ForwardValue; public float Trigger_RearwardValue; public Axis TriggerAxis; public InterpStyle TriggerInterpStyle = (InterpStyle)1; [NonSerialized] [HideInInspector] public float m_triggerFloat; [NonSerialized] [HideInInspector] public bool m_hasTriggerReset; public bool UsesHeat = true; public float HeatPerShot = 0.1f; public float HeatDisipationRate = 0.3f; public float SecondsPerShot = 0.3f; public float TimeDisabledAfterOverheat = 2f; public bool UsesHeatingEffect; public List<Renderer> Renderers = new List<Renderer>(); public bool isDebug = false; private float timeSinceLastShot = 0f; private bool isDisabled = false; private float heat = 0f; private float disipationTimer; private MaterialPropertyBlock PropertyBlock = new MaterialPropertyBlock(); } public class ChangePhysWhenSpent : MonoBehaviour { public FVRFireArmRound Round; public GameObject UnfiredPhys; public GameObject FiredPhys; } } namespace AFCL { public class ClosedBoltFireAttachedFirearmWithFiremode : ClosedBoltWeapon { public enum FireSelectorModeType { Safe, Single, Burst, FullAuto, FireAttached } [Serializable] public class FireSelectorMode { public float SelectorPosition; public FireSelectorModeType ModeType; public int BurstAmount = 3; public bool ARStyleBurst; public float EngagementDelay; } [NonSerialized] [HideInInspector] public float m_engagementDelay; } } public class EnableOnSpecificUser : MonoBehaviour { public enum action { Enable, Disable, ModifyFirearm } public action Action; public List<CSteamID> listofUsers; [Header("Object Enable")] public GameObject objectToEnable; [Header("Firearm Modify")] public Handgun Handgun; public bool HasMagReleaseButton; } namespace AndrewFTW { public class FireAttachableFirearmFromMainHand : MonoBehaviour { public enum FireSelectorModeType { Single, FullAuto } public enum firearmActionMode { ClosedBolt, OpenBolt } public FVRFireArm FireArm; public AttachableFirearm AttachableFirearm; public firearmActionMode FirearmActionMode = firearmActionMode.ClosedBolt; public FireSelectorModeType MainWeponFireMode = FireSelectorModeType.Single; public AudioEvent SwitchSound; private float triggerFW; private float triggerRW; private bool selectorOnMain = true; private static Dictionary<FVRPhysicalObject, FireAttachableFirearmFromMainHand> fireAttachables = new Dictionary<FVRPhysicalObject, FireAttachableFirearmFromMainHand>(); } public class FireSubprojAtDistance : MonoBehaviour { public BallisticProjectile parentRound; public float distanceToFire; [Header("Tangent Munitions")] public List<Submunition> TangentMunitions; public List<bool> usesParentSpeed; private bool m_hasFiredTangentMunitions; } public class FireSubprojAtTime : MonoBehaviour { [Serializable] public class c_TangentMunition { public enum SubmunitionType { GameObject, Projectile, Rigidbody, StickyBomb, MeleeThrown, Demonade } public enum SubmunitionTrajectoryType { Random, RicochetDir, Backwards, Forwards, ForwardsCone } public enum SubmunitionSpawnLogic { Outside, Inside, On } public List<GameObject> Prefabs; public int NumToSpawn; public SubmunitionTrajectoryType Trajectory; public SubmunitionType Type; public SubmunitionSpawnLogic SpawnLogic; public Vector2 Speed = default(Vector2); public bool usesParentSpeed; public float ConeLerp = 0.85f; } public BallisticProjectile parentRound; public float timeToFire; [Header("Tangent Munitions")] public List<c_TangentMunition> TangentMunitions; private bool m_hasFiredTangentMunitions; private float currLifeTime = 0f; } public class FireSubprojOnTimeOut : MonoBehaviour { public BallisticProjectile ParentRound; public Vector2 FuseTimer; private float _setFuseTimer; private float _fuseElapsedTime = 0f; } } namespace Plugin.src { public class ForeGripMagRelease : MonoBehaviour { public enum Axis { X, Y, Z } public ClosedBoltWeapon gun; public FVRAlternateGrip grip; public Transform button; public Axis axis; public float pressed; public float unpressed; public float InteractDelay2 = 0.75f; public GameObject InteractionCollider; private FVRViveHand m_hand; private bool isInteractHidden = false; } } namespace AndrewFTW { public class GrenadeLauncherRedDot : MonoBehaviour { [Header("Grenade Launcher Red Dot Config")] public FVRFireArmAttachment Attachment; public FVRInteractiveObject AttachmentInterface; public Transform TiltingOpticPart; public MeshRenderer ReticleMeshRenderer; [Header("Reticles")] [Tooltip("Index of the Array below, not the actual value. Starts at 0.")] public int CurrentSelectedTextureIndex = 0; public Texture2D[] ReticleTextures; [Tooltip("Switch that moves with the selected texture (optional).")] public Transform ButtonSwitch; public Vector3[] SwitchPositions; [Header("If you want a Screen above the scope that shows stuff, use this:")] public Transform TextFrame; public Text ReticleTextScreen; public Text ZeroTextScreen; public string ReticleTextPrefix = "Reticle: "; public string[] ReticleTextField; public string ZeroTextPrefix = "Zero Distance: "; [Tooltip("Index of the Array below, not the actual value. Starts at 0.")] public int CurrentZeroDistanceIndex = 0; [Tooltip("In meters. Miss me with that imperial shit!")] public float[] ZeroDistances = new float[7] { 50f, 100f, 150f, 200f, 300f, 500f, 1000f }; [Header("Intergrated Sight configuration")] public bool IsIntegrated = false; public AttachableFirearm AttachableFirearm; [Header("Reticle Occlusion culling")] [Tooltip("Use this for extra performant reticle occlusion culling")] public Collider LensCollider; public bool DisableOcclusionCulling = false; private FVRViveHand m_hand; private int _currentMenu = 0; private bool _zeroOnlyMode = false; private string _nameOfTexture = "_RedDotTex"; private string _nameOfDistanceVariable = "_RedDotDist"; private string _nameOfXOffset = "_MuzzleOffsetX"; private string _nameOfYOffset = "_MuzzleOffsetY"; private List<Collider> _scopeColliders; private Transform _muzzlePos; private bool _attached = false; private Transform _head; private Vector3 _leftEye; private Vector3 _rightEye; public void Start() { //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_0181: 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_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: 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_01c1: 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_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) if (CurrentSelectedTextureIndex >= ReticleTextures.Length) { CurrentSelectedTextureIndex = 0; } if (CurrentZeroDistanceIndex >= ZeroDistances.Length) { CurrentZeroDistanceIndex = 0; } if (ReticleTextures.Length != 0) { ((Renderer)ReticleMeshRenderer).material.SetTexture(_nameOfTexture, (Texture)(object)ReticleTextures[CurrentSelectedTextureIndex]); } ((Renderer)ReticleMeshRenderer).material.SetFloat(_nameOfDistanceVariable, ZeroDistances[CurrentZeroDistanceIndex]); if ((Object)(object)ButtonSwitch != (Object)null) { ButtonSwitch.localPosition = SwitchPositions[CurrentSelectedTextureIndex]; } if (ReticleTextures.Length <= 1) { _zeroOnlyMode = true; _currentMenu = 1; } _scopeColliders = new List<Collider>(((FVRInteractiveObject)Attachment).m_colliders); if (IsIntegrated) { _muzzlePos = AttachableFirearm.MuzzlePos; Vector3 val = _muzzlePos.InverseTransformPoint(((Component)ReticleMeshRenderer).transform.position); ((Renderer)ReticleMeshRenderer).material.SetFloat(_nameOfXOffset, 0f - val.x); ((Renderer)ReticleMeshRenderer).material.SetFloat(_nameOfYOffset, 0f - val.y); } StartScreen(); _head = GM.CurrentPlayerBody.Head; _leftEye = _head.position + _head.right * -0.032f; _rightEye = _head.position + _head.right * 0.032f; Zero(); } public void UseNextTexture() { //IL_0063: Unknown result type (might be due to invalid IL or missing references) CurrentSelectedTextureIndex = (CurrentSelectedTextureIndex + 1) % ReticleTextures.Length; ((Renderer)ReticleMeshRenderer).material.SetTexture(_nameOfTexture, (Texture)(object)ReticleTextures[CurrentSelectedTextureIndex]); if ((Object)(object)ButtonSwitch != (Object)null) { ButtonSwitch.localPosition = SwitchPositions[CurrentSelectedTextureIndex]; } UpdateScreen(); } public void UsePreviousTexture() { //IL_006c: Unknown result type (might be due to invalid IL or missing references) CurrentSelectedTextureIndex = (CurrentSelectedTextureIndex + ReticleTextures.Length - 1) % ReticleTextures.Length; ((Renderer)ReticleMeshRenderer).material.SetTexture(_nameOfTexture, (Texture)(object)ReticleTextures[CurrentSelectedTextureIndex]); if ((Object)(object)ButtonSwitch != (Object)null) { ButtonSwitch.localPosition = SwitchPositions[CurrentSelectedTextureIndex]; } UpdateScreen(); } private void ShowNextMenu() { if ((Object)(object)ReticleTextScreen == (Object)null && (Object)(object)ZeroTextScreen == (Object)null) { return; } _currentMenu++; if (_currentMenu > 2) { _currentMenu = 0; } switch (_currentMenu) { case 0: if ((Object)(object)ReticleTextScreen == (Object)null) { ShowNextMenu(); return; } break; case 1: if ((Object)(object)ZeroTextScreen == (Object)null) { ShowNextMenu(); return; } break; default: _currentMenu = 0; break; } UpdateScreen(); } private void UpdateScreen() { //IL_0040: 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) if ((Object)(object)ReticleTextScreen != (Object)null && _currentMenu == 0) { if ((Object)(object)TextFrame != (Object)null) { TextFrame.localPosition = ((Component)ReticleTextScreen).transform.localPosition; } ReticleTextScreen.text = ReticleTextPrefix + ReticleTextField[CurrentSelectedTextureIndex]; } else if ((Object)(object)ReticleTextScreen == (Object)null) { _currentMenu = 1; } if ((Object)(object)ZeroTextScreen != (Object)null && _currentMenu == 1) { if ((Object)(object)TextFrame != (Object)null) { TextFrame.localPosition = ((Component)ZeroTextScreen).transform.localPosition; } ZeroTextScreen.text = ZeroTextPrefix + ZeroDistances[CurrentZeroDistanceIndex] + "m"; } } private void StartScreen() { if ((Object)(object)ReticleTextScreen != (Object)null) { ReticleTextScreen.text = ReticleTextPrefix + ReticleTextField[CurrentSelectedTextureIndex]; } if ((Object)(object)ZeroTextScreen != (Object)null) { ZeroTextScreen.text = ZeroTextPrefix + ZeroDistances[CurrentZeroDistanceIndex] + "m"; } } public void UseNextZeroDistance() { if (CurrentZeroDistanceIndex > 0) { CurrentZeroDistanceIndex--; } ((Renderer)ReticleMeshRenderer).material.SetFloat(_nameOfDistanceVariable, ZeroDistances[CurrentZeroDistanceIndex]); UpdateScreen(); Zero(); } public void UsePreviousZeroDistance() { if (CurrentZeroDistanceIndex < ZeroDistances.Length - 1) { CurrentZeroDistanceIndex++; } ((Renderer)ReticleMeshRenderer).material.SetFloat(_nameOfDistanceVariable, ZeroDistances[CurrentZeroDistanceIndex]); UpdateScreen(); Zero(); } private void CheckReticleVisibility() { //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_028c: 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_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b4: Unknown result type (might be due to invalid IL or missing references) //IL_02b9: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02d5: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: 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_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_02f3: Unknown result type (might be due to invalid IL or missing references) //IL_02f8: Unknown result type (might be due to invalid IL or missing references) //IL_0305: 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_0338: Unknown result type (might be due to invalid IL or missing references) //IL_0343: Unknown result type (might be due to invalid IL or missing references) //IL_0355: Unknown result type (might be due to invalid IL or missing references) //IL_035a: Unknown result type (might be due to invalid IL or missing references) //IL_0360: Unknown result type (might be due to invalid IL or missing references) //IL_0365: Unknown result type (might be due to invalid IL or missing references) //IL_036a: Unknown result type (might be due to invalid IL or missing references) //IL_0376: Unknown result type (might be due to invalid IL or missing references) //IL_0381: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_016c: 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_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_039f: Unknown result type (might be due to invalid IL or missing references) //IL_03a4: Unknown result type (might be due to invalid IL or missing references) //IL_03b1: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) bool flag = false; if ((Object)(object)LensCollider == (Object)null && _scopeColliders.Count > 0) { float num = Vector3.Distance(((Component)this).gameObject.transform.position, GM.CurrentPlayerBody.Head.position) + 0.2f; Vector3 val = _muzzlePos.position + ((Component)this).transform.forward * ZeroDistances[CurrentZeroDistanceIndex] - _rightEye; bool flag2 = false; if (Vector3.Angle(GM.CurrentPlayerBody.Head.forward, ((Component)this).transform.forward) < 45f) { RaycastHit[] array = Physics.RaycastAll(_rightEye, val, num, LayerMask.NameToLayer("Environment"), (QueryTriggerInteraction)1); if (array.Length != 0) { RaycastHit[] array2 = array; for (int i = 0; i < array2.Length; i++) { RaycastHit val2 = array2[i]; if (_scopeColliders.Contains(((RaycastHit)(ref val2)).collider)) { ((Component)ReticleMeshRenderer).gameObject.SetActive(true); flag = true; } } } } if (!flag) { flag2 = false; val = _muzzlePos.position + ((Component)this).transform.forward * ZeroDistances[CurrentZeroDistanceIndex] - _leftEye; if (Vector3.Angle(GM.CurrentPlayerBody.Head.forward, ((Component)this).transform.forward) < 45f) { RaycastHit[] array = Physics.RaycastAll(_leftEye, val, num, LayerMask.NameToLayer("Environment"), (QueryTriggerInteraction)1); if (array.Length != 0) { RaycastHit[] array3 = array; for (int j = 0; j < array3.Length; j++) { RaycastHit val3 = array3[j]; if (_scopeColliders.Contains(((RaycastHit)(ref val3)).collider)) { ((Component)ReticleMeshRenderer).gameObject.SetActive(true); flag = true; } } } } } if (!flag) { ((Component)ReticleMeshRenderer).gameObject.SetActive(false); } } else if ((Object)(object)LensCollider != (Object)null) { float num2 = Vector3.Distance(((Component)this).gameObject.transform.position, GM.CurrentPlayerBody.Head.position) + 0.2f; Vector3 val4 = _muzzlePos.position + ((Component)this).transform.forward * ZeroDistances[CurrentZeroDistanceIndex] - _rightEye; if (Vector3.Angle(GM.CurrentPlayerBody.Head.forward, ((Component)this).transform.forward) < 45f) { Ray val5 = default(Ray); ((Ray)(ref val5))..ctor(_rightEye, val4); RaycastHit val6 = default(RaycastHit); if (LensCollider.Raycast(val5, ref val6, num2)) { ((Component)ReticleMeshRenderer).gameObject.SetActive(true); flag = true; } } if (!flag) { val4 = _muzzlePos.position + ((Component)this).transform.forward * ZeroDistances[CurrentZeroDistanceIndex] - _leftEye; if (Vector3.Angle(GM.CurrentPlayerBody.Head.forward, ((Component)this).transform.forward) < 45f) { Ray val7 = default(Ray); ((Ray)(ref val7))..ctor(_leftEye, val4); RaycastHit val8 = default(RaycastHit); if (LensCollider.Raycast(val7, ref val8, num2)) { ((Component)ReticleMeshRenderer).gameObject.SetActive(true); flag = true; } } } if (!flag) { ((Component)ReticleMeshRenderer).gameObject.SetActive(false); } } else { Debug.LogWarning((object)"No usable colliders for reticle occlusion found! If you are a modmaker, please add colliders or a lens collider, or disable occlusion culling with the checkbox!\n Disabling Occlusion culling now!"); DisableOcclusionCulling = true; } } public void Zero() { //IL_0095: 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_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_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_0112: 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_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0123: 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_013a: 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_0144: 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_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_015d: 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_0178: 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_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: 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_01d4: 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) if (IsIntegrated || ((Object)(object)Attachment != (Object)null && (Object)(object)Attachment.curMount != (Object)null && (Object)(object)Attachment.curMount.Parent != (Object)null && Attachment.curMount.Parent is FVRFireArm)) { if (IsIntegrated && (Object)(object)AttachableFirearm == (Object)null) { Debug.LogError((object)"ScopeShaderZoom: FireArm not set on integrated Scope! Can't zero sight!"); } FireArmRoundType roundType = AttachableFirearm.RoundType; float num = ZeroDistances[CurrentZeroDistanceIndex]; float num2 = 0f; if (AM.SRoundDisplayDataDic.ContainsKey(roundType)) { num2 = AM.SRoundDisplayDataDic[roundType].BulletDropCurve.Evaluate(num * 0.001f); } Vector3 val = AttachableFirearm.MuzzlePos.position + AttachableFirearm.GetMuzzle().forward * num + AttachableFirearm.GetMuzzle().up * num2; Vector3 val2 = Vector3.ProjectOnPlane(val - ((Component)this).transform.forward, ((Component)this).transform.right); Vector3 val3 = Vector3.ProjectOnPlane(val, ((Component)this).transform.right) + Vector3.Dot(((Component)this).transform.position, ((Component)this).transform.right) * ((Component)this).transform.right; TiltingOpticPart.LookAt(val3, ((Component)this).transform.up); TiltingOpticPart.localEulerAngles = new Vector3(TiltingOpticPart.localEulerAngles.x, TiltingOpticPart.localEulerAngles.y, 0f); } else { TiltingOpticPart.localRotation = Quaternion.identity; } } } public class KeepOnLayer : MonoBehaviour { public FVRPhysicalObject Object; public string LayerName; public Collider[] Colliders; private static Dictionary<FVRPhysicalObject, KeepOnLayer> _keepOnLayers = new Dictionary<FVRPhysicalObject, KeepOnLayer>(); } public class LightSimpleAngleSwitch : FVRInteractiveObject { public Light Light; public float[] LightAngleVals; private int _lightIndexVal = 0; } public class LightSimpleBrightnessSwitch : FVRInteractiveObject { public Light Light; public float[] LightIntensityVals; public GameObject LightEffectGameObject; private int _lightIndexVal = 0; } public class MagazineQueueFeed : MonoBehaviour { public FVRFireArmMagazine Mag; public bool isDebug = false; private static Dictionary<FVRFireArmMagazine, MagazineQueueFeed> _magQueues = new Dictionary<FVRFireArmMagazine, MagazineQueueFeed>(); } public class ObjectMountOnGround : FVRPhysicalObject { public Transform PlacementRayPoint; public LayerMask PlacementLayerMask; public float MaxPlacementAngle = 75f; public float DistToGroundFromOrigin; [NonSerialized] public RaycastHit m_hit; private bool m_OnGround; } public class PlayRandomSoundOnAwake : MonoBehaviour { public AudioClip[] AudioClips; public AudioSource AudioSource; } public class ReactiveTarget : ReactiveSteelTarget { public Vector2 BulletHoleSizeRange2 = new Vector2(0.075f, 0.12f); public Vector2 DamageScaleRange = new Vector2(400f, 2000f); } public class RotateUp : MonoBehaviour { } public class SimpleSwitch : FVRInteractiveObject { public bool OnOff = true; public GameObject[] ItemsToToggle; public AudioEvent AudEvent_OnClip; public AudioEvent AudEvent_OffClip; private bool _isItemToggled = false; public void Start() { ((FVRInteractiveObject)this).Start(); if (ItemsToToggle[0].activeSelf) { _isItemToggled = true; } else { _isItemToggled = false; } } public override void SimpleInteraction(FVRViveHand hand) { //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) ((FVRInteractiveObject)this).SimpleInteraction(hand); if (!OnOff) { return; } if (_isItemToggled) { GameObject[] itemsToToggle = ItemsToToggle; foreach (GameObject val in itemsToToggle) { val.SetActive(false); } SM.PlayCoreSound((FVRPooledAudioType)10, AudEvent_OffClip, ((Component)this).transform.position); _isItemToggled = false; } else { GameObject[] itemsToToggle2 = ItemsToToggle; foreach (GameObject val2 in itemsToToggle2) { val2.SetActive(true); } SM.PlayCoreSound((FVRPooledAudioType)10, AudEvent_OnClip, ((Component)this).transform.position); _isItemToggled = true; } } } public class SpringLoadedStockButton : FVRInteractiveObject { [Header("This only works for z axis movemen