Decompiled source of NVG Revised v1.0.4

plugins/NVG_Revised.dll

Decompiled 18 hours ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.HighDefinition;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("NVG_Revised")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+be7d0d750de91edf9f2ca506b35dae286b7abc07")]
[assembly: AssemblyProduct("NVG_Revised")]
[assembly: AssemblyTitle("NVG_Revised")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace NVG_Revised
{
	public class NightVisionController : MonoBehaviour
	{
		private IInputSystem? _inputManager;

		private PlayerControllerB? _playerController;

		private GameObject? _player;

		private GameObject? _cameraObject;

		private bool _nightVisionEnabled;

		private GameObject? _normalFilter;

		private Volume? _normalVolume;

		private Volume? _nvVolume;

		private GameObject? _nightvisionFilter;

		private Light? _nvAmbient;

		private float _nvResponseTime;

		private float _nvTimer;

		private float _colorCycleTimer;

		private Color[] _rainbowColors = (Color[])(object)new Color[7]
		{
			Color.red,
			Color.magenta,
			Color.blue,
			Color.cyan,
			Color.green,
			Color.yellow,
			Color.red
		};

		private KeyCode _toggleKey;

		private KeyCode _reloadConfigKey;

		private void Awake()
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			_inputManager = UnityInput.Current;
			_nvResponseTime = NVG_Revised.NvResponseTimeConfig.Value;
			_toggleKey = NVG_Revised.ToggleKeyConfig.Value;
			_reloadConfigKey = NVG_Revised.ReloadConfigKeyConfig.Value;
			NVG_Revised.LogInfo("NightVisionController initialized.");
		}

		private void Update()
		{
			//IL_0030: 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)
			UpdateNvIntensity();
			if ((Object)(object)_player == (Object)null)
			{
				InitializePlayerComponents();
			}
			if (_inputManager != null && _inputManager.GetKeyDown(_toggleKey) && (Object)(object)_playerController != (Object)null && !_playerController.inTerminalMenu && !_playerController.isTypingChat)
			{
				ToggleNightVision();
			}
			if (_inputManager != null && _inputManager.GetKeyDown(_reloadConfigKey))
			{
				NVG_Revised.Instance.ReloadConfig();
				ApplyConfig();
			}
			if (NVG_Revised.RainbowColorConfig.Value)
			{
				UpdateRainbowColor();
			}
			UpdateNvTimer();
			UpdateVolumeWeights();
		}

		private void UpdateNvIntensity()
		{
			if ((Object)(object)_nvAmbient != (Object)null)
			{
				_nvAmbient.intensity = NVG_Revised.NvAmbientIntensityConfig.Value * (_nvTimer / _nvResponseTime);
			}
		}

		private void InitializePlayerComponents()
		{
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			_player = GameObject.Find("Player");
			if ((Object)(object)_player == (Object)null)
			{
				return;
			}
			Transform obj = _player.transform.Find("ScavengerModel/metarig/CameraContainer/MainCamera");
			_cameraObject = ((obj != null) ? ((Component)obj).gameObject : null);
			_playerController = _player.GetComponent<PlayerControllerB>();
			GameObject obj2 = GameObject.Find("PlayerHUDHelmetModel");
			if (obj2 != null)
			{
				obj2.SetActive(false);
			}
			_normalFilter = GameObject.Find("CustomPass");
			GameObject obj3 = GameObject.Find("VolumeMain");
			_normalVolume = ((obj3 != null) ? obj3.GetComponent<Volume>() : null);
			GameObject val = GameObject.Find("VolumeMain");
			if ((Object)(object)val != (Object)null)
			{
				_nightvisionFilter = Object.Instantiate<GameObject>(val);
				((Object)_nightvisionFilter).name = "NightVisionVolume";
				_nvAmbient = _nightvisionFilter.AddComponent<Light>();
				_nvAmbient.type = (LightType)1;
				_nvAmbient.intensity = NVG_Revised.NvAmbientIntensityConfig.Value;
				_nightvisionFilter.transform.rotation = Quaternion.Euler(90f, 0f, 0f);
				_nvVolume = _nightvisionFilter.GetComponent<Volume>();
				if ((Object)(object)_nvVolume != (Object)null)
				{
					InitializeNvProfile(_nvVolume.profile);
				}
				_nightvisionFilter.SetActive(true);
				_nvVolume.weight = 0f;
			}
		}

		private static void InitializeNvProfile(VolumeProfile profile)
		{
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			((Object)profile).name = "NVGOptions";
			profile.components.Clear();
			Bloom val = profile.Add<Bloom>(true);
			((VolumeParameter<float>)(object)val.intensity).value = NVG_Revised.BloomIntensityConfig.Value;
			((VolumeParameter<float>)(object)val.threshold).value = NVG_Revised.BloomThresholdConfig.Value;
			((VolumeComponent)val).active = true;
			Vignette val2 = profile.Add<Vignette>(true);
			((VolumeParameter<float>)(object)val2.intensity).value = NVG_Revised.VignetteIntensityConfig.Value;
			((VolumeParameter<float>)(object)val2.smoothness).value = NVG_Revised.VignetteSmoothnessConfig.Value;
			((VolumeComponent)val2).active = true;
			ColorAdjustments val3 = profile.Add<ColorAdjustments>(true);
			((VolumeParameter<Color>)(object)val3.colorFilter).value = NVG_Revised.GetColorFromPreset(NVG_Revised.ColorFilterConfig.Value);
			((VolumeParameter<float>)(object)val3.postExposure).value = NVG_Revised.PostExposureConfig.Value;
			((VolumeComponent)val3).active = true;
			FilmGrain val4 = profile.Add<FilmGrain>(true);
			((VolumeParameter<FilmGrainLookup>)(object)val4.type).value = (FilmGrainLookup)9;
			((VolumeParameter<float>)(object)val4.intensity).value = NVG_Revised.FilmGrainIntensityConfig.Value;
			((VolumeParameter<float>)(object)val4.response).value = NVG_Revised.FilmGrainResponseConfig.Value;
			((VolumeComponent)val4).active = true;
		}

		private void ToggleNightVision()
		{
			if (!((Object)(object)_player == (Object)null) && !((Object)(object)_cameraObject == (Object)null) && !((Object)(object)_normalFilter == (Object)null))
			{
				_nightVisionEnabled = !_nightVisionEnabled;
				_normalFilter.SetActive(!_nightVisionEnabled);
				NVG_Revised.LogInfo($"Night vision toggled: {_nightVisionEnabled}");
			}
		}

		private void UpdateNvTimer()
		{
			_nvTimer += (_nightVisionEnabled ? Time.deltaTime : (0f - Time.deltaTime));
			_nvTimer = Mathf.Clamp(_nvTimer, 0f, _nvResponseTime);
		}

		private void UpdateVolumeWeights()
		{
			if ((Object)(object)_player != (Object)null && (Object)(object)_normalVolume != (Object)null && (Object)(object)_nvVolume != (Object)null)
			{
				_normalVolume.weight = (_nvResponseTime - _nvTimer) / _nvResponseTime;
				_nvVolume.weight = _nvTimer / _nvResponseTime;
			}
		}

		private void UpdateRainbowColor()
		{
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: 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_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			_colorCycleTimer += Time.deltaTime;
			float num = _colorCycleTimer % 5f / 5f;
			int num2 = Mathf.FloorToInt(num * (float)(_rainbowColors.Length - 1));
			Color val = _rainbowColors[num2];
			Color val2 = _rainbowColors[(num2 + 1) % _rainbowColors.Length];
			Color value = Color.Lerp(val, val2, num * (float)(_rainbowColors.Length - 1) - (float)num2);
			ColorAdjustments val3 = default(ColorAdjustments);
			if ((Object)(object)_nvVolume != (Object)null && _nvVolume.profile.TryGet<ColorAdjustments>(ref val3))
			{
				((VolumeParameter<Color>)(object)val3.colorFilter).value = value;
			}
		}

		private void ApplyConfig()
		{
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_016b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_nvVolume != (Object)null)
			{
				VolumeProfile profile = _nvVolume.profile;
				Bloom val = default(Bloom);
				if (profile.TryGet<Bloom>(ref val))
				{
					((VolumeParameter<float>)(object)val.intensity).value = NVG_Revised.BloomIntensityConfig.Value;
					((VolumeParameter<float>)(object)val.threshold).value = NVG_Revised.BloomThresholdConfig.Value;
				}
				Vignette val2 = default(Vignette);
				if (profile.TryGet<Vignette>(ref val2))
				{
					((VolumeParameter<float>)(object)val2.intensity).value = NVG_Revised.VignetteIntensityConfig.Value;
					((VolumeParameter<float>)(object)val2.smoothness).value = NVG_Revised.VignetteSmoothnessConfig.Value;
				}
				ColorAdjustments val3 = default(ColorAdjustments);
				if (profile.TryGet<ColorAdjustments>(ref val3))
				{
					((VolumeParameter<Color>)(object)val3.colorFilter).value = NVG_Revised.GetColorFromPreset(NVG_Revised.ColorFilterConfig.Value);
					((VolumeParameter<float>)(object)val3.postExposure).value = NVG_Revised.PostExposureConfig.Value;
				}
				FilmGrain val4 = default(FilmGrain);
				if (profile.TryGet<FilmGrain>(ref val4))
				{
					((VolumeParameter<float>)(object)val4.intensity).value = NVG_Revised.FilmGrainIntensityConfig.Value;
					((VolumeParameter<float>)(object)val4.response).value = NVG_Revised.FilmGrainResponseConfig.Value;
				}
			}
			_nvResponseTime = NVG_Revised.NvResponseTimeConfig.Value;
			if ((Object)(object)_nvAmbient != (Object)null)
			{
				_nvAmbient.intensity = NVG_Revised.NvAmbientIntensityConfig.Value;
			}
			_toggleKey = NVG_Revised.ToggleKeyConfig.Value;
			_reloadConfigKey = NVG_Revised.ReloadConfigKeyConfig.Value;
		}
	}
	[BepInPlugin("NVG_Revised", "NVG_Revised", "1.0.0")]
	public class NVG_Revised : BaseUnityPlugin
	{
		public enum ColorPreset
		{
			Green,
			Red,
			Blue,
			Purple,
			Yellow,
			Orange,
			Cyan,
			Magenta,
			White,
			Black,
			Gray
		}

		private static readonly Dictionary<ColorPreset, Color> ColorMap = new Dictionary<ColorPreset, Color>
		{
			{
				ColorPreset.Green,
				new Color(0f, 0.75f, 0.03f)
			},
			{
				ColorPreset.Red,
				new Color(1f, 0f, 0f)
			},
			{
				ColorPreset.Blue,
				new Color(0f, 0f, 1f)
			},
			{
				ColorPreset.Purple,
				new Color(0.5f, 0f, 0.5f)
			},
			{
				ColorPreset.Yellow,
				new Color(1f, 1f, 0f)
			},
			{
				ColorPreset.Orange,
				new Color(1f, 0.5f, 0f)
			},
			{
				ColorPreset.Cyan,
				new Color(0f, 1f, 1f)
			},
			{
				ColorPreset.Magenta,
				new Color(1f, 0f, 1f)
			},
			{
				ColorPreset.White,
				new Color(1f, 1f, 1f)
			},
			{
				ColorPreset.Black,
				new Color(0f, 0f, 0f)
			},
			{
				ColorPreset.Gray,
				new Color(0.5f, 0.5f, 0.5f)
			}
		};

		public static NVG_Revised Instance { get; private set; } = null;


		internal static ManualLogSource Logger { get; private set; } = null;


		private static Harmony? Harmony { get; set; }

		internal static ConfigEntry<ColorPreset> ColorFilterConfig { get; private set; } = null;


		internal static ConfigEntry<KeyCode> ToggleKeyConfig { get; private set; } = null;


		internal static ConfigEntry<KeyCode> ReloadConfigKeyConfig { get; private set; } = null;


		internal static ConfigEntry<float> NvResponseTimeConfig { get; private set; } = null;


		internal static ConfigEntry<float> NvAmbientIntensityConfig { get; private set; } = null;


		internal static ConfigEntry<float> BloomIntensityConfig { get; private set; } = null;


		internal static ConfigEntry<float> BloomThresholdConfig { get; private set; } = null;


		internal static ConfigEntry<float> VignetteIntensityConfig { get; private set; } = null;


		internal static ConfigEntry<float> VignetteSmoothnessConfig { get; private set; } = null;


		internal static ConfigEntry<float> PostExposureConfig { get; private set; } = null;


		internal static ConfigEntry<float> FilmGrainIntensityConfig { get; private set; } = null;


		internal static ConfigEntry<float> FilmGrainResponseConfig { get; private set; } = null;


		internal static ConfigEntry<bool> RainbowColorConfig { get; private set; } = null;


		internal static ConfigEntry<bool> LoggingEnabledConfig { get; private set; } = null;


		private void Awake()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Expected O, but got Unknown
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Expected O, but got Unknown
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Expected O, but got Unknown
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Expected O, but got Unknown
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Expected O, but got Unknown
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Expected O, but got Unknown
			//IL_0185: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Expected O, but got Unknown
			//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Expected O, but got Unknown
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_020b: Expected O, but got Unknown
			//IL_023f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0249: Expected O, but got Unknown
			//IL_027d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0287: Expected O, but got Unknown
			//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c5: Expected O, but got Unknown
			//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f1: Expected O, but got Unknown
			//IL_0313: Unknown result type (might be due to invalid IL or missing references)
			//IL_031d: Expected O, but got Unknown
			Logger = ((BaseUnityPlugin)this).Logger;
			Instance = this;
			ColorFilterConfig = ((BaseUnityPlugin)this).Config.Bind<ColorPreset>("General", "ColorFilter", ColorPreset.Green, new ConfigDescription("Color filter for night vision.", (AcceptableValueBase)null, Array.Empty<object>()));
			ToggleKeyConfig = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("General", "ToggleKey", (KeyCode)99, new ConfigDescription("Key to toggle night vision.", (AcceptableValueBase)null, Array.Empty<object>()));
			ReloadConfigKeyConfig = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("General", "ReloadConfigKey", (KeyCode)282, new ConfigDescription("Key to reload configuration settings.", (AcceptableValueBase)null, Array.Empty<object>()));
			NvResponseTimeConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "ResponseTime", 0.1f, new ConfigDescription("Response time for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
			NvAmbientIntensityConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "AmbientIntensity", 0.3f, new ConfigDescription("Ambient light intensity for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			BloomIntensityConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "BloomIntensity", 12f, new ConfigDescription("Bloom intensity for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), Array.Empty<object>()));
			BloomThresholdConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "BloomThreshold", 0.7f, new ConfigDescription("Bloom threshold for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			VignetteIntensityConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "VignetteIntensity", 0.5f, new ConfigDescription("Vignette intensity for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			VignetteSmoothnessConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "VignetteSmoothness", 1f, new ConfigDescription("Vignette smoothness for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			PostExposureConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "PostExposure", 3.5f, new ConfigDescription("Post exposure for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
			FilmGrainIntensityConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "FilmGrainIntensity", 1f, new ConfigDescription("Film grain intensity for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			FilmGrainResponseConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "FilmGrainResponse", 0.8f, new ConfigDescription("Film grain response for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			RainbowColorConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Extras", "RainbowColor", false, new ConfigDescription("Enable rainbow color mode for night vision.", (AcceptableValueBase)null, Array.Empty<object>()));
			LoggingEnabledConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "LoggingEnabled", false, new ConfigDescription("Enable or disable logging.", (AcceptableValueBase)null, Array.Empty<object>()));
			LogInfo("Configuration settings loaded.");
			Patch();
			LogInfo("NVG_Revised v1.0.0 has loaded!");
			InitializeNightVision();
		}

		private static void Patch()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Expected O, but got Unknown
			if (Harmony == null)
			{
				Harmony = new Harmony("NVG_Revised");
			}
			LogDebug("Patching...");
			Harmony.PatchAll();
			LogDebug("Finished patching!");
		}

		internal static void Unpatch()
		{
			LogDebug("Unpatching...");
			Harmony? harmony = Harmony;
			if (harmony != null)
			{
				harmony.UnpatchSelf();
			}
			LogDebug("Finished unpatching!");
		}

		private static void InitializeNightVision()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			GameObject val = new GameObject("NVG Controller");
			val.AddComponent<NightVisionController>();
			Object.DontDestroyOnLoad((Object)(object)val);
			((Object)val).hideFlags = (HideFlags)61;
			LogInfo("NVG Revised is loaded!");
		}

		public static Color GetColorFromPreset(ColorPreset preset)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			Color value;
			return ColorMap.TryGetValue(preset, out value) ? value : ColorMap[ColorPreset.Green];
		}

		public void ReloadConfig()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			//IL_0056: 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_0070: Expected O, but got Unknown
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Expected O, but got Unknown
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Expected O, but got Unknown
			//IL_0121: Unknown result type (might be due to invalid IL or missing references)
			//IL_012b: Expected O, but got Unknown
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_016e: Expected O, but got Unknown
			//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b1: Expected O, but got Unknown
			//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f4: Expected O, but got Unknown
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Expected O, but got Unknown
			//IL_0270: Unknown result type (might be due to invalid IL or missing references)
			//IL_027a: Expected O, but got Unknown
			//IL_02b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bd: Expected O, but got Unknown
			//IL_02f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0300: Expected O, but got Unknown
			//IL_032b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0335: Expected O, but got Unknown
			LogInfo("Reloading configuration settings...");
			ColorFilterConfig = ((BaseUnityPlugin)this).Config.Bind<ColorPreset>("General", "ColorFilter", ColorFilterConfig.Value, new ConfigDescription("Color filter for night vision.", (AcceptableValueBase)null, Array.Empty<object>()));
			ToggleKeyConfig = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("General", "ToggleKey", ToggleKeyConfig.Value, new ConfigDescription("Key to toggle night vision.", (AcceptableValueBase)null, Array.Empty<object>()));
			ReloadConfigKeyConfig = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("General", "ReloadConfigKey", ReloadConfigKeyConfig.Value, new ConfigDescription("Key to reload configuration settings.", (AcceptableValueBase)null, Array.Empty<object>()));
			NvResponseTimeConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "ResponseTime", NvResponseTimeConfig.Value, new ConfigDescription("Response time for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
			NvAmbientIntensityConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "AmbientIntensity", NvAmbientIntensityConfig.Value, new ConfigDescription("Ambient light intensity for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			BloomIntensityConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "BloomIntensity", BloomIntensityConfig.Value, new ConfigDescription("Bloom intensity for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), Array.Empty<object>()));
			BloomThresholdConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "BloomThreshold", BloomThresholdConfig.Value, new ConfigDescription("Bloom threshold for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			VignetteIntensityConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "VignetteIntensity", VignetteIntensityConfig.Value, new ConfigDescription("Vignette intensity for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			VignetteSmoothnessConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "VignetteSmoothness", VignetteSmoothnessConfig.Value, new ConfigDescription("Vignette smoothness for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			PostExposureConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "PostExposure", PostExposureConfig.Value, new ConfigDescription("Post exposure for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>()));
			FilmGrainIntensityConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "FilmGrainIntensity", FilmGrainIntensityConfig.Value, new ConfigDescription("Film grain intensity for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			FilmGrainResponseConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Advanced", "FilmGrainResponse", FilmGrainResponseConfig.Value, new ConfigDescription("Film grain response for night vision.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			RainbowColorConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Extras", "RainbowColor", RainbowColorConfig.Value, new ConfigDescription("Enable rainbow color mode for night vision.", (AcceptableValueBase)null, Array.Empty<object>()));
			LogInfo("Configuration settings reloaded.");
		}

		private static void Log(LogLevel level, string message)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Invalid comparison between Unknown and I4
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Invalid comparison between Unknown and I4
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Invalid comparison between Unknown and I4
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Invalid comparison between Unknown and I4
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Invalid comparison between Unknown and I4
			if (!LoggingEnabledConfig.Value)
			{
				return;
			}
			if ((int)level <= 4)
			{
				if ((int)level != 2)
				{
					if ((int)level == 4)
					{
						Logger.LogWarning((object)message);
					}
				}
				else
				{
					Logger.LogError((object)message);
				}
			}
			else if ((int)level != 16)
			{
				if ((int)level == 32)
				{
					Logger.LogDebug((object)message);
				}
			}
			else
			{
				Logger.LogInfo((object)message);
			}
		}

		public static void LogInfo(string message)
		{
			Log((LogLevel)16, message);
		}

		private static void LogDebug(string message)
		{
			Log((LogLevel)32, message);
		}

		public static void LogWarning(string message)
		{
			Log((LogLevel)4, message);
		}

		public static void LogError(string message)
		{
			Log((LogLevel)2, message);
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "NVG_Revised";

		public const string PLUGIN_NAME = "NVG_Revised";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}