using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; using AndrewFTW; using BepInEx; using BepInEx.Logging; using FistVR; using HarmonyLib; using ModularWorkshop; using OtherLoader; using UnityEngine; [assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] namespace PressurePadAttachment { public class PressurePadAttachmentInterface : FVRFireArmAttachmentInterface { [Header("Pressure Pad Attachment Config")] public float DoubleTapWaitTime = 0.333f; private bool _isLightToggle = false; private bool _isLaserToggle = false; private FVRAlternateGrip _altGrip; private bool _wasAltGripGrabbed = false; private float _timeWaited = 0f; private bool _waitingForDoubleTap = false; private bool _irActive = false; private bool _strobeActive = false; private readonly List _flashlights = new List(); private readonly List _lasers = new List(); private readonly List _laserLights = new List(); private List _advancedLaserControllers = new List(); private Dictionary> _advancedLights = new Dictionary>(); private Dictionary> _advancedLasers = new Dictionary>(); private Dictionary> _advancedIRLights = new Dictionary>(); private Dictionary> _advancedIRLasers = new Dictionary>(); private Dictionary> _advancedStrobes = new Dictionary>(); private static Dictionary _existingPressurePadAttachments; private static readonly IntPtr _baseUpdateInteractionPointer; private static readonly FieldInfo _advancedLasersCurrentEmmitterIndexFieldInfo; static PressurePadAttachmentInterface() { _existingPressurePadAttachments = new Dictionary(); Harmony.CreateAndPatchAll(typeof(PressurePadAttachmentInterface), (string)null); _baseUpdateInteractionPointer = typeof(FVRAlternateGrip).BaseType.GetMethod("UpdateInteraction").MethodHandle.GetFunctionPointer(); _advancedLasersCurrentEmmitterIndexFieldInfo = typeof(AdvancedLaserController).GetField("_currentEmitterIndex", BindingFlags.Instance | BindingFlags.NonPublic); } public override void OnDestroy() { ((FVRInteractiveObject)this).OnDestroy(); if ((Object)(object)_altGrip != (Object)null) { _existingPressurePadAttachments.Remove(_altGrip); } } public override void OnAttach() { ((FVRFireArmAttachmentInterface)this).OnAttach(); if ((Object)(object)base.Attachment.curMount != (Object)null && base.Attachment.curMount.GetRootMount().MyObject is FVRFireArm) { FVRPhysicalObject myObject = base.Attachment.curMount.GetRootMount().MyObject; if ((Object)(object)((FVRFireArm)((myObject is FVRFireArm) ? myObject : null)).Foregrip != (Object)null) { ref FVRAlternateGrip altGrip = ref _altGrip; FVRPhysicalObject myObject2 = base.Attachment.curMount.GetRootMount().MyObject; altGrip = ((FVRFireArm)((myObject2 is FVRFireArm) ? myObject2 : null)).Foregrip.GetComponent(); } else { _altGrip = ((Component)base.Attachment.curMount.GetRootMount().MyObject).GetComponentInChildren(true); } } } public override void OnDetach() { if ((Object)(object)_altGrip != (Object)null) { _existingPressurePadAttachments.Remove(_altGrip); _altGrip = null; } ToggleLights(on: false); ToggleLasers(on: false); ((FVRFireArmAttachmentInterface)this).OnDetach(); } public override void FVRUpdate() { //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0119: 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_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_0326: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) ((FVRInteractiveObject)this).FVRUpdate(); if (!((Object)(object)_altGrip != (Object)null)) { return; } if (!_existingPressurePadAttachments.ContainsKey(_altGrip)) { _existingPressurePadAttachments.Add(_altGrip, this); } FVRViveHand hand = ((FVRInteractiveObject)_altGrip).m_hand; if (!_wasAltGripGrabbed && (Object)(object)hand != (Object)null) { _wasAltGripGrabbed = true; CreateDictionaries(); } else if (_wasAltGripGrabbed && (Object)(object)hand == (Object)null) { _wasAltGripGrabbed = false; } if (!((Object)(object)hand != (Object)null)) { return; } if (!hand.IsInStreamlinedMode) { if (hand.Input.TouchpadDown && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.up) < 45f) { if (!_waitingForDoubleTap) { ((MonoBehaviour)this).StartCoroutine(WaitForDoubleTap(up: true)); } } else if (hand.Input.TouchpadDown && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.down) < 45f && !_waitingForDoubleTap) { ((MonoBehaviour)this).StartCoroutine(WaitForDoubleTap(up: false)); } } else if (hand.Input.BYButtonDown) { if (!_waitingForDoubleTap) { ((MonoBehaviour)this).StartCoroutine(WaitForDoubleTap(up: true)); } } else if (hand.Input.AXButtonDown && !_waitingForDoubleTap) { ((MonoBehaviour)this).StartCoroutine(WaitForDoubleTap(up: false)); } if (hand.Input.TouchpadDown && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.left) < 45f) { ToggleLights(on: false); ToggleLasers(on: false); _irActive = !_irActive; ToggleLights(_isLightToggle); ToggleLasers(_isLaserToggle); } else if (hand.Input.TouchpadDown && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.right) < 45f) { ToggleStrobe(); } if (!hand.IsInStreamlinedMode) { if (hand.Input.TouchpadPressed && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.up) < 45f) { ToggleLights(on: true); } else if (hand.Input.TouchpadUp && !_isLightToggle) { ToggleLights(on: false); } } else if (hand.Input.BYButtonPressed) { ToggleLights(on: true); } else if (hand.Input.BYButtonUp && !_isLightToggle) { ToggleLights(on: false); } if (!hand.IsInStreamlinedMode) { if (hand.Input.TouchpadPressed && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.down) < 45f) { ToggleLasers(on: true); } else if (hand.Input.TouchpadUp && !_isLaserToggle) { ToggleLasers(on: false); } } else if (hand.Input.AXButtonPressed) { ToggleLasers(on: true); } else if (hand.Input.AXButtonUp && !_isLaserToggle) { ToggleLasers(on: false); } } public override void UpdateInteraction(FVRViveHand hand) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_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) ((FVRFireArmAttachmentInterface)this).UpdateInteraction(hand); if (hand.Input.TouchpadDown && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.left) < 45f) { ToggleLights(on: false); ToggleLasers(on: false); _irActive = !_irActive; ToggleLights(_isLightToggle); ToggleLasers(_isLaserToggle); } else if (hand.Input.TouchpadDown && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.right) < 45f) { ToggleStrobe(); } } public void CreateDictionaries() { //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Expected O, but got Unknown //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Expected O, but got Unknown //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Expected O, but got Unknown //IL_02f9: Unknown result type (might be due to invalid IL or missing references) //IL_02ff: Invalid comparison between Unknown and I4 //IL_030d: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Invalid comparison between Unknown and I4 //IL_0371: Unknown result type (might be due to invalid IL or missing references) //IL_0377: Invalid comparison between Unknown and I4 //IL_03d5: Unknown result type (might be due to invalid IL or missing references) //IL_03db: Invalid comparison between Unknown and I4 //IL_0439: Unknown result type (might be due to invalid IL or missing references) //IL_043f: Invalid comparison between Unknown and I4 //IL_049d: Unknown result type (might be due to invalid IL or missing references) //IL_04a3: Invalid comparison between Unknown and I4 foreach (KeyValuePair> advancedLight in _advancedLights) { advancedLight.Value.Clear(); } foreach (KeyValuePair> advancedLaser in _advancedLasers) { advancedLaser.Value.Clear(); } foreach (KeyValuePair> advancedIRLight in _advancedIRLights) { advancedIRLight.Value.Clear(); } foreach (KeyValuePair> advancedIRLaser in _advancedIRLasers) { advancedIRLaser.Value.Clear(); } foreach (KeyValuePair> advancedStrobe in _advancedStrobes) { advancedStrobe.Value.Clear(); } _flashlights.Clear(); _lasers.Clear(); _laserLights.Clear(); _advancedLaserControllers.Clear(); _advancedLights.Clear(); _advancedLasers.Clear(); _advancedIRLights.Clear(); _advancedIRLasers.Clear(); _advancedStrobes.Clear(); foreach (FVRFireArmAttachment attachments in base.Attachment.curMount.GetRootMount().MyObject.AttachmentsList) { if (attachments.AttachmentInterface is TacticalFlashlight) { _flashlights.Add((TacticalFlashlight)attachments.AttachmentInterface); continue; } if (attachments.AttachmentInterface is LaserPointer) { _lasers.Add((LaserPointer)attachments.AttachmentInterface); continue; } if (attachments.AttachmentInterface is LaserLightAttachment) { _laserLights.Add((LaserLightAttachment)attachments.AttachmentInterface); continue; } AdvancedLaserController componentInChildren = ((Component)attachments).GetComponentInChildren(); if ((Object)(object)componentInChildren != (Object)null) { _advancedLaserControllers.Add(componentInChildren); } } foreach (AdvancedLaserController advancedLaserController in _advancedLaserControllers) { for (int i = 0; i < advancedLaserController.ListOfEmitterObjects.Count; i++) { List value; if ((int)advancedLaserController.ListOfEmitterTypes[i] == 1 || (int)advancedLaserController.ListOfEmitterTypes[i] == 6) { if (_advancedLasers.TryGetValue(advancedLaserController, out value)) { value.Add(i); continue; } List list = new List(); list.Add(i); value = list; _advancedLasers.Add(advancedLaserController, value); } else if ((int)advancedLaserController.ListOfEmitterTypes[i] == 3) { if (_advancedLights.TryGetValue(advancedLaserController, out value)) { value.Add(i); continue; } List list = new List(); list.Add(i); value = list; _advancedLights.Add(advancedLaserController, value); } else if ((int)advancedLaserController.ListOfEmitterTypes[i] == 2) { if (_advancedIRLasers.TryGetValue(advancedLaserController, out value)) { value.Add(i); continue; } List list = new List(); list.Add(i); value = list; _advancedIRLasers.Add(advancedLaserController, value); } else if ((int)advancedLaserController.ListOfEmitterTypes[i] == 4) { if (_advancedIRLights.TryGetValue(advancedLaserController, out value)) { value.Add(i); continue; } List list = new List(); list.Add(i); value = list; _advancedIRLights.Add(advancedLaserController, value); } else if ((int)advancedLaserController.ListOfEmitterTypes[i] == 5) { if (_advancedStrobes.TryGetValue(advancedLaserController, out value)) { value.Add(i); continue; } List list = new List(); list.Add(i); value = list; _advancedStrobes.Add(advancedLaserController, value); } } } } public void ToggleLights(bool on) { foreach (LaserLightAttachment laserLight in _laserLights) { if ((Object)(object)laserLight.Light != (Object)null) { int num = FindCorrectLaserLightSettingsIndex(laserLight, _isLaserToggle, on, _irActive); if (num != -1) { laserLight.SettingsIndex = num; laserLight.UpdateParams(); } } } if (on) { if (!_irActive) { foreach (TacticalFlashlight flashlight in _flashlights) { if (!flashlight.IsOn) { flashlight.ToggleOn(); } } { foreach (KeyValuePair> advancedLight in _advancedLights) { foreach (int item in advancedLight.Value) { int num2 = (int)_advancedLasersCurrentEmmitterIndexFieldInfo.GetValue(advancedLight.Key); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedLight.Key, item); advancedLight.Key.ToggleRight(); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedLight.Key, num2); } } return; } } { foreach (KeyValuePair> advancedIRLight in _advancedIRLights) { foreach (int item2 in advancedIRLight.Value) { int num3 = (int)_advancedLasersCurrentEmmitterIndexFieldInfo.GetValue(advancedIRLight.Key); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedIRLight.Key, item2); advancedIRLight.Key.ToggleRight(); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedIRLight.Key, num3); } } return; } } foreach (TacticalFlashlight flashlight2 in _flashlights) { if (flashlight2.IsOn) { flashlight2.ToggleOn(); } } foreach (KeyValuePair> advancedLight2 in _advancedLights) { foreach (int item3 in advancedLight2.Value) { int num4 = (int)_advancedLasersCurrentEmmitterIndexFieldInfo.GetValue(advancedLight2.Key); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedLight2.Key, item3); advancedLight2.Key.ToggleLeft(); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedLight2.Key, num4); } } foreach (KeyValuePair> advancedIRLight2 in _advancedIRLights) { foreach (int item4 in advancedIRLight2.Value) { int num5 = (int)_advancedLasersCurrentEmmitterIndexFieldInfo.GetValue(advancedIRLight2.Key); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedIRLight2.Key, item4); advancedIRLight2.Key.ToggleLeft(); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedIRLight2.Key, num5); } } } public void ToggleLasers(bool on) { foreach (LaserLightAttachment laserLight in _laserLights) { if ((Object)(object)laserLight.LL != (Object)null) { int num = FindCorrectLaserLightSettingsIndex(laserLight, on, _isLightToggle, _irActive); if (num != -1) { laserLight.SettingsIndex = num; laserLight.UpdateParams(); } } } if (on) { if (!_irActive) { foreach (LaserPointer laser in _lasers) { if (!laser.IsOn) { laser.ToggleOn(); } } { foreach (KeyValuePair> advancedLaser in _advancedLasers) { foreach (int item in advancedLaser.Value) { int num2 = (int)_advancedLasersCurrentEmmitterIndexFieldInfo.GetValue(advancedLaser.Key); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedLaser.Key, item); advancedLaser.Key.ToggleRight(); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedLaser.Key, num2); } } return; } } { foreach (KeyValuePair> advancedIRLaser in _advancedIRLasers) { foreach (int item2 in advancedIRLaser.Value) { int num3 = (int)_advancedLasersCurrentEmmitterIndexFieldInfo.GetValue(advancedIRLaser.Key); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedIRLaser.Key, item2); advancedIRLaser.Key.ToggleRight(); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedIRLaser.Key, num3); } } return; } } foreach (LaserPointer laser2 in _lasers) { if (laser2.IsOn) { laser2.ToggleOn(); } } foreach (KeyValuePair> advancedLaser2 in _advancedLasers) { foreach (int item3 in advancedLaser2.Value) { int num4 = (int)_advancedLasersCurrentEmmitterIndexFieldInfo.GetValue(advancedLaser2.Key); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedLaser2.Key, item3); advancedLaser2.Key.ToggleLeft(); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedLaser2.Key, num4); } } foreach (KeyValuePair> advancedIRLaser2 in _advancedIRLasers) { foreach (int item4 in advancedIRLaser2.Value) { int num5 = (int)_advancedLasersCurrentEmmitterIndexFieldInfo.GetValue(advancedIRLaser2.Key); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedIRLaser2.Key, item4); advancedIRLaser2.Key.ToggleLeft(); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedIRLaser2.Key, num5); } } } public void ToggleStrobe() { _strobeActive = !_strobeActive; foreach (KeyValuePair> advancedStrobe in _advancedStrobes) { foreach (int item in advancedStrobe.Value) { int num = (int)_advancedLasersCurrentEmmitterIndexFieldInfo.GetValue(advancedStrobe.Key); _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedStrobe.Key, item); if (_strobeActive) { advancedStrobe.Key.ToggleRight(); } else { advancedStrobe.Key.ToggleLeft(); } _advancedLasersCurrentEmmitterIndexFieldInfo.SetValue(advancedStrobe.Key, num); } } } private IEnumerator WaitForDoubleTap(bool up) { yield return null; _timeWaited = 0f; _waitingForDoubleTap = true; FVRViveHand hand = ((FVRInteractiveObject)_altGrip).m_hand; while (_timeWaited < DoubleTapWaitTime) { _timeWaited += Time.deltaTime; if (!hand.IsInStreamlinedMode) { if (up && hand.Input.TouchpadDown && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.up) < 45f) { _isLightToggle = !_isLightToggle; break; } if (!up && hand.Input.TouchpadDown && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.down) < 45f) { _isLaserToggle = !_isLaserToggle; break; } } else { if (up && hand.Input.BYButtonDown) { _isLightToggle = !_isLightToggle; break; } if (!up && hand.Input.AXButtonDown) { _isLaserToggle = !_isLaserToggle; break; } } yield return null; } _waitingForDoubleTap = false; } private int FindCorrectLaserLightSettingsIndex(LaserLightAttachment laserLight, bool laserOn, bool lightOn, bool IROn) { int result = -1; LaserLightSetting val = laserLight.Settings[laserLight.SettingsIndex]; if (!laserOn && !lightOn) { result = laserLight.Settings.FindIndex((LaserLightSetting x) => (int)x.LaserMode == 0 && (int)x.LightMode == 0); } else if (laserOn && lightOn && !IROn) { result = laserLight.Settings.FindIndex((LaserLightSetting x) => (int)x.LaserMode == 1 && (int)x.LightMode == 1); } else if (laserOn && lightOn && IROn) { result = laserLight.Settings.FindIndex((LaserLightSetting x) => (int)x.LaserMode == 2 && (int)x.LightMode == 3); } else if (laserOn && !lightOn && !IROn) { result = laserLight.Settings.FindIndex((LaserLightSetting x) => (int)x.LaserMode == 1 && (int)x.LightMode == 0); } else if (!laserOn && lightOn && !IROn) { result = laserLight.Settings.FindIndex((LaserLightSetting x) => (int)x.LaserMode == 0 && (int)x.LightMode == 1); } else if (laserOn && !lightOn && IROn) { result = laserLight.Settings.FindIndex((LaserLightSetting x) => (int)x.LaserMode == 2 && (int)x.LightMode == 0); } else if (!laserOn && lightOn && IROn) { result = laserLight.Settings.FindIndex((LaserLightSetting x) => (int)x.LaserMode == 0 && (int)x.LightMode == 3); } else if (laserOn && lightOn && !IROn) { result = laserLight.Settings.FindIndex((LaserLightSetting x) => (int)x.LaserMode == 1 && (int)x.LightMode == 0); } else if (laserOn && lightOn && !IROn) { result = laserLight.Settings.FindIndex((LaserLightSetting x) => (int)x.LaserMode == 0 && (int)x.LightMode == 1); } else if (laserOn && lightOn && IROn) { result = laserLight.Settings.FindIndex((LaserLightSetting x) => (int)x.LaserMode == 2 && (int)x.LightMode == 0); } else if (laserOn && lightOn && IROn) { result = laserLight.Settings.FindIndex((LaserLightSetting x) => (int)x.LaserMode == 0 && (int)x.LightMode == 3); } return result; } [HarmonyPatch(typeof(FVRAlternateGrip), "UpdateInteraction")] [HarmonyPrefix] public static bool AltGripUpdateInteractionPatch(FVRAlternateGrip __instance, FVRViveHand hand) { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: 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_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) if (_existingPressurePadAttachments.ContainsKey(__instance)) { Action action = (Action)Activator.CreateInstance(typeof(Action), __instance, _baseUpdateInteractionPointer); action(hand); Vector2 touchpadAxes = hand.Input.TouchpadAxes; bool flag = true; if (!__instance.DoesBracing) { flag = false; } if (__instance.m_wasGrabbedFromAttachableForegrip && !__instance.m_lastGrabbedInGrip.DoesBracing) { flag = false; } if (__instance.PrimaryObject.IsAltHeld) { flag = false; } if (flag && hand.Input.TriggerPressed) { if (!__instance.m_hasSavedPalmPoint) { __instance.AttemptToGenerateSavedPalmPoint(); if (__instance.m_hasSavedPalmPoint) { hand.Buzz(hand.Buzzer.Buzz_BeginInteraction); } } else if (Vector3.Distance(__instance.m_savedRigPalmPos, ((FVRInteractiveObject)__instance).m_hand.PalmTransform.position) > 0.2f) { __instance.ClearSavedPalmPoint(); } } else if (__instance.m_hasSavedPalmPoint) { __instance.ClearSavedPalmPoint(); } if (hand.Input.TriggerUp) { __instance.ClearSavedPalmPoint(); } if (!__instance.m_wasGrabbedFromAttachableForegrip && __instance.HasQuickMagEject && __instance.PrimaryObject is FVRFireArm) { FVRPhysicalObject primaryObject = __instance.PrimaryObject; FVRFireArm val = (FVRFireArm)(object)((primaryObject is FVRFireArm) ? primaryObject : null); if (val.UsesMagazines && (Object)(object)val.Magazine != (Object)null && !val.Magazine.IsIntegrated) { if (hand.IsInStreamlinedMode) { if (hand.Input.AXButtonDown) { val.EjectMag(false); } } else if (hand.Input.TouchpadDown && Vector2.Angle(Vector2.down, touchpadAxes) < 45f && ((Vector2)(ref touchpadAxes)).magnitude > 0.2f) { val.EjectMag(false); } } } __instance.PassHandInput(hand, (FVRInteractiveObject)(object)__instance); return false; } return true; } } } [RequireComponent(typeof(AudioLowPassFilter))] [RequireComponent(typeof(AudioSource))] public class DistanceEqualizer : MonoBehaviour { public bool Cutoff = true; public bool VolumeDecrease = true; public bool Debugging = true; public float StartCutoffFrom = 10f; [Range(0f, 1f)] public float WallCutoff = 0.5f; [Range(0.01f, 1f)] public float DistanceCutoff = 0.3f; [Range(0f, 1f)] public float VolDecPerWall = 0.05f; private float distance; private float distcut; private float wallcut; private AudioListener AudioListener; private AudioSource AudioSource; private RaycastHit[] hits; private Ray ray; private void Start() { AudioListener = Object.FindObjectOfType(); AudioSource = ((Component)this).gameObject.GetComponent(); ((Behaviour)((Component)this).gameObject.GetComponent()).enabled = true; } private void FixedUpdate() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) distance = Vector3.Distance(((Component)this).transform.position, ((Component)AudioListener).transform.position); if (distance < AudioSource.maxDistance) { ray = new Ray(((Component)this).transform.position, ((Component)AudioListener).transform.position - ((Component)this).transform.position); hits = Physics.RaycastAll(ray, distance); if (VolumeDecrease) { ((Component)this).gameObject.GetComponent().volume = 1f - VolDecPerWall * (float)hits.Length; } if (Cutoff) { distcut = 22000f * Mathf.Pow(0.6f, (distance - StartCutoffFrom) * Mathf.Pow(DistanceCutoff * 10f, 3f) / 1000f); wallcut = Mathf.Atan((float)hits.Length * (1f + 10f * WallCutoff)) * distcut * WallCutoff; ((Component)this).gameObject.GetComponent().cutoffFrequency = distcut - wallcut; } if (Debugging) { Debug.Log((object)("Gameobject '" + ((Object)((Component)this).gameObject).name + "' :: Walls: " + hits.Length + "; current volume: " + ((Component)this).gameObject.GetComponent().volume + "; current cutoff: " + ((Component)this).gameObject.GetComponent().cutoffFrequency)); Debug.DrawLine(((Component)this).transform.position, ((Component)AudioListener).transform.position, Color.green); } } } } public class Cam : MonoBehaviour { private GameObject AudioSource; public float speed = 10f; private void Start() { speed = 0f - speed; AudioSource = GameObject.Find("Turret"); } private void Update() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) ((Component)this).transform.LookAt(AudioSource.transform); if (((Component)this).transform.position.z <= -100f || ((Component)this).transform.position.z >= 300f) { speed = 0f - speed; } ((Component)this).transform.Translate(Vector3.forward * speed * Time.deltaTime, (Space)0); } } public class Fire : MonoBehaviour { private float random; private float curTime; private AudioSource AudioSource; private GameObject Flash1; private GameObject Flash2; private void Start() { AudioSource = ((Component)this).gameObject.GetComponent(); Flash1 = GameObject.Find("Fire1"); Flash2 = GameObject.Find("Fire2"); } private void FixedUpdate() { random = Random.Range(0, 100); if (random > 95f && !AudioSource.isPlaying) { AudioSource.Play(); } if (AudioSource.isPlaying) { curTime += Time.deltaTime; if ((double)curTime > 0.1) { ((Behaviour)Flash1.GetComponent()).enabled = !((Behaviour)Flash1.GetComponent()).enabled; if (((Behaviour)Flash1.GetComponent()).enabled) { ((Behaviour)Flash2.GetComponent()).enabled = false; } else { ((Behaviour)Flash2.GetComponent()).enabled = true; } curTime = 0f; } } else { ((Behaviour)Flash1.GetComponent()).enabled = false; ((Behaviour)Flash2.GetComponent()).enabled = false; } } } public class Look : MonoBehaviour { private AudioListener AudioListener; private void Start() { AudioListener = Object.FindObjectOfType(); } private void Update() { ((Component)this).transform.LookAt(((Component)AudioListener).transform); } } public class OrientationAxis : MonoBehaviour { public enum AxisEnum { None = -1, X, Y, Z, XY, XZ, YZ, XYZ } public AxisEnum axis = AxisEnum.None; public Transform directionObject; public Vector3 worldDirection = Vector3.up; private void Update() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0117: 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) if (!((Object)(object)directionObject.parent == (Object)null)) { Vector3 val = worldDirection; Quaternion rotation = directionObject.parent.rotation; Vector3 eulerAngles = ((Quaternion)(ref rotation)).eulerAngles; switch (axis) { case AxisEnum.X: val.y = eulerAngles.y; val.z = eulerAngles.z; break; case AxisEnum.Y: val.x = eulerAngles.x; val.z = eulerAngles.z; break; case AxisEnum.Z: val.x = eulerAngles.x; val.y = eulerAngles.y; break; case AxisEnum.XY: val.z = eulerAngles.z; break; case AxisEnum.XZ: val.y = eulerAngles.y; break; case AxisEnum.YZ: val.x = eulerAngles.x; break; } directionObject.rotation = Quaternion.Euler(val); } } } public class AutoRotate : MonoBehaviour { public float m_Speed = 30f; private void Update() { float num = Time.deltaTime * m_Speed; ((Component)this).transform.Rotate(num, num, 0f); } } public class Demo : MonoBehaviour { private void Start() { QualitySettings.antiAliasing = 8; } private void OnGUI() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) GUI.Box(new Rect(10f, 10f, 150f, 25f), "Heat Wave Demo"); } } [RequireComponent(typeof(Camera))] public class FreeCamera : MonoBehaviour { public float m_MoveSpeed = 0f; public float m_RotateSpeed = 0f; public KeyCode m_ForwardButton = (KeyCode)119; public KeyCode m_BackwardButton = (KeyCode)115; public KeyCode m_RightButton = (KeyCode)100; public KeyCode m_LeftButton = (KeyCode)97; public KeyCode m_UpButton = (KeyCode)113; public KeyCode m_DownButton = (KeyCode)101; private void Update() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) Vector3 moveTo = Vector3.zero; Move(m_ForwardButton, ref moveTo, ((Component)this).transform.forward); Move(m_BackwardButton, ref moveTo, -((Component)this).transform.forward); Move(m_RightButton, ref moveTo, ((Component)this).transform.right); Move(m_LeftButton, ref moveTo, -((Component)this).transform.right); Move(m_UpButton, ref moveTo, ((Component)this).transform.up); Move(m_DownButton, ref moveTo, -((Component)this).transform.up); Transform transform = ((Component)this).transform; transform.position += moveTo * m_MoveSpeed * Time.deltaTime; if (Input.GetMouseButton(0)) { Vector3 eulerAngles = ((Component)this).transform.eulerAngles; eulerAngles.x += (0f - Input.GetAxis("Mouse Y")) * 359f * m_RotateSpeed; eulerAngles.y += Input.GetAxis("Mouse X") * 359f * m_RotateSpeed; ((Component)this).transform.eulerAngles = eulerAngles; } } private void Move(KeyCode key, ref Vector3 moveTo, Vector3 dir) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKey(key)) { moveTo = dir; } } } [RequireComponent(typeof(Camera))] public class HeatWave : MonoBehaviour { [Range(0.003f, 0.02f)] public float m_Strength = 0.01f; public Material m_MatHeatWave; public bool m_ShowInternalMaps = false; [Header("Internal")] private LayerMask m_LmHeatWave; public Shader m_SdrDepthOnly; public RenderTexture m_RTMask; public Camera m_RTCamera; public GameObject m_RTCameraGo; private void Start() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown if (!SystemInfo.supportsImageEffects) { ((Behaviour)this).enabled = false; return; } m_LmHeatWave = LayerMask.op_Implicit(LayerMask.NameToLayer("TransparentFX")); m_RTMask = new RenderTexture(Screen.width, Screen.height, 16); ((Object)m_RTMask).hideFlags = (HideFlags)52; m_SdrDepthOnly = Shader.Find("Heat Wave/Depth Only"); } private void Update() { //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: 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_003c: Expected O, but got Unknown Camera main = Camera.main; if ((Object)(object)m_RTCamera == (Object)null) { m_RTCameraGo = new GameObject("Mask Camera", new Type[1] { typeof(Camera) }); ((Object)m_RTCameraGo).hideFlags = (HideFlags)52; m_RTCamera = m_RTCameraGo.GetComponent(); } m_RTCamera.CopyFrom(main); ((Behaviour)m_RTCamera).enabled = false; m_RTCamera.targetTexture = m_RTMask; m_RTCamera.cullingMask = ~(1 << LayerMask.op_Implicit(m_LmHeatWave)); m_RTCamera.clearFlags = (CameraClearFlags)2; m_RTCamera.backgroundColor = new Color(0.5f, 0.5f, 1f); m_RTCamera.RenderWithShader(m_SdrDepthOnly, ""); m_RTCamera.cullingMask = 1 << LayerMask.op_Implicit(m_LmHeatWave); m_RTCamera.clearFlags = (CameraClearFlags)4; m_RTCamera.Render(); } private void OnDisable() { if (Object.op_Implicit((Object)(object)m_RTCamera)) { Object.DestroyImmediate((Object)(object)m_RTCamera); m_RTCamera = null; } if (Object.op_Implicit((Object)(object)m_RTCameraGo)) { Object.DestroyImmediate((Object)(object)m_RTCameraGo); m_RTCameraGo = null; } } private void OnRenderImage(RenderTexture src, RenderTexture dst) { m_MatHeatWave.SetFloat("_Strength", m_Strength); m_MatHeatWave.SetTexture("_DistortionTex", (Texture)(object)m_RTMask); Graphics.Blit((Texture)(object)src, dst, m_MatHeatWave); } private void OnGUI() { //IL_0020: 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) if (m_ShowInternalMaps) { GUI.DrawTextureWithTexCoords(new Rect(10f, 10f, 128f, 128f), (Texture)(object)m_RTMask, new Rect(0f, 0f, 1f, 1f)); } } } public class EnableObjOnSkinSelect : MonoBehaviour { [Header("Hover Over Variables To Read The Tooltips!!!")] [Tooltip("Your weapon object.")] public GameObject ModularWeapon; [Tooltip("ID of the skin to enable/disable objects on.")] public string skinID; [Tooltip("All objects you want enabled when the skin is selected.")] public GameObject[] objectsEnabled; [Tooltip("All objects you want disabled when the skin is selected.")] public GameObject[] objectsDisabled; private IModularWeapon weapon; private void Update() { if (weapon == null) { weapon = ModularWeapon.GetComponent(); } if (weapon.GetModularFVRFireArm.CurrentSelectedReceiverSkinID == skinID) { GameObject[] array = objectsEnabled; foreach (GameObject val in array) { val.SetActive(true); } GameObject[] array2 = objectsDisabled; foreach (GameObject val2 in array2) { val2.SetActive(false); } } } } [ExecuteInEditMode] public class HolographicSight : MonoBehaviour { public Transform VirtualQuad; public float Scale = 1f; public bool SizeCompensation = true; private MaterialPropertyBlock m_block; private void OnEnable() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown m_block = new MaterialPropertyBlock(); ((Component)this).GetComponent().SetPropertyBlock(m_block); } private void OnWillRenderObject() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)this).transform.InverseTransformPoint(((Component)VirtualQuad).transform.position); m_block.SetVector("_Offset", Vector4.op_Implicit(val)); m_block.SetFloat("_Scale", Scale); m_block.SetFloat("_SizeCompensation", (!SizeCompensation) ? 0f : 1f); ((Component)this).GetComponent().SetPropertyBlock(m_block); } } namespace Meat_banono.Meats_NewPressurePads { [BepInPlugin("Meat_banono.Meats_NewPressurePads", "Meats_NewPressurePads", "2.0.0")] [BepInProcess("h3vr.exe")] [Description("Built with MeatKit")] [BepInDependency("h3vr.otherloader", "1.3.0")] public class Meats_NewPressurePadsPlugin : 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(), "Meat_banono.Meats_NewPressurePads"); OtherLoader.RegisterDirectLoad(BasePath, "Meat_banono.Meats_NewPressurePads", "", "", "pressurepads", ""); } } }