Decompiled source of SourceSensitivity v1.1.0

BepInEx/plugins/SourceSensitivity/SourceSensitivity.dll

Decompiled a day ago
using System;
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 ComputerysModdingUtilities;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: StraftatMod(true)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("SourceSensitivity")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.1.0.0")]
[assembly: AssemblyInformationalVersion("1.1.0+f1cd8a09eb71a2aa62afbb3ea694a60cdd19cacd")]
[assembly: AssemblyProduct("Source Sensitivity")]
[assembly: AssemblyTitle("SourceSensitivity")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.1.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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 SourceSensitivity
{
	[BepInPlugin("SourceSensitivity", "Source Sensitivity", "1.1.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		public enum FovScalingMode
		{
			Trigonometric,
			Linear,
			None
		}

		[HarmonyPatch]
		private class Patches
		{
			[HarmonyPrefix]
			[HarmonyPatch(typeof(FirstPersonController))]
			[HarmonyPatch("HandleMouseLook")]
			private static bool HandleLook(FirstPersonController __instance, ref Vector2 ___mouseInput, float ___rotationZ, float ___upperLookLimit, float ___lowerLookLimit)
			{
				//IL_0129: Unknown result type (might be due to invalid IL or missing references)
				//IL_0135: Unknown result type (might be due to invalid IL or missing references)
				//IL_016d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0172: Unknown result type (might be due to invalid IL or missing references)
				Camera playerCamera = __instance.playerCamera;
				Transform transform = ((Component)__instance).transform;
				float num = (__instance.pauseManager.gamepad ? gamepad_multiplier.Value : 1f);
				float defaultFOV = __instance.defaultFOV;
				float fieldOfView = playerCamera.fieldOfView;
				float num2 = fov_scaling_mode.Value switch
				{
					FovScalingMode.Trigonometric => Mathf.Tan(fieldOfView * (MathF.PI / 180f) / 2f) / Mathf.Tan(defaultFOV * (MathF.PI / 180f) / 2f), 
					FovScalingMode.Linear => fieldOfView / defaultFOV, 
					FovScalingMode.None => 1f, 
					_ => throw new ArgumentOutOfRangeException("FovScalingMode", fov_scaling_mode.Value, "invalid FoV scaling mode"), 
				};
				float num3 = sensitivity.Value * num2 * num;
				__instance.rotationX -= num3 * m_pitch.Value * ___mouseInput.y * (__instance.invertY ? (-1f) : 1f);
				__instance.rotationX = Mathf.Clamp(__instance.rotationX, 0f - ___upperLookLimit, ___lowerLookLimit);
				__instance.playerCameraHolder.transform.localRotation = Quaternion.Euler(__instance.rotationX, 0f, ___rotationZ);
				transform.rotation *= Quaternion.Euler(0f, num3 * m_yaw.Value * ___mouseInput.x * (__instance.invertX ? (-1f) : 1f), 0f);
				return false;
			}
		}

		internal static ManualLogSource Logger;

		public static ConfigEntry<float> sensitivity;

		public static ConfigEntry<float> m_pitch;

		public static ConfigEntry<float> m_yaw;

		public static ConfigEntry<float> gamepad_multiplier;

		public static ConfigEntry<FovScalingMode> fov_scaling_mode;

		public static ConfigEntry<float> zoom_sensitivity_ratio;

		private void Awake()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			Logger = ((BaseUnityPlugin)this).Logger;
			new Harmony("SourceSensitivity").PatchAll();
			BuildConfig();
			Logger.LogInfo((object)"Plugin SourceSensitivity is loaded!");
		}

		private void BuildConfig()
		{
			sensitivity = ((BaseUnityPlugin)this).Config.Bind<float>("Source Sensitivity", "Sensitivity", 3f, "`sensitivity` in Source games");
			m_pitch = ((BaseUnityPlugin)this).Config.Bind<float>("Source Sensitivity", "Pitch multiplier", 0.022f, "`m_pitch` in Source games\nPrecision is not actually capped to 2 decimals, you can confirm that in the config file :)");
			m_yaw = ((BaseUnityPlugin)this).Config.Bind<float>("Source Sensitivity", "Yaw multiplier", 0.022f, "`m_yaw` in Source games\nSee 'Pitch multiplier's description");
			gamepad_multiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Source Sensitivity", "Gamepad multiplier", 14f, "This is in the base game so why not");
			fov_scaling_mode = ((BaseUnityPlugin)this).Config.Bind<FovScalingMode>("Source Sensitivity", "FoV scaling mode", FovScalingMode.Trigonometric, "Field of View sensitivity scaling mode.\nTrigonometric: Accurate scaling, equivalent to using a pre-calculated `zoom_sensitivity_ratio` in Source games, but works for all FoV values. This is recommended.\nLinear: Linear scaling, equivalent to using `zoom_sensitivity_ratio 1` in Source Games.\nNone: Disabled. Same mouse movement will always result in the same angular change.");
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "SourceSensitivity";

		public const string PLUGIN_NAME = "Source Sensitivity";

		public const string PLUGIN_VERSION = "1.1.0";
	}
}