Decompiled source of Meats ModulAR2 Handguards v1.0.1
Meats_ModulAR2_Handguards.dll
Decompiled 8 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; 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 OpenScripts2; using Sodalite.Api; using UnityEngine; 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 MeatyScripts { public class CartridgeHolderAttachment : FVRFireArmAttachment { public FVRFireArmChamber[] Chambers; private const string flagDicChamberRoundClassKey = "ChamberRoundClassConfig"; private const string flagDicChamberRotationKey = "ChamberRotationConfig"; public override GameObject DuplicateFromSpawnLock(FVRViveHand hand) { //IL_004d: Unknown result type (might be due to invalid IL or missing references) GameObject val = ((FVRPhysicalObject)this).DuplicateFromSpawnLock(hand); CartridgeHolderAttachment component = val.GetComponent<CartridgeHolderAttachment>(); for (int i = 0; i < Chambers.Length; i++) { component.Chambers[i].SetRound(Chambers[i].m_round, false); ((Component)component.Chambers[i]).transform.localRotation = ((Component)Chambers[i]).transform.localRotation; } return val; } public override Dictionary<string, string> GetFlagDic() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: 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_00ec: 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_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) Dictionary<string, string> flagDic = ((FVRFireArmAttachment)this).GetFlagDic(); string text = string.Empty; for (int i = 0; i < Chambers.Length; i++) { FVRFireArmRound round = Chambers[i].GetRound(); text = ((!((Object)(object)round != (Object)null)) ? (text + "None") : (text + round.RoundClass)); if (i != Chambers.Length - 1) { text += ";"; } } flagDic.Add("ChamberRoundClassConfig", text); text = string.Empty; for (int j = 0; j < Chambers.Length; j++) { string text2 = text; text = text2 + ((Component)Chambers[j]).transform.localRotation.x + "," + ((Component)Chambers[j]).transform.localRotation.y + "," + ((Component)Chambers[j]).transform.localRotation.z + "," + ((Component)Chambers[j]).transform.localRotation.w; if (j != Chambers.Length - 1) { text += ";"; } } flagDic.Add("ChamberRotationConfig", text); return flagDic; } public override void ConfigureFromFlagDic(Dictionary<string, string> f) { //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Invalid comparison between Unknown and I4 //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) ((FVRFireArmAttachment)this).ConfigureFromFlagDic(f); if (f.TryGetValue("ChamberRoundClassConfig", out var value)) { string[] array = value.Split(new char[1] { ';' }); List<FireArmRoundClass> list = new List<FireArmRoundClass>(); string[] array2 = array; foreach (string text in array2) { if (text == "None") { list.Add((FireArmRoundClass)int.MinValue); } else { list.Add((FireArmRoundClass)Enum.Parse(typeof(FireArmRoundClass), text)); } } for (int j = 0; j < Chambers.Length; j++) { if ((int)list[j] != int.MinValue) { GameObject gameObject = ((AnvilAsset)AM.GetRoundSelfPrefab(Chambers[j].RoundType, list[j])).GetGameObject(); FVRFireArmRound component = gameObject.GetComponent<FVRFireArmRound>(); Chambers[j].SetRound(component, false); } } } if (f.TryGetValue("ChamberRotationConfig", out value)) { string[] array3 = value.Split(new char[1] { ';' }); List<Quaternion> list2 = new List<Quaternion>(); string[] array4 = array3; foreach (string text2 in array4) { string[] array5 = text2.Split(new char[1] { ',' }); list2.Add(new Quaternion(float.Parse(array5[0]), float.Parse(array5[1]), float.Parse(array5[2]), float.Parse(array5[3]))); } for (int l = 0; l < Chambers.Length; l++) { ((Component)Chambers[l]).transform.localRotation = list2[l]; } } } [ContextMenu("Copy existing Attachment's values")] public void CopyAttachment() { FVRFireArmAttachment[] components = ((Component)this).GetComponents<FVRFireArmAttachment>(); FVRFireArmAttachment val = components.Single((FVRFireArmAttachment c) => (Object)(object)c != (Object)(object)this); val.AttachmentInterface.Attachment = (FVRFireArmAttachment)(object)this; val.Sensor.Attachment = (FVRFireArmAttachment)(object)this; this.CopyComponent<FVRFireArmAttachment>((Component)(object)this, val); } public T CopyComponent<T>(Component target, T reference) where T : Component { Type type = ((object)reference).GetType(); BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; PropertyInfo[] properties = type.GetProperties(bindingAttr); PropertyInfo[] array = properties; foreach (PropertyInfo propertyInfo in array) { if (propertyInfo.CanWrite) { try { propertyInfo.SetValue(target, propertyInfo.GetValue(reference, null), null); } catch { } } } FieldInfo[] fields = type.GetFields(bindingAttr); FieldInfo[] array2 = fields; foreach (FieldInfo fieldInfo in array2) { fieldInfo.SetValue(target, fieldInfo.GetValue(reference)); } return (T)(object)((target is T) ? target : null); } } public class DirectionalFireArmChamber : FVRFireArmChamber { private static List<FVRFireArmChamber> _exsitingDirectionalFireArmChambers; static DirectionalFireArmChamber() { _exsitingDirectionalFireArmChambers = new List<FVRFireArmChamber>(); Harmony.CreateAndPatchAll(typeof(DirectionalFireArmChamber), (string)null); } public override void Awake() { ((FVRFireArmChamber)this).Awake(); _exsitingDirectionalFireArmChambers.Add((FVRFireArmChamber)(object)this); } public override void OnDestroy() { _exsitingDirectionalFireArmChambers.Remove((FVRFireArmChamber)(object)this); ((FVRInteractiveObject)this).OnDestroy(); } [HarmonyPatch(typeof(FVRFireArmRound), "Chamber")] [HarmonyPrefix] public static void SetRoundPatch(FVRFireArmRound __instance, FVRFireArmChamber c) { //IL_0018: 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) if (_exsitingDirectionalFireArmChambers.Contains(c)) { float num = Vector3.Angle(((Component)__instance).transform.forward, ((Component)c).transform.forward); if (num > 90f) { ((Component)c).transform.Rotate(180f, 0f, 0f); } } } [ContextMenu("Copy existing Chmaber's values")] public void CopyChamber() { FVRFireArmChamber reference = ((Component)this).GetComponents<FVRFireArmChamber>().Single((FVRFireArmChamber c) => (Object)(object)c != (Object)(object)this); this.CopyComponent<FVRFireArmChamber>((Component)(object)this, reference); } public T CopyComponent<T>(Component target, T reference) where T : Component { Type type = ((object)reference).GetType(); BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; PropertyInfo[] properties = type.GetProperties(bindingAttr); PropertyInfo[] array = properties; foreach (PropertyInfo propertyInfo in array) { if (propertyInfo.CanWrite) { try { propertyInfo.SetValue(target, propertyInfo.GetValue(reference, null), null); } catch { } } } FieldInfo[] fields = type.GetFields(bindingAttr); FieldInfo[] array2 = fields; foreach (FieldInfo fieldInfo in array2) { fieldInfo.SetValue(target, fieldInfo.GetValue(reference)); } return (T)(object)((target is T) ? target : null); } } } [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<AudioListener>(); AudioSource = ((Component)this).gameObject.GetComponent<AudioSource>(); ((Behaviour)((Component)this).gameObject.GetComponent<AudioLowPassFilter>()).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<AudioSource>().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<AudioLowPassFilter>().cutoffFrequency = distcut - wallcut; } if (Debugging) { Debug.Log((object)("Gameobject '" + ((Object)((Component)this).gameObject).name + "' :: Walls: " + hits.Length + "; current volume: " + ((Component)this).gameObject.GetComponent<AudioSource>().volume + "; current cutoff: " + ((Component)this).gameObject.GetComponent<AudioLowPassFilter>().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<AudioSource>(); 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<Light>()).enabled = !((Behaviour)Flash1.GetComponent<Light>()).enabled; if (((Behaviour)Flash1.GetComponent<Light>()).enabled) { ((Behaviour)Flash2.GetComponent<Light>()).enabled = false; } else { ((Behaviour)Flash2.GetComponent<Light>()).enabled = true; } curTime = 0f; } } else { ((Behaviour)Flash1.GetComponent<Light>()).enabled = false; ((Behaviour)Flash2.GetComponent<Light>()).enabled = false; } } } public class Look : MonoBehaviour { private AudioListener AudioListener; private void Start() { AudioListener = Object.FindObjectOfType<AudioListener>(); } 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<Camera>(); } 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)); } } } namespace Meat_banono.Meats_ModulAR2_Handguards { [BepInPlugin("Meat_banono.Meats_ModulAR2_Handguards", "Meats_ModulAR2_Handguards", "1.0.1")] [BepInProcess("h3vr.exe")] [Description("Built with MeatKit")] [BepInDependency("h3vr.otherloader", "1.1.5")] [BepInDependency("h3vr.OpenScripts2", "2.2.0")] [BepInDependency("nrgill28.Sodalite", "1.3.6")] public class Meats_ModulAR2_HandguardsPlugin : 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_ModulAR2_Handguards"); GameAPI.PreloadAllAssets(Path.Combine(BasePath, "mw_meats_modular2_handguards")); } } } namespace MeatyScripts { public class NGSW_FC : FVRInteractiveObject { [Header("NGSW FireControl Config")] public Amplifier AmplifierComponent; public Transform TargetAimer; public Transform RaycastOrigin; public LayerMask RangeFinderHitLayers; public GameObject OneEcksReticle; public GameObject PreZeroReticle; public GameObject PostZeroReticle; public Transform ReticleCenteredTextContainer; public Text HeadingText; private float _currentHeading; public float RangeFinderRange = 5000f; public Text ZeroRangeText; public int BulletDropCalculationSingleFrameLimit = 0; public float AsynchAbortEpsilon = 0.1f; public int MaxAsynchIterationsPerFrame = 100; public float ArtificialCalculationDelay = 0.1f; public float IncompleteZeroBlinkInterval = 0.25f; [Header("Zoom Ring")] public LinearZoomRing ZoomRing; public float OneEcksThreshold = 0.1f; private AnimationCurve BulletDropCurve; private AnimationCurve BulletWindCurve; private bool _isOneEcks = false; private bool _isZeroed = false; private FVRFireArm _fireArm; private RaycastHit _lastHit; private bool _stillCalculatingDrop; private float _consineAdjustedRange; private float _calculatedDrop; private bool _wasAttached = false; private bool _compassEnabled = true; public bool CompassEnabled => _compassEnabled; public override void Start() { ((FVRInteractiveObject)this).Start(); base.IsSimpleInteract = true; CheckMagnificationLevel(); Zero(reset: true); } public override void FVRUpdate() { ((FVRInteractiveObject)this).FVRUpdate(); UpdateHeading(); CheckMagnificationLevel(); UpdateReticle(); } public void ToggleCompass() { _compassEnabled = !_compassEnabled; } private void CheckAttachmentStatus() { if (!_wasAttached && (Object)(object)((FVRFireArmAttachmentInterface)AmplifierComponent).Attachment != (Object)null && (Object)(object)((FVRFireArmAttachmentInterface)AmplifierComponent).Attachment.curMount != (Object)null && (Object)(object)((FVRFireArmAttachmentInterface)AmplifierComponent).Attachment.curMount.Parent != (Object)null && ((FVRFireArmAttachmentInterface)AmplifierComponent).Attachment.curMount.Parent is FVRFireArm) { _wasAttached = true; ref FVRFireArm fireArm = ref _fireArm; FVRPhysicalObject parent = ((FVRFireArmAttachmentInterface)AmplifierComponent).Attachment.curMount.Parent; fireArm = (FVRFireArm)(object)((parent is FVRFireArm) ? parent : null); CalculateBulletDropCurve(); CalculateBulletDrop(); } else if (!_wasAttached && (Object)(object)AmplifierComponent.BackupFireArm != (Object)null) { _wasAttached = true; _fireArm = AmplifierComponent.BackupFireArm; CalculateBulletDrop(); } else if (_wasAttached && (Object)(object)AmplifierComponent.BackupFireArm == (Object)null && (Object)(object)((FVRFireArmAttachmentInterface)AmplifierComponent).Attachment != (Object)null && (Object)(object)((FVRFireArmAttachmentInterface)AmplifierComponent).Attachment.curMount == (Object)null) { _wasAttached = false; _fireArm = null; } } private void FindCurrentFirearm() { if ((Object)(object)((FVRFireArmAttachmentInterface)AmplifierComponent).Attachment != (Object)null && (Object)(object)((FVRFireArmAttachmentInterface)AmplifierComponent).Attachment.curMount != (Object)null && (Object)(object)((FVRFireArmAttachmentInterface)AmplifierComponent).Attachment.curMount.Parent != (Object)null && ((FVRFireArmAttachmentInterface)AmplifierComponent).Attachment.curMount.Parent is FVRFireArm) { ref FVRFireArm fireArm = ref _fireArm; FVRPhysicalObject parent = ((FVRFireArmAttachmentInterface)AmplifierComponent).Attachment.curMount.Parent; fireArm = (FVRFireArm)(object)((parent is FVRFireArm) ? parent : null); } else if ((Object)(object)AmplifierComponent.BackupFireArm != (Object)null) { _fireArm = AmplifierComponent.BackupFireArm; } else if ((Object)(object)AmplifierComponent.BackupFireArm == (Object)null && (Object)(object)((FVRFireArmAttachmentInterface)AmplifierComponent).Attachment != (Object)null && (Object)(object)((FVRFireArmAttachmentInterface)AmplifierComponent).Attachment.curMount == (Object)null) { _fireArm = null; } } private void CheckMagnificationLevel() { //IL_00c9: 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) float num = ((!((Object)(object)ZoomRing == (Object)null)) ? ZoomRing.GetCurrentlySelectedMagnification() : AmplifierComponent.ZoomSettings[AmplifierComponent.m_zoomSettingIndex].Magnification); if ((_isOneEcks || !((Object)(object)ZoomRing == (Object)null)) ? (num < 1f + OneEcksThreshold) : Mathf.Approximately(num, 1f)) { _isOneEcks = true; Zero(reset: true); } else if (_isOneEcks && !Mathf.Approximately(num, 1f)) { _isOneEcks = false; Zero(reset: true); } ReticleCenteredTextContainer.localScale = Vector3.one / num; } private void UpdateReticle() { if (_isOneEcks) { OneEcksReticle.SetActive(true); PreZeroReticle.SetActive(false); PostZeroReticle.SetActive(false); } else if (!_stillCalculatingDrop) { OneEcksReticle.SetActive(false); if (_isZeroed) { PreZeroReticle.SetActive(false); PostZeroReticle.SetActive(true); } else { PreZeroReticle.SetActive(true); PostZeroReticle.SetActive(false); } } } public override void SimpleInteraction(FVRViveHand hand) { //IL_001a: 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_0037: Unknown result type (might be due to invalid IL or missing references) ((FVRInteractiveObject)this).SimpleInteraction(hand); if (_isOneEcks) { return; } if (Physics.Raycast(RaycastOrigin.position, RaycastOrigin.forward, ref _lastHit, RangeFinderRange, LayerMask.op_Implicit(RangeFinderHitLayers))) { FindCurrentFirearm(); if ((Object)(object)_fireArm != (Object)null) { CalculateBulletDrop(); } if (_stillCalculatingDrop) { Zero(reset: true); ((MonoBehaviour)this).StopCoroutine("WaitForCalculation"); ((MonoBehaviour)this).StartCoroutine("WaitForCalculation"); } else { Zero(); } } else { Zero(reset: true); } } public void TriggerRangeFinderZeroing() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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_0072: Unknown result type (might be due to invalid IL or missing references) if (_isOneEcks) { return; } if (Physics.Raycast(RaycastOrigin.position, RaycastOrigin.forward, ref _lastHit, RangeFinderRange, LayerMask.op_Implicit(RangeFinderHitLayers))) { FindCurrentFirearm(); if ((Object)(object)_fireArm != (Object)null) { float num = 90f - Vector3.Angle(Vector3.up, _fireArm.GetMuzzle().forward); _consineAdjustedRange = ((RaycastHit)(ref _lastHit)).distance * Mathf.Cos(num * ((float)Math.PI / 180f)); CalculateBulletDrop(); } if (_stillCalculatingDrop) { Zero(reset: true); ((MonoBehaviour)this).StopCoroutine("WaitForCalculation"); ((MonoBehaviour)this).StartCoroutine("WaitForCalculation"); } else { Zero(); } } else { Zero(reset: true); } } private IEnumerator WaitForCalculation() { ((MonoBehaviour)this).StopCoroutine("DisplayBlinker"); ((MonoBehaviour)this).StartCoroutine("DisplayBlinker"); while (_stillCalculatingDrop) { yield return null; } Zero(); } private IEnumerator DisplayBlinker() { if ((Object)(object)ZeroRangeText != (Object)null) { ZeroRangeText.text = $"{Mathf.RoundToInt(((RaycastHit)(ref _lastHit)).distance)}m"; } while (_stillCalculatingDrop) { if ((Object)(object)ZeroRangeText != (Object)null) { ((Component)ZeroRangeText).gameObject.SetActive(false); } PreZeroReticle.SetActive(false); yield return (object)new WaitForSeconds(IncompleteZeroBlinkInterval); if ((Object)(object)ZeroRangeText != (Object)null) { ((Component)ZeroRangeText).gameObject.SetActive(true); } PreZeroReticle.SetActive(true); yield return (object)new WaitForSeconds(IncompleteZeroBlinkInterval); } } private void UpdateHeading() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0032: 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_0034: Unknown result type (might be due to invalid IL or missing references) if (_compassEnabled) { Vector3 forward = ((Component)this).transform.forward; forward.y = 0f; Vector3 forward2 = Vector3.forward; Vector3 up = Vector3.up; float currentHeading = AngleSigned(forward2, forward, up); _currentHeading = currentHeading; if (_currentHeading < 0f) { _currentHeading += 360f; } if ((Object)(object)HeadingText != (Object)null) { HeadingText.text = FormatHeadingText(); } } else if ((Object)(object)HeadingText != (Object)null) { HeadingText.text = string.Empty; } } private string FormatHeadingText() { string text = $"{Mathf.RoundToInt(_currentHeading)}°"; string empty = string.Empty; empty = ((_currentHeading < 22.5f || _currentHeading > 337.5f) ? "N " : ((_currentHeading >= 22.5f && _currentHeading < 67.5f) ? "NE " : ((_currentHeading >= 67.5f && _currentHeading < 112.5f) ? "E " : ((_currentHeading >= 112.5f && _currentHeading < 157.5f) ? "SE " : ((_currentHeading >= 157.5f && _currentHeading < 202.5f) ? "S " : ((_currentHeading >= 202.5f && _currentHeading < 247.5f) ? "SW " : ((!(_currentHeading >= 247.5f) || !(_currentHeading < 292.5f)) ? "NW " : "W "))))))); return empty + text; } private float AngleSigned(Vector3 v1, Vector3 v2, Vector3 n) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: 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_000f: Unknown result type (might be due to invalid IL or missing references) return Mathf.Atan2(Vector3.Dot(n, Vector3.Cross(v1, v2)), Vector3.Dot(v1, v2)) * 57.29578f; } public void Zero(bool reset = false) { //IL_02b8: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: 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_00c5: 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_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: 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_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: 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_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016e: 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_018f: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: 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_0217: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_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_0242: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_0268: 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) if (!reset) { float distance = ((RaycastHit)(ref _lastHit)).distance; if ((Object)(object)_fireArm == (Object)null) { if ((Object)(object)AmplifierComponent.BackupMuzzle != (Object)null) { Vector3 val = AmplifierComponent.BackupMuzzle.position + AmplifierComponent.BackupMuzzle.forward * distance; TargetAimer.LookAt(val, Vector3.up); _isZeroed = true; } else { TargetAimer.localRotation = Quaternion.identity; _isZeroed = false; } return; } Transform muzzle = _fireArm.GetMuzzle(); Vector3 val2 = ((RaycastHit)(ref _lastHit)).point - muzzle.position; float magnitude = ((Vector3)(ref val2)).magnitude; Vector3 val3 = Vector3.ProjectOnPlane(val2, Vector3.up); float magnitude2 = ((Vector3)(ref val3)).magnitude; if ((Object)(object)_fireArm != (Object)null) { float calculatedDrop = _calculatedDrop; if (calculatedDrop == float.MinValue) { TargetAimer.localRotation = Quaternion.identity; if ((Object)(object)ZeroRangeText != (Object)null) { ZeroRangeText.text = "Out of range!"; } _isZeroed = false; return; } Vector3 val4 = Vector2.op_Implicit(_fireArm.GetCombinedFixedDrift(_fireArm.AccuracyClass) * 0.0166667f); float num = _fireArm.GetCombinedFixedDrop(_fireArm.AccuracyClass) * 0.0166667f; Quaternion val5 = muzzle.rotation * Quaternion.Euler(val4.y + num, val4.x, 0f); Vector3 val6 = val5 * Vector3.forward; Vector3 val7 = muzzle.position + val6 * magnitude + Vector3.up * calculatedDrop; Vector3 val8 = val7 - TargetAimer.position; val8 = Quaternion.AngleAxis(0.004166675f * (float)AmplifierComponent.ElevationStep, ((Component)this).transform.right) * val8; val8 = Quaternion.AngleAxis(0.004166675f * (float)AmplifierComponent.WindageStep, ((Component)this).transform.up) * val8; TargetAimer.rotation = Quaternion.LookRotation(val8, ((Component)this).transform.up); } if ((Object)(object)ZeroRangeText != (Object)null) { ZeroRangeText.text = $"{Mathf.RoundToInt(distance)}m"; } _isZeroed = true; } else { TargetAimer.localRotation = Quaternion.identity; if ((Object)(object)ZeroRangeText != (Object)null) { ZeroRangeText.text = string.Empty; } _isZeroed = false; } } public void CalculateBulletDropCurve() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0044: 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_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_02f9: Unknown result type (might be due to invalid IL or missing references) //IL_0303: Expected O, but got Unknown //IL_0306: Unknown result type (might be due to invalid IL or missing references) //IL_0310: Expected O, but got Unknown //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0259: Unknown result type (might be due to invalid IL or missing references) //IL_0260: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_027e: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_028e: Unknown result type (might be due to invalid IL or missing references) //IL_0292: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_029e: Unknown result type (might be due to invalid IL or missing references) //IL_02a0: Unknown result type (might be due to invalid IL or missing references) FVRFireArmChamber currentChamber = OpenScripts2_BasePlugin.GetCurrentChamber(_fireArm); float chamberVelMult = AM.GetChamberVelMult(currentChamber.RoundType, Vector3.Distance(((Component)currentChamber).transform.position, _fireArm.GetMuzzle().position)); FireArmRoundType roundType = _fireArm.RoundType; FVRFireArmRoundDisplayData val = AM.SRoundDisplayDataDic[roundType]; float airDensity = 1.225f; float num = 0.012f; num = Time.fixedDeltaTime; float num2 = val.ZeroingVel; float num3 = val.ZeroingMass; float num4 = val.ZeroingXDim; BallisticProjectile val2 = null; if (currentChamber.IsFull && !currentChamber.IsSpent) { FVRFireArmRound round = currentChamber.GetRound(); val2 = round.BallisticProjectilePrefab.GetComponent<BallisticProjectile>(); num2 = val2.MuzzleVelocityBase; num3 = val2.Mass; num4 = val2.Dimensions.x; } Vector3 val3 = default(Vector3); ((Vector3)(ref val3))..ctor(0f, 0f, num2 * chamberVelMult); float num5 = (float)Math.PI * Mathf.Pow(num4 * 0.5f, 2f); Keyframe[] array = (Keyframe[])(object)new Keyframe[Mathf.CeilToInt(((RaycastHit)(ref _lastHit)).distance / 100f) + 1]; Keyframe[] array2 = (Keyframe[])(object)new Keyframe[Mathf.CeilToInt(((RaycastHit)(ref _lastHit)).distance / 100f) + 1]; Vector3 val4 = Vector3.zero; float num6 = 0f; bool flag = false; int num7 = 0; bool flag2 = false; int i; for (i = 0; i < BulletDropCalculationSingleFrameLimit; i++) { if (val4.z >= (float)num7 * 100f && num7 < array.Length) { ((Keyframe)(ref array[num7])).time = val4.z / 100f; ((Keyframe)(ref array2[num7])).time = val4.z / 100f; ((Keyframe)(ref array[num7])).value = val4.y; ((Keyframe)(ref array2[num7])).value = val4.x; num7++; } if (!flag2 && val4.y < 0f) { flag2 = true; } if (val4.z >= (float)(Mathf.CeilToInt(((RaycastHit)(ref _lastHit)).distance / 100f) * 100)) { break; } if (!flag && ((Vector3)(ref val3)).magnitude < 430f) { flag = true; } val3 += Vector3.down * GetGravity(val2) * num; val3 = ApplyDrag(val3, airDensity, num, num5, num3); Vector3 val5 = val4 + val3 * num; num6 += Vector3.Distance(val5, val4); val4 = val5; } if (i == BulletDropCalculationSingleFrameLimit) { ((MonoBehaviour)this).StopAllCoroutines(); ((MonoBehaviour)this).StartCoroutine(ContinueCalculationAfterBreak(num7, val4, val3, num3, num5, array, array2, val2)); } else { _stillCalculatingDrop = false; } BulletDropCurve = new AnimationCurve(array); BulletWindCurve = new AnimationCurve(array2); for (int j = 0; j < array.Length; j++) { BulletDropCurve.SmoothTangents(j, 1f); } for (int k = 0; k < array2.Length; k++) { BulletDropCurve.SmoothTangents(k, 1f); } } private IEnumerator ContinueCalculationAfterBreak(int currentKeyframe, Vector3 startingBulletPosition, Vector3 startingBulletVelocity, float ZeroingMass, float ZeroingCrossSectionArea, Keyframe[] bulletDropKeyframes, Keyframe[] bulletWindKeyframes, BallisticProjectile projectile) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) _stillCalculatingDrop = true; Vector3 bulletPosition = startingBulletPosition; Vector3 velocityVector2 = startingBulletVelocity; float physicsDeltaTime2 = 0.012f; physicsDeltaTime2 = Time.fixedDeltaTime; float airDensity = 1.225f; Vector3 positionLastFrame; do { positionLastFrame = bulletPosition; for (int i = 0; i < MaxAsynchIterationsPerFrame; i++) { if (bulletPosition.z >= (float)currentKeyframe * 100f && currentKeyframe < bulletDropKeyframes.Length) { ((Keyframe)(ref bulletDropKeyframes[currentKeyframe])).time = bulletPosition.z / 100f; ((Keyframe)(ref bulletWindKeyframes[currentKeyframe])).time = bulletPosition.z / 100f; ((Keyframe)(ref bulletDropKeyframes[currentKeyframe])).value = bulletPosition.y; ((Keyframe)(ref bulletWindKeyframes[currentKeyframe])).value = bulletPosition.x; currentKeyframe++; } if (bulletPosition.z >= (float)(Mathf.CeilToInt(((RaycastHit)(ref _lastHit)).distance / 100f) * 100)) { break; } velocityVector2 += Vector3.down * GetGravity(projectile) * physicsDeltaTime2; velocityVector2 = ApplyDrag(velocityVector2, airDensity, physicsDeltaTime2, ZeroingCrossSectionArea, ZeroingMass); Vector3 nextPosition = bulletPosition + velocityVector2 * physicsDeltaTime2; if (Mathf.Abs(nextPosition.z - bulletPosition.z) < AsynchAbortEpsilon / (float)MaxAsynchIterationsPerFrame) { break; } bulletPosition = nextPosition; } if (bulletPosition.z >= (float)(Mathf.CeilToInt(((RaycastHit)(ref _lastHit)).distance / 100f) * 100)) { break; } yield return (object)new WaitForSeconds(ArtificialCalculationDelay); } while (Mathf.Abs(bulletPosition.z - positionLastFrame.z) > AsynchAbortEpsilon); if (bulletPosition.z < (float)(Mathf.CeilToInt(((RaycastHit)(ref _lastHit)).distance / 100f) * 100)) { ((Keyframe)(ref bulletDropKeyframes[currentKeyframe])).time = bulletPosition.z / 100f; ((Keyframe)(ref bulletWindKeyframes[currentKeyframe])).time = bulletPosition.z / 100f; ((Keyframe)(ref bulletDropKeyframes[currentKeyframe])).value = bulletPosition.y; ((Keyframe)(ref bulletWindKeyframes[currentKeyframe])).value = bulletPosition.x; if (currentKeyframe >= 2) { float x2 = ((Keyframe)(ref bulletDropKeyframes[currentKeyframe - 2])).time; float value = ((Keyframe)(ref bulletDropKeyframes[currentKeyframe - 2])).value; float x3 = ((Keyframe)(ref bulletDropKeyframes[currentKeyframe - 1])).time; float value2 = ((Keyframe)(ref bulletDropKeyframes[currentKeyframe - 1])).value; float time = ((Keyframe)(ref bulletDropKeyframes[currentKeyframe])).time; float value3 = ((Keyframe)(ref bulletDropKeyframes[currentKeyframe])).value; float num = (value2 - value) / (x3 - x2); float num2 = (value3 - value2) / (time - x3); float c = value; float b = num; float a = (num2 - num) / (time - x2); Func<float, float> func = (float x) => a * (x - x3) * (x - x2) + b * (x - x2) + c; currentKeyframe++; for (int j = currentKeyframe; j < bulletDropKeyframes.Length; j++) { ((Keyframe)(ref bulletDropKeyframes[j])).time = j; ((Keyframe)(ref bulletWindKeyframes[j])).time = j; ((Keyframe)(ref bulletDropKeyframes[j])).value = func(j); ((Keyframe)(ref bulletWindKeyframes[j])).value = bulletPosition.x; } } } BulletDropCurve = new AnimationCurve(bulletDropKeyframes); BulletWindCurve = new AnimationCurve(bulletWindKeyframes); for (int k = 0; k < bulletDropKeyframes.Length; k++) { BulletDropCurve.SmoothTangents(k, 1f); } for (int l = 0; l < bulletWindKeyframes.Length; l++) { BulletDropCurve.SmoothTangents(l, 1f); } _stillCalculatingDrop = false; } public void CalculateBulletDrop() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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_003e: 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_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: 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_01c4: 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_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: 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_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: 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_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) FVRFireArmChamber currentChamber = OpenScripts2_BasePlugin.GetCurrentChamber(_fireArm); FireArmRoundType roundType = _fireArm.RoundType; FVRFireArmRoundDisplayData val = AM.SRoundDisplayDataDic[roundType]; float num = ((!((Object)(object)currentChamber != (Object)null)) ? 1f : AM.GetChamberVelMult(currentChamber.RoundType, Vector3.Distance(((Component)currentChamber).transform.position, _fireArm.GetMuzzle().position))); float airDensity = 1.225f; float num2 = 0.012f; num2 = Time.fixedDeltaTime; float num3 = val.ZeroingVel; float num4 = val.ZeroingMass; float num5 = val.ZeroingXDim; BallisticProjectile val2 = null; if ((Object)(object)currentChamber != (Object)null && currentChamber.IsFull && !currentChamber.IsSpent) { FVRFireArmRound round = currentChamber.GetRound(); if ((Object)(object)round != (Object)null) { val2 = round.BallisticProjectilePrefab.GetComponent<BallisticProjectile>(); if ((Object)(object)val2 != (Object)null) { num3 = val2.MuzzleVelocityBase; num4 = val2.Mass; num5 = val2.Dimensions.x; } } } Vector3 val3 = default(Vector3); ((Vector3)(ref val3))..ctor(0f, 0f, num3 * num); float num6 = (float)Math.PI * Mathf.Pow(num5 * 0.5f, 2f); Vector3 val4 = Vector3.zero; float num7 = 0f; bool flag = false; int currentKeyframe = 0; bool flag2 = false; int i; for (i = 0; i < BulletDropCalculationSingleFrameLimit; i++) { if (val4.z >= _consineAdjustedRange) { break; } if (!flag && ((Vector3)(ref val3)).magnitude < 430f) { flag = true; } if (!flag2 && val4.y < 0f) { flag2 = true; } val3 += Vector3.down * GetGravity(val2) * num2; val3 = ApplyDrag(val3, airDensity, num2, num6, num4); Vector3 val5 = val4 + val3 * num2; num7 += Vector3.Distance(val5, val4); val4 = val5; } if (i == BulletDropCalculationSingleFrameLimit) { ((MonoBehaviour)this).StopAllCoroutines(); ((MonoBehaviour)this).StartCoroutine(ContinueDropCalculationAfterBreak(currentKeyframe, val4, val3, num4, num6, val2)); } else { _calculatedDrop = val4.y; _stillCalculatingDrop = false; } } private IEnumerator ContinueDropCalculationAfterBreak(int currentKeyframe, Vector3 startingBulletPosition, Vector3 startingBulletVelocity, float ZeroingMass, float ZeroingCrossSectionArea, BallisticProjectile projectile) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) _stillCalculatingDrop = true; Vector3 bulletPosition = startingBulletPosition; Vector3 velocityVector2 = startingBulletVelocity; float physicsDeltaTime2 = 0.012f; physicsDeltaTime2 = Time.fixedDeltaTime; float airDensity = 1.225f; Vector3 positionLastFrame; do { positionLastFrame = bulletPosition; for (int i = 0; i < MaxAsynchIterationsPerFrame; i++) { if (bulletPosition.z >= _consineAdjustedRange) { break; } velocityVector2 += Vector3.down * GetGravity(projectile) * physicsDeltaTime2; velocityVector2 = ApplyDrag(velocityVector2, airDensity, physicsDeltaTime2, ZeroingCrossSectionArea, ZeroingMass); Vector3 nextPosition = bulletPosition + velocityVector2 * physicsDeltaTime2; if (Mathf.Abs(nextPosition.z - bulletPosition.z) < AsynchAbortEpsilon / (float)MaxAsynchIterationsPerFrame) { break; } bulletPosition = nextPosition; } if (bulletPosition.z >= _consineAdjustedRange) { break; } yield return (object)new WaitForSeconds(ArtificialCalculationDelay); } while (Mathf.Abs(bulletPosition.z - positionLastFrame.z) > AsynchAbortEpsilon); if (bulletPosition.z < _consineAdjustedRange) { _calculatedDrop = float.MinValue; } else { _calculatedDrop = bulletPosition.y; } _stillCalculatingDrop = false; } private Vector3 ApplyDrag(Vector3 velocityVector, float airDensity, float deltaTime, float frontArea, float Mass) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0031: 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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) float magnitude = ((Vector3)(ref velocityVector)).magnitude; Vector3 normalized = ((Vector3)(ref velocityVector)).normalized; float currentDragCoefficient = GetCurrentDragCoefficient(((Vector3)(ref velocityVector)).magnitude); Vector3 val = (0f - 0.5f * currentDragCoefficient * airDensity * (frontArea / Mass) * magnitude) * velocityVector; return normalized * Mathf.Clamp(magnitude - ((Vector3)(ref val)).magnitude * deltaTime, 0f, magnitude); } private float GetCurrentDragCoefficient(float velocityInMS) { float num = velocityInMS * 0.00291545f; return AM.BDCC.Evaluate(num); } private float GetGravity(BallisticProjectile projectile) { //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_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected I4, but got Unknown float num = 1f; if ((Object)(object)projectile != (Object)null) { num = projectile.GravityMultiplier; } GravityMode ballisticGravityMode = GM.Options.SimulationOptions.BallisticGravityMode; return (int)ballisticGravityMode switch { 0 => 9.81f * num, 1 => 5f * num, 2 => 1.622f * num, 3 => 0f * num, _ => 0f * num, }; } } public class NGSW_FC_Button : FVRInteractiveObject { public enum EButtonType { Center, Up, Down, Left, Right } [Header("NGS-FC Button Config")] public NGSW_FC_ScreenController NGSW_FC_ScreenController; public EButtonType ButtonType; public AudioEvent ButtonAudio; public override void Awake() { ((FVRInteractiveObject)this).Awake(); base.IsSimpleInteract = true; } public override void SimpleInteraction(FVRViveHand hand) { //IL_008a: Unknown result type (might be due to invalid IL or missing references) ((FVRInteractiveObject)this).SimpleInteraction(hand); switch (ButtonType) { case EButtonType.Center: NGSW_FC_ScreenController.ButtonCenter(); break; case EButtonType.Up: NGSW_FC_ScreenController.ButtonUp(); break; case EButtonType.Down: NGSW_FC_ScreenController.ButtonDown(); break; case EButtonType.Left: NGSW_FC_ScreenController.ButtonLeft(); break; case EButtonType.Right: NGSW_FC_ScreenController.ButtonRight(); break; } SM.PlayGenericSound(ButtonAudio, ((Component)this).transform.position); } } public class NGSW_FC_PressurePad : FVRFireArmAttachmentInterface { [Header("NGSW-FC Pressure Pad 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 List<TacticalFlashlight> _flashlights = new List<TacticalFlashlight>(); private List<LaserPointer> _lasers = new List<LaserPointer>(); private List<AdvancedLaserController> _advancedLaserControllers = new List<AdvancedLaserController>(); private Dictionary<AdvancedLaserController, List<int>> _advancedLights = new Dictionary<AdvancedLaserController, List<int>>(); private Dictionary<AdvancedLaserController, List<int>> _advancedLasers = new Dictionary<AdvancedLaserController, List<int>>(); private Dictionary<AdvancedLaserController, List<int>> _advancedIRLights = new Dictionary<AdvancedLaserController, List<int>>(); private Dictionary<AdvancedLaserController, List<int>> _advancedIRLasers = new Dictionary<AdvancedLaserController, List<int>>(); private Dictionary<AdvancedLaserController, List<int>> _advancedStrobes = new Dictionary<AdvancedLaserController, List<int>>(); private List<NGSW_FC> _ngsw_fcs = new List<NGSW_FC>(); private static Dictionary<FVRAlternateGrip, NGSW_FC_PressurePad> _existingPressurePadAttachments; private static IntPtr _baseUpdateInteractionPointer; private static FieldInfo _advancedLasersCurrentEmmitterIndex; static NGSW_FC_PressurePad() { _existingPressurePadAttachments = new Dictionary<FVRAlternateGrip, NGSW_FC_PressurePad>(); Harmony.CreateAndPatchAll(typeof(NGSW_FC_PressurePad), (string)null); _baseUpdateInteractionPointer = typeof(FVRAlternateGrip).BaseType.GetMethod("UpdateInteraction").MethodHandle.GetFunctionPointer(); _advancedLasersCurrentEmmitterIndex = 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<FVRAlternateGrip>(); } else { _altGrip = ((Component)base.Attachment.curMount.GetRootMount().MyObject).GetComponentInChildren<FVRAlternateGrip>(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_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Unknown result type (might be due to invalid IL or missing references) //IL_031c: Unknown result type (might be due to invalid IL or missing references) //IL_0321: Unknown result type (might be due to invalid IL or missing references) //IL_03d3: Unknown result type (might be due to invalid IL or missing references) //IL_03d8: 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) { _irActive = !_irActive; ToggleLights(on: false); ToggleLasers(on: false); _isLightToggle = false; _isLaserToggle = false; } 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); } if (!hand.IsInStreamlinedMode) { if (!hand.Input.TouchpadDown || !(Vector2.Angle(hand.Input.TouchpadAxes, Vector2.down) < 45f)) { return; } { foreach (NGSW_FC ngsw_fc in _ngsw_fcs) { ngsw_fc.TriggerRangeFinderZeroing(); } return; } } if (!hand.Input.AXButtonDown) { return; } foreach (NGSW_FC ngsw_fc2 in _ngsw_fcs) { ngsw_fc2.TriggerRangeFinderZeroing(); } } 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_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) ((FVRFireArmAttachmentInterface)this).UpdateInteraction(hand); if (hand.Input.TouchpadDown && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.left) < 45f) { _irActive = !_irActive; ToggleLights(on: false); ToggleLasers(on: false); _isLightToggle = false; _isLaserToggle = false; } 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_02f6: Unknown result type (might be due to invalid IL or missing references) //IL_02fc: Invalid comparison between Unknown and I4 //IL_030a: Unknown result type (might be due to invalid IL or missing references) //IL_0310: Invalid comparison between Unknown and I4 //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_0374: Invalid comparison between Unknown and I4 //IL_03d2: Unknown result type (might be due to invalid IL or missing references) //IL_03d8: Invalid comparison between Unknown and I4 //IL_0436: Unknown result type (might be due to invalid IL or missing references) //IL_043c: Invalid comparison between Unknown and I4 //IL_049a: Unknown result type (might be due to invalid IL or missing references) //IL_04a0: Invalid comparison between Unknown and I4 foreach (KeyValuePair<AdvancedLaserController, List<int>> advancedLight in _advancedLights) { advancedLight.Value.Clear(); } foreach (KeyValuePair<AdvancedLaserController, List<int>> advancedLaser in _advancedLasers) { advancedLaser.Value.Clear(); } foreach (KeyValuePair<AdvancedLaserController, List<int>> advancedIRLight in _advancedIRLights) { advancedIRLight.Value.Clear(); } foreach (KeyValuePair<AdvancedLaserController, List<int>> advancedIRLaser in _advancedIRLasers) { advancedIRLaser.Value.Clear(); } foreach (KeyValuePair<AdvancedLaserController, List<int>> advancedStrobe in _advancedStrobes) { advancedStrobe.Value.Clear(); } _ngsw_fcs.Clear(); _flashlights.Clear(); _lasers.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; } AdvancedLaserController componentInChildren = ((Component)attachments).GetComponentInChildren<AdvancedLaserController>(true); NGSW_FC componentInChildren2 = ((Component)attachments).GetComponentInChildren<NGSW_FC>(true); if ((Object)(object)componentInChildren != (Object)null) { _advancedLaserControllers.Add(componentInChildren); } else if ((Object)(object)componentInChildren2 != (Object)null) { _ngsw_fcs.Add(componentInChildren2); } } foreach (AdvancedLaserController advancedLaserController in _advancedLaserControllers) { for (int i = 0; i < advancedLaserController.ListOfEmitterObjects.Count; i++) { List<int> value; if ((int)advancedLaserController.ListOfEmitterTypes[i] == 1 || (int)advancedLaserController.ListOfEmitterTypes[i] == 6) { if (_advancedLasers.TryGetValue(advancedLaserController, out value)) { value.Add(i); continue; } List<int> list = new List<int>(); 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<int> list = new List<int>(); 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<int> list = new List<int>(); 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<int> list = new List<int>(); 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<int> list = new List<int>(); list.Add(i); value = list; _advancedStrobes.Add(advancedLaserController, value); } } } } public void ToggleLights(bool on) { if (on) { if (!_irActive) { foreach (TacticalFlashlight flashlight in _flashlights) { if (!flashlight.IsOn) { flashlight.ToggleOn(); } } { foreach (KeyValuePair<AdvancedLaserController, List<int>> advancedLight in _advancedLights) { foreach (int item in advancedLight.Value) { int num = (int)_advancedLasersCurrentEmmitterIndex.GetValue(advancedLight.Key); _advancedLasersCurrentEmmitterIndex.SetValue(advancedLight.Key, item); advancedLight.Key.ToggleRight(); _advancedLasersCurrentEmmitterIndex.SetValue(advancedLight.Key, num); } } return; } } { foreach (KeyValuePair<AdvancedLaserController, List<int>> advancedIRLight in _advancedIRLights) { foreach (int item2 in advancedIRLight.Value) { int num2 = (int)_advancedLasersCurrentEmmitterIndex.GetValue(advancedIRLight.Key); _advancedLasersCurrentEmmitterIndex.SetValue(advancedIRLight.Key, item2); advancedIRLight.Key.ToggleRight(); _advancedLasersCurrentEmmitterIndex.SetValue(advancedIRLight.Key, num2); } } return; } } foreach (TacticalFlashlight flashlight2 in _flashlights) { if (flashlight2.IsOn) { flashlight2.ToggleOn(); } } foreach (KeyValuePair<AdvancedLaserController, List<int>> advancedLight2 in _advancedLights) { foreach (int item3 in advancedLight2.Value) { int num3 = (int)_advancedLasersCurrentEmmitterIndex.GetValue(advancedLight2.Key); _advancedLasersCurrentEmmitterIndex.SetValue(advancedLight2.Key, item3); advancedLight2.Key.ToggleLeft(); _advancedLasersCurrentEmmitterIndex.SetValue(advancedLight2.Key, num3); } } foreach (KeyValuePair<AdvancedLaserController, List<int>> advancedIRLight2 in _advancedIRLights) { foreach (int item4 in advancedIRLight2.Value) { int num4 = (int)_advancedLasersCurrentEmmitterIndex.GetValue(advancedIRLight2.Key); _advancedLasersCurrentEmmitterIndex.SetValue(advancedIRLight2.Key, item4); advancedIRLight2.Key.ToggleLeft(); _advancedLasersCurrentEmmitterIndex.SetValue(advancedIRLight2.Key, num4); } } } public void ToggleLasers(bool on) { if (on) { if (!_irActive) { foreach (LaserPointer laser in _lasers) { if (!laser.IsOn) { laser.ToggleOn(); } } { foreach (KeyValuePair<AdvancedLaserController, List<int>> advancedLaser in _advancedLasers) { foreach (int item in advancedLaser.Value) { int num = (int)_advancedLasersCurrentEmmitterIndex.GetValue(advancedLaser.Key); _advancedLasersCurrentEmmitterIndex.SetValue(advancedLaser.Key, item); advancedLaser.Key.ToggleRight(); _advancedLasersCurrentEmmitterIndex.SetValue(advancedLaser.Key, num); } } return; } } { foreach (KeyValuePair<AdvancedLaserController, List<int>> advancedIRLaser in _advancedIRLasers) { foreach (int item2 in advancedIRLaser.Value) { int num2 = (int)_advancedLasersCurrentEmmitterIndex.GetValue(advancedIRLaser.Key); _advancedLasersCurrentEmmitterIndex.SetValue(advancedIRLaser.Key, item2); advancedIRLaser.Key.ToggleRight(); _advancedLasersCurrentEmmitterIndex.SetValue(advancedIRLaser.Key, num2); } } return; } } foreach (LaserPointer laser2 in _lasers) { if (laser2.IsOn) { laser2.ToggleOn(); } } foreach (KeyValuePair<AdvancedLaserController, List<int>> advancedLaser2 in _advancedLasers) { foreach (int item3 in advancedLaser2.Value) { int num3 = (int)_advancedLasersCurrentEmmitterIndex.GetValue(advancedLaser2.Key); _advancedLasersCurrentEmmitterIndex.SetValue(advancedLaser2.Key, item3); advancedLaser2.Key.ToggleLeft(); _advancedLasersCurrentEmmitterIndex.SetValue(advancedLaser2.Key, num3); } } foreach (KeyValuePair<AdvancedLaserController, List<int>> advancedIRLaser2 in _advancedIRLasers) { foreach (int item4 in advancedIRLaser2.Value) { int num4 = (int)_advancedLasersCurrentEmmitterIndex.GetValue(advancedIRLaser2.Key); _advancedLasersCurrentEmmitterIndex.SetValue(advancedIRLaser2.Key, item4); advancedIRLaser2.Key.ToggleLeft(); _advancedLasersCurrentEmmitterIndex.SetValue(advancedIRLaser2.Key, num4); } } } public void ToggleStrobe() { _strobeActive = !_strobeActive; foreach (KeyValuePair<AdvancedLaserController, List<int>> advancedStrobe in _advancedStrobes) { foreach (int item in advancedStrobe.Value) { int num = (int)_advancedLasersCurrentEmmitterIndex.GetValue(advancedStrobe.Key); _advancedLasersCurrentEmmitterIndex.SetValue(advancedStrobe.Key, item); if (_strobeActive) { advancedStrobe.Key.ToggleRight(); } else { advancedStrobe.Key.ToggleLeft(); } _advancedLasersCurrentEmmitterIndex.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; } [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<FVRViveHand> action = (Action<FVRViveHand>)Activator.CreateInstance(typeof(Action<FVRViveHand>), __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; } } public class NGSW_FC_ScreenController : MonoBehaviour { public enum ESetting { Zero, Compass, Laser, Reticle, Color, Brightness } [Header("NGS-FC Button Config")] public NGSW_FC NGSW_FC; public LaserPointer LaserPointer; public float ScreenTimeout = 1f; public ESetting[] Settings; public int CurrentSettingIndex; public GameObject Canvas; public Image Frame; public Text LeftArrow; public Text RightArrow; public Text ZeroingValueText; public Text CompassValueText; [Header("Text Fields")] public Text ZeroingText; public Text LaserText; public Text CompassOptionText; public Text ReticleText; public Text ColorText; public Text BrightnessText; [Header("Reticle Stuff")] public HolographicSight OneEcksReticle; public HolographicSight PreZeroReticle; public HolographicSight PostZeroReticle; [ColorUsage(true, true, 0f, float.MaxValue, 0f, float.MaxValue)] public Color[] ReticleColors; public string[] ColorNames; public int CurrentColor; [ColorUsage(true, true, 0f, float.MaxValue, 0f, float.MaxValue)] public Color[] ReticleBrightnesses; public int CurrentBrightness; public Texture2D[] OneEcksReticles; public string[] ReticleNames; public int CurrentReticle; private ESetting _currentSetting = ESetting.Compass; private string _laserStartText; private string _compassStartText; private string _reticleStartText; private string _colorStartText; private string _brightnessStartText; private bool _screenIsOn = false; private static readonly Dictionary<HolographicSight, NGSW_FC_ScreenController> _existingOneEcksReticles = new Dictionary<HolographicSight, NGSW_FC_ScreenController>(); private static readonly Dictionary<HolographicSight, NGSW_FC_ScreenController> _existingNGSWReticles = new Dictionary<HolographicSight, NGSW_FC_ScreenController>(); private const string c_h3vrHolograpicSightMainTex = "_MainTex"; private const string c_h3vrHolograpicSightMainColor = "_Color"; public void Awake() { _currentSetting = Settings[CurrentSettingIndex]; _laserStartText = LaserText.text; _compassStartText = CompassOptionText.text; _reticleStartText = ReticleText.text; _colorStartText = ColorText.text; _brightnessStartText = BrightnessText.text; UpdateScreen(); UpdateColor(); if (!OpenScripts2_BasePlugin.IsInEditor) { Harmony.CreateAndPatchAll(typeof(NGSW_FC_ScreenController), (string)null); _existingOneEcksReticles.Add(OneEcksReticle, this); _existingNGSWReticles.Add(OneEcksReticle, this); _existingNGSWReticles.Add(PreZeroReticle, this); _existingNGSWReticles.Add(PostZeroReticle, this); Canvas.SetActive(false); } } public void OnDestroy() { _existingOneEcksReticles.Remove(OneEcksReticle); _existingNGSWReticles.Remove(OneEcksReticle); _existingNGSWReticles.Remove(PreZeroReticle); _existingNGSWReticles.Remove(PostZeroReticle); } public void ButtonCenter() { NGSW_FC.TriggerRangeFinderZeroing(); } public void ButtonUp() { if (_screenIsOn) { CurrentSettingIndex--; if (CurrentSettingIndex < 0) { CurrentSettingIndex = Settings.Length - 1; } _currentSetting = Settings[CurrentSettingIndex]; } UpdateScreen(); } public void ButtonDown() { if (_screenIsOn) { CurrentSettingIndex++; if (CurrentSettingIndex >= Settings.Length) { CurrentSettingIndex = 0; } _currentSetting = Settings[CurrentSettingIndex]; } UpdateScreen(); } public void ButtonLeft() { if (_screenIsOn) { switch (_currentSetting) { case ESetting.Zero: NGSW_FC.TriggerRangeFinderZeroing(); break; case ESetting.Compass: if (NGSW_FC.CompassEnabled) { NGSW_FC.ToggleCompass(); } break; case ESetting.Laser: if (LaserPointer.IsOn) { LaserPointer.ToggleOn(); } break; case ESetting.Reticle: CurrentReticle--; if (CurrentReticle < 0) { CurrentReticle = OneEcksReticles.Length - 1; } break; case ESetting.Color: CurrentColor--; if (CurrentColor < 0) { CurrentColor = ReticleColors.Length - 1; } break; case ESetting.Brightness: CurrentBrightness--; if (CurrentBrightness < 0) { CurrentBrightness = ReticleBrightnesses.Length - 1; } break; } } UpdateColor(); UpdateScreen(); } public void ButtonRight() { if (_screenIsOn) { switch (_currentSetting) { case ESetting.Zero: NGSW_FC.TriggerRangeFinderZeroing(); break; case ESetting.Compass: if (!NGSW_FC.CompassEnabled) { NGSW_FC.ToggleCompass(); } break; case ESetting.Laser: if (!LaserPointer.IsOn) { LaserPointer.ToggleOn(); } break; case ESetting.Reticle: CurrentReticle++; if (CurrentReticle >= OneEcksReticles.Length) { CurrentReticle = 0; } break; case ESetting.Color: CurrentColor++; if (CurrentColor >= ReticleColors.Length) { CurrentColor = 0; } break; case ESetting.Brightness: CurrentBrightness++; if (CurrentBrightness >= ReticleBrightnesses.Length) { CurrentBrightness = 0; } break; } } UpdateScreen(); UpdateColor(); } private void UpdateScreen() { //IL_0014: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: 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_00f8: 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_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: 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_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) ((MonoBehaviour)this).StopAllCoroutines(); ((MonoBehaviour)this).StartCoroutine(AutomaticDisplayTimeout()); Vector3 localPosition = Vector3.zero; switch (_currentSetting) { case ESetting.Zero: localPosition = ((Component)ZeroingText).transform.localPosition; ((Component)Frame).transform.localPosition = localPosition; ((Component)LeftArrow).gameObject.SetActive(false); ((Component)RightArrow).gameObject.SetActive(false); break; case ESetting.Compass: localPosition = ((Component)CompassOptionText).transform.localPosition; ((Component)Frame).transform.localPosition = localPosition; ((Component)LeftArrow).gameObject.SetActive(NGSW_FC.CompassEnabled); ((Component)RightArrow).gameObject.SetActive(!NGSW_FC.CompassEnabled); break; case ESetting.Laser: localPosition = ((Component)LaserText).transform.localPosition; ((Component)Frame).transform.localPosition = localPosition; ((Component)LeftArrow).gameObject.SetActive(LaserPointer.IsOn); ((Component)RightArrow).gameObject.SetActive(!LaserPointer.IsOn); break; case ESetting.Reticle: localPosition = ((Component)ReticleText).transform.localPosition; ((Component)Frame).transform.localPosition = localPosition; ((Component)LeftArrow).gameObject.SetActive(true); ((Component)RightArrow).gameObject.SetActive(true); break; case ESetting.Color: localPosition = ((Component)ColorText).transform.localPosition; ((Component)Frame).transform.localPosition = localPosition; ((Component)LeftArrow).gameObject.SetActive(true); ((Component)RightArrow).gameObject.SetActive(true); break; case ESetting.Brightness: localPosition = ((Component)BrightnessText).transform.localPosition; ((Component)Frame).transform.localPosition = localPosition; ((Component)LeftArrow).gameObject.SetActive(true); ((Component)RightArrow).gameObject.SetActive(true); break; } if ((Object)(object)ZeroingText != (Object)null) { ZeroingText.text = "Zeroing"; } CompassOptionText.text = _compassStartText + ((!NGSW_FC.CompassEnabled) ? "off" : "on"); LaserText.text = _laserStartText + ((!LaserPointer.IsOn) ? "off" : "on"); ReticleText.text = _reticleStartText + ReticleNames[CurrentReticle]; ColorText.text = _colorStartText + ColorNames[CurrentColor]; BrightnessText.text = _brightnessStartText + CurrentBrightness; UnityEngineExtensions.ModifyLocalPositionAxisValue(((Component)LeftArrow).transform, (Axis)1, localPosition.y); UnityEngineExtensions.ModifyLocalPositionAxisValue(((Component)RightArrow).transform, (Axis)1, localPosition.y); } private void UpdateColor() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: 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_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_008d: 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_00a5: 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) Color color = ReticleColors[CurrentColor] * ReticleBrightnesses[CurrentBrightness]; ((Graphic)ZeroingValueText).color = color; ((Graphic)CompassValueText).color = color; ((Graphic)LeftArrow).color = color; ((Graphic)RightArrow).color = color; ((Graphic)ZeroingText).color = color; ((Graphic)LaserText).color = color; ((Graphic)CompassOptionText).color = color; ((Graphic)ReticleText).color = color; ((Graphic)ColorText).color = color; ((Graphic)BrightnessText).color = color; ((Graphic)Frame).color = color; } private IEnumerator AutomaticDisplayTimeout() { _screenIsOn = true; Canvas.SetActive(true); ((Component)CompassValueText).gameObject.SetActive(false); ((Component)ZeroingValueText).gameObject.SetActive(false); for (float displayTimeOn = 0f; displayTimeOn < ScreenTimeout; displayTimeOn += Time.deltaTime) { yield return null; } ((Component)CompassValueText).gameObject.SetActive(true); ((Component)ZeroingValueText).gameObject.SetActive(true); Canvas.SetActive(false); _screenIsOn = false; } [HarmonyPatch(typeof(HolographicSight), "OnWillRenderObject")] [HarmonyPrefix] public static void OnWillRender_ReticleTexturePatch(HolographicSight __instance) { if (_existingOneEcksReticles.TryGetValue(__instance, out var value)) { __instance.m_block.SetTexture("_MainTex", (Texture)(object)value.OneEcksReticles[value.CurrentReticle]); } } [HarmonyPatch(typeof(HolographicSight), "OnWillRenderObject")] [HarmonyPrefix] public static void OnWillRender_ReticleColorPatch(HolographicSight __instance) { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) if (_existingNGSWReticles.TryGetValue(__instance, out var value)) { __instance.m_block.SetColor("_Color", value.ReticleColors[value.CurrentColor] * value.ReticleBrightnesses[value.CurrentBrightness]); } } [ContextMenu("UpdateScreen")] public void ContextMenuUpdateScreen() { //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_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_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_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_0175: 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_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) _currentSetting = Settings[CurrentSettingIndex]; Canvas.SetActive(true); Vector3 localPosition = Vector3.zero; switch (_currentSetting) { case ESetting.Zero: localPosition = ((Component)ZeroingText).transform.localPosition; ((Component)Frame).transform.localPosition = localPosition; ((Component)LeftArrow).gameObject.SetActive(false); ((Component)RightArrow).gameObject.SetActive(false); break; case ESetting.Compass: localPosition = ((Component)CompassOptionText).transform.localPosition; ((Component)Frame).transform.localPosition = localPosition; ((Component)LeftArrow).gameObject.SetActive(NGSW_FC.CompassEnabled); ((Component)RightArrow).gameObject.SetActive(!NGSW_FC.CompassEnabled); break; case ESetting.Laser: localPosition = ((Component)LaserText).transform.localPosition; ((Component)Frame).transform.localPosition = localPosition; ((Component)LeftArrow).gameObject.SetActive(LaserPointer.IsOn); ((Component)RightArrow).gameObject.SetActive(!LaserPointer.IsOn); break; case ESetting.Reticle: localPosition = ((Component)ReticleText).tr