Decompiled source of HDPeak v1.2.2

HDPeak.dll

Decompiled a month 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.Logging;
using HDPeak.Patches;
using HDPeak.Settings;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using SettingsExtender;
using Unity.Mathematics;
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
using Zorro.Settings;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.1", FrameworkDisplayName = ".NET Framework 4.7.1")]
[assembly: AssemblyCompany("Nozz")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("Copyright © 2025 Nozz")]
[assembly: AssemblyFileVersion("1.2.2")]
[assembly: AssemblyInformationalVersion("1.0.0+4e05afc280d9e740b2e52236c88d6585143973ad")]
[assembly: AssemblyProduct("HDPeak")]
[assembly: AssemblyTitle("HDPeak - Advanced Graphics Settings")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.2.2.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.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace HDPeak
{
	internal static class HDPeakPluginInfo
	{
		internal const string PLUGIN_GUID = "com.nozz.hdpeak";

		internal const string PLUGIN_NAME = "HDPeak";

		internal const string PLUGIN_VERSION = "1.2.2";
	}
	[BepInPlugin("com.nozz.hdpeak", "HDPeak", "1.2.2")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class HDPeakPlugin : BaseUnityPlugin
	{
		internal static ManualLogSource Logger;

		internal static Harmony harmony;

		private GameObject buttonSrc;

		private bool settingsAdded;

		private void Awake()
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			Logger = ((BaseUnityPlugin)this).Logger;
			Logger.LogInfo((object)"Plugin com.nozz.hdpeak is loaded!");
			SettingsRegistry.Register("HDPeak");
			harmony = new Harmony("com.nozz.hdpeak");
			harmony.PatchAll();
		}

		private void Start()
		{
			if (!settingsAdded)
			{
				try
				{
					Logger.LogInfo((object)"Adding Anti-Aliasing setting...");
					SettingsHandler.Instance.AddSetting((Setting)(object)new AntiAliasingSetting());
					Logger.LogInfo((object)"Adding Anisotropic Filtering setting...");
					SettingsHandler.Instance.AddSetting((Setting)(object)new AnisotropicFilteringSetting());
					Logger.LogInfo((object)"Adding Texture Quality setting...");
					SettingsHandler.Instance.AddSetting((Setting)(object)new TextureQualitySetting());
					Logger.LogInfo((object)"Adding Shadow Resolution setting...");
					SettingsHandler.Instance.AddSetting((Setting)(object)new ShadowResolutionSetting());
					Logger.LogInfo((object)"Adding LOD Bias setting...");
					SettingsHandler.Instance.AddSetting((Setting)(object)new LODBiasSetting());
					Logger.LogInfo((object)"Adding Opaque Texture setting...");
					SettingsHandler.Instance.AddSetting((Setting)(object)new OpaqueTextureSetting());
					Logger.LogInfo((object)"Adding Max Additional Lights setting...");
					SettingsHandler.Instance.AddSetting((Setting)(object)new MaxLightsSetting());
					Logger.LogInfo((object)"Adding Dynamic Batching setting...");
					SettingsHandler.Instance.AddSetting((Setting)(object)new DynamicBatchingSetting());
					Logger.LogInfo((object)"Adding Culling Distance setting...");
					SettingsHandler.Instance.AddSetting((Setting)(object)new CullingDistanceSetting());
					settingsAdded = true;
					Logger.LogInfo((object)"HDPeak settings added successfully!");
					Logger.LogInfo((object)"Available settings: Anti-Aliasing, Anisotropic Filtering, Texture Quality, Shadow Resolution, LOD Bias, Opaque Texture, Max Additional Lights, Dynamic Batching, Culling Distance");
					Logger.LogInfo((object)$"Settings added: {settingsAdded}");
				}
				catch (Exception ex)
				{
					Logger.LogError((object)("Error adding settings: " + ex.Message));
				}
			}
		}
	}
}
namespace HDPeak.Patches
{
	[HarmonyPatch]
	public static class MainCameraPatches
	{
		private static bool needsUpdate = false;

		private static int? customFarClipPlane = null;

		private static readonly FieldRef<MainCamera, Camera> CamRef = AccessTools.FieldRefAccess<MainCamera, Camera>("cam");

		[HarmonyPatch(typeof(MainCamera), "Awake")]
		[HarmonyPostfix]
		public static void Awake(MainCamera __instance)
		{
			UpdateCameraFarClipPlane(__instance);
		}

		[HarmonyPatch(typeof(MainCamera), "LateUpdate")]
		[HarmonyPostfix]
		public static void LateUpdate(MainCamera __instance)
		{
			if (needsUpdate)
			{
				UpdateCameraFarClipPlane(__instance);
			}
		}

		private static void UpdateCameraFarClipPlane(MainCamera instance)
		{
			Camera val = CamRef.Invoke(instance);
			if ((Object)(object)val != (Object)null && customFarClipPlane.HasValue)
			{
				val.farClipPlane = customFarClipPlane.Value;
				needsUpdate = false;
				HDPeakPlugin.Logger.LogInfo((object)$"Camera far clip plane was updated to {customFarClipPlane.Value}");
			}
		}

		internal static void SetFarClipDistance(int value)
		{
			customFarClipPlane = value;
			needsUpdate = true;
			HDPeakPlugin.Logger.LogInfo((object)"Updating culling distance");
		}
	}
}
namespace HDPeak.Settings
{
	public enum AntialiasingMode
	{
		Off,
		MSAA2x,
		MSAA4x,
		MSAA8x
	}
	public enum AnisotropicFilteringMode
	{
		Disable,
		Enable,
		ForceEnable
	}
	public enum TextureQualityMode
	{
		VeryLow,
		Low,
		Medium,
		High,
		VeryHigh
	}
	public enum ShadowResolutionMode
	{
		VeryLow,
		Low,
		Medium,
		High,
		VeryHigh,
		Ultra
	}
	public enum OpaqueTextureMode
	{
		Disabled,
		Enabled
	}
	public enum MaxLightsMode
	{
		VeryLow,
		Low,
		Medium,
		High,
		VeryHigh
	}
	public enum DynamicBatchingMode
	{
		Disabled,
		Enabled
	}
	[ExtenderSetting("HDPeak", "Anti-Aliasing")]
	public class AntiAliasingSetting : ExtenderEnumSetting<AntialiasingMode>
	{
		protected override AntialiasingMode GetDefaultValue()
		{
			return AntialiasingMode.MSAA2x;
		}

		public override List<LocalizedString> GetLocalizedChoices()
		{
			return null;
		}

		public AntiAliasingSetting()
			: base((Action<AntialiasingMode>)delegate(AntialiasingMode Value)
			{
				RenderPipelineAsset renderPipeline = QualitySettings.renderPipeline;
				UniversalRenderPipelineAsset val = (UniversalRenderPipelineAsset)(object)((renderPipeline is UniversalRenderPipelineAsset) ? renderPipeline : null);
				if ((Object)(object)val == (Object)null)
				{
					switch (Value)
					{
					case AntialiasingMode.Off:
						QualitySettings.antiAliasing = 0;
						break;
					case AntialiasingMode.MSAA2x:
						QualitySettings.antiAliasing = 2;
						break;
					case AntialiasingMode.MSAA4x:
						QualitySettings.antiAliasing = 4;
						break;
					case AntialiasingMode.MSAA8x:
						QualitySettings.antiAliasing = 8;
						break;
					default:
						QualitySettings.antiAliasing = 2;
						break;
					}
				}
				else
				{
					switch (Value)
					{
					case AntialiasingMode.Off:
						val.msaaSampleCount = 1;
						break;
					case AntialiasingMode.MSAA2x:
						val.msaaSampleCount = 2;
						break;
					case AntialiasingMode.MSAA4x:
						val.msaaSampleCount = 4;
						break;
					case AntialiasingMode.MSAA8x:
						val.msaaSampleCount = 8;
						break;
					default:
						val.msaaSampleCount = 2;
						break;
					}
				}
			})
		{
		}
	}
	[ExtenderSetting("HDPeak", "Anisotropic Filtering")]
	public class AnisotropicFilteringSetting : ExtenderEnumSetting<AnisotropicFilteringMode>
	{
		protected override AnisotropicFilteringMode GetDefaultValue()
		{
			return AnisotropicFilteringMode.Enable;
		}

		public override List<LocalizedString> GetLocalizedChoices()
		{
			return null;
		}

		public AnisotropicFilteringSetting()
			: base((Action<AnisotropicFilteringMode>)delegate(AnisotropicFilteringMode Value)
			{
				switch (Value)
				{
				case AnisotropicFilteringMode.Disable:
					QualitySettings.anisotropicFiltering = (AnisotropicFiltering)0;
					break;
				case AnisotropicFilteringMode.Enable:
					QualitySettings.anisotropicFiltering = (AnisotropicFiltering)1;
					break;
				case AnisotropicFilteringMode.ForceEnable:
					QualitySettings.anisotropicFiltering = (AnisotropicFiltering)2;
					break;
				default:
					QualitySettings.anisotropicFiltering = (AnisotropicFiltering)1;
					break;
				}
			})
		{
		}
	}
	[ExtenderSetting("HDPeak", "Texture Quality")]
	public class TextureQualitySetting : ExtenderEnumSetting<TextureQualityMode>
	{
		protected override TextureQualityMode GetDefaultValue()
		{
			return TextureQualityMode.High;
		}

		public override List<LocalizedString> GetLocalizedChoices()
		{
			return null;
		}

		public TextureQualitySetting()
			: base((Action<TextureQualityMode>)delegate(TextureQualityMode Value)
			{
				switch (Value)
				{
				case TextureQualityMode.VeryHigh:
					QualitySettings.globalTextureMipmapLimit = 0;
					break;
				case TextureQualityMode.High:
					QualitySettings.globalTextureMipmapLimit = 1;
					break;
				case TextureQualityMode.Medium:
					QualitySettings.globalTextureMipmapLimit = 2;
					break;
				case TextureQualityMode.Low:
					QualitySettings.globalTextureMipmapLimit = 3;
					break;
				case TextureQualityMode.VeryLow:
					QualitySettings.globalTextureMipmapLimit = 4;
					break;
				default:
					QualitySettings.globalTextureMipmapLimit = 1;
					break;
				}
			})
		{
		}
	}
	[ExtenderSetting("HDPeak", "Shadow Resolution")]
	public class ShadowResolutionSetting : ExtenderEnumSetting<ShadowResolutionMode>
	{
		protected override ShadowResolutionMode GetDefaultValue()
		{
			return ShadowResolutionMode.Medium;
		}

		public override List<LocalizedString> GetLocalizedChoices()
		{
			return null;
		}

		public ShadowResolutionSetting()
			: base((Action<ShadowResolutionMode>)delegate(ShadowResolutionMode Value)
			{
				RenderPipelineAsset renderPipeline = QualitySettings.renderPipeline;
				UniversalRenderPipelineAsset val = (UniversalRenderPipelineAsset)(object)((renderPipeline is UniversalRenderPipelineAsset) ? renderPipeline : null);
				if ((Object)(object)val != (Object)null)
				{
					switch (Value)
					{
					case ShadowResolutionMode.VeryLow:
						val.mainLightShadowmapResolution = 256;
						break;
					case ShadowResolutionMode.Low:
						val.mainLightShadowmapResolution = 512;
						break;
					case ShadowResolutionMode.Medium:
						val.mainLightShadowmapResolution = 1024;
						break;
					case ShadowResolutionMode.High:
						val.mainLightShadowmapResolution = 2048;
						break;
					case ShadowResolutionMode.VeryHigh:
						val.mainLightShadowmapResolution = 4096;
						break;
					case ShadowResolutionMode.Ultra:
						val.mainLightShadowmapResolution = 8192;
						break;
					default:
						val.mainLightShadowmapResolution = 1024;
						break;
					}
				}
			})
		{
		}
	}
	[ExtenderSetting("HDPeak", "LOD Bias")]
	public class LODBiasSetting : ExtenderFloatSetting
	{
		protected override float GetDefaultValue()
		{
			return 0f;
		}

		protected override float2 GetMinMaxValue()
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			return new float2(0.5f, 2f);
		}

		public LODBiasSetting()
			: base((Action<float>)delegate(float Value)
			{
				QualitySettings.lodBias = Value;
			})
		{
		}
	}
	[ExtenderSetting("HDPeak", "Opaque Texture")]
	public class OpaqueTextureSetting : ExtenderEnumSetting<OpaqueTextureMode>
	{
		protected override OpaqueTextureMode GetDefaultValue()
		{
			return OpaqueTextureMode.Disabled;
		}

		public override List<LocalizedString> GetLocalizedChoices()
		{
			return null;
		}

		public OpaqueTextureSetting()
			: base((Action<OpaqueTextureMode>)delegate(OpaqueTextureMode Value)
			{
				RenderPipelineAsset renderPipeline = QualitySettings.renderPipeline;
				UniversalRenderPipelineAsset val = (UniversalRenderPipelineAsset)(object)((renderPipeline is UniversalRenderPipelineAsset) ? renderPipeline : null);
				if ((Object)(object)val != (Object)null)
				{
					bool supportsCameraOpaqueTexture = Value == OpaqueTextureMode.Enabled;
					val.supportsCameraOpaqueTexture = supportsCameraOpaqueTexture;
				}
			})
		{
		}
	}
	[ExtenderSetting("HDPeak", "Max Additional Lights")]
	public class MaxLightsSetting : ExtenderEnumSetting<MaxLightsMode>
	{
		protected override MaxLightsMode GetDefaultValue()
		{
			return MaxLightsMode.Medium;
		}

		public override List<LocalizedString> GetLocalizedChoices()
		{
			return null;
		}

		public MaxLightsSetting()
			: base((Action<MaxLightsMode>)delegate(MaxLightsMode Value)
			{
				RenderPipelineAsset renderPipeline = QualitySettings.renderPipeline;
				UniversalRenderPipelineAsset val = (UniversalRenderPipelineAsset)(object)((renderPipeline is UniversalRenderPipelineAsset) ? renderPipeline : null);
				if ((Object)(object)val != (Object)null)
				{
					switch (Value)
					{
					case MaxLightsMode.VeryLow:
						val.maxAdditionalLightsCount = 1;
						break;
					case MaxLightsMode.Low:
						val.maxAdditionalLightsCount = 2;
						break;
					case MaxLightsMode.Medium:
						val.maxAdditionalLightsCount = 4;
						break;
					case MaxLightsMode.High:
						val.maxAdditionalLightsCount = 6;
						break;
					case MaxLightsMode.VeryHigh:
						val.maxAdditionalLightsCount = 8;
						break;
					default:
						val.maxAdditionalLightsCount = 4;
						break;
					}
				}
			})
		{
		}
	}
	[ExtenderSetting("HDPeak", "Dynamic Batching")]
	public class DynamicBatchingSetting : ExtenderEnumSetting<DynamicBatchingMode>
	{
		protected override DynamicBatchingMode GetDefaultValue()
		{
			return DynamicBatchingMode.Disabled;
		}

		public override List<LocalizedString> GetLocalizedChoices()
		{
			return null;
		}

		public DynamicBatchingSetting()
			: base((Action<DynamicBatchingMode>)delegate(DynamicBatchingMode Value)
			{
				RenderPipelineAsset renderPipeline = QualitySettings.renderPipeline;
				UniversalRenderPipelineAsset val = (UniversalRenderPipelineAsset)(object)((renderPipeline is UniversalRenderPipelineAsset) ? renderPipeline : null);
				if ((Object)(object)val != (Object)null)
				{
					bool supportsDynamicBatching = Value == DynamicBatchingMode.Enabled;
					val.supportsDynamicBatching = supportsDynamicBatching;
				}
			})
		{
		}
	}
	[ExtenderSetting("HDPeak", "Culling Distance")]
	public class CullingDistanceSetting : ExtenderFloatSetting
	{
		protected override float GetDefaultValue()
		{
			return 1500f;
		}

		protected override float2 GetMinMaxValue()
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			return new float2(50f, 1500f);
		}

		public override void Load(ISettingsSaveLoad loader)
		{
			((FloatSetting)this).Load(loader);
			MainCameraPatches.SetFarClipDistance((int)((FloatSetting)this).Value);
		}

		public CullingDistanceSetting()
			: base((Action<float>)delegate(float Value)
			{
				MainCameraPatches.SetFarClipDistance((int)Value);
			})
		{
		}
	}
}