Decompiled source of EnhancedControls v1.0.1

EnhancedControls.dll

Decompiled 4 hours 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.Unity.IL2CPP;
using HarmonyLib;
using Mirror;
using Rewired;
using RewiredConsts;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("MHZ")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyCopyright("Copyright © 2026 Masaicker")]
[assembly: AssemblyFileVersion("1.0.1.0")]
[assembly: AssemblyInformationalVersion("1.0.1")]
[assembly: AssemblyProduct("EnhancedControls")]
[assembly: AssemblyTitle("EnhancedControls")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.1.0")]
[module: UnverifiableCode]
namespace EnhancedControls
{
	[BepInPlugin("mhz.bigwalk.enhancedcontrols", "Enhanced Controls", "1.0.1")]
	public sealed class EnhancedControlsPlugin : BasePlugin
	{
		private sealed class RaisedPropLockAccelerationState
		{
			public readonly float beginTime;

			public RaisedPropLockAccelerationState(float beginTime)
			{
				this.beginTime = beginTime;
			}
		}

		private sealed class JumpAssistState
		{
			public readonly PlayerCharacter player;

			private bool wasOnJumpableGround;

			private bool jumpedSinceGrounded;

			private float bufferedJumpUntil;

			private float coyoteJumpUntil;

			public JumpAssistState(PlayerCharacter player)
			{
				this.player = player;
			}

			public void UpdateGroundState(float now, bool isOnJumpableGround)
			{
				if (isOnJumpableGround)
				{
					if (!wasOnJumpableGround)
					{
						jumpedSinceGrounded = false;
						coyoteJumpUntil = 0f;
					}
				}
				else if (wasOnJumpableGround)
				{
					coyoteJumpUntil = (jumpedSinceGrounded ? 0f : (now + 0.1f));
				}
				wasOnJumpableGround = isOnJumpableGround;
			}

			public bool CanCoyoteJump(float now)
			{
				return !wasOnJumpableGround && coyoteJumpUntil > now;
			}

			public void BufferJump(float now)
			{
				bufferedJumpUntil = now + 0.12f;
			}

			public bool TryConsumeBufferedJump(float now)
			{
				if (bufferedJumpUntil <= now)
				{
					bufferedJumpUntil = 0f;
					return false;
				}
				bufferedJumpUntil = 0f;
				return true;
			}

			public void ClearBufferedJump()
			{
				bufferedJumpUntil = 0f;
			}

			public void RecordJump()
			{
				jumpedSinceGrounded = true;
				bufferedJumpUntil = 0f;
				coyoteJumpUntil = 0f;
			}
		}

		private sealed class AutoRunState
		{
			public readonly PlayerCharacter player;

			public readonly Player inputPlayer;

			public bool isActive;

			public bool waitingForVerticalRelease;

			public bool keepSprintingWhileMoving;

			public bool isControllingMoveAxis;

			public float virtualMoveY;

			private readonly float digitalAxisGravity;

			private readonly float digitalAxisSensitivity;

			private bool hasNativeMoveY;

			private float nativeMoveY;

			public AutoRunState(PlayerCharacter player, Player inputPlayer)
			{
				this.player = player;
				this.inputPlayer = inputPlayer;
				InputBehavior inputBehavior = inputPlayer.controllers.maps.GetInputBehavior(0);
				digitalAxisGravity = ((inputBehavior != null) ? inputBehavior.digitalAxisGravity : 3f);
				digitalAxisSensitivity = ((inputBehavior != null) ? inputBehavior.digitalAxisSensitivity : 3f);
			}

			public void StartAutoRun(float physicalMoveY)
			{
				if (!isControllingMoveAxis)
				{
					virtualMoveY = physicalMoveY;
				}
				isActive = true;
				waitingForVerticalRelease = Mathf.Abs(physicalMoveY) > 0.2f;
				keepSprintingWhileMoving = false;
				isControllingMoveAxis = true;
			}

			public void StopAutoRun(bool keepSprintingWhileMoving, float physicalMoveY)
			{
				isActive = false;
				waitingForVerticalRelease = false;
				isControllingMoveAxis = true;
				this.keepSprintingWhileMoving = keepSprintingWhileMoving || !Mathf.Approximately(virtualMoveY, physicalMoveY);
			}

			public void UpdateMoveAxis(float physicalMoveY, float deltaTime)
			{
				if (isActive)
				{
					virtualMoveY = Mathf.MoveTowards(virtualMoveY, 1f, digitalAxisSensitivity * deltaTime);
				}
				else
				{
					if (!isControllingMoveAxis)
					{
						return;
					}
					if (physicalMoveY >= 0.87f)
					{
						if (hasNativeMoveY && nativeMoveY >= virtualMoveY)
						{
							virtualMoveY = nativeMoveY;
							isControllingMoveAxis = false;
						}
						return;
					}
					if (physicalMoveY <= -0.87f && hasNativeMoveY)
					{
						virtualMoveY = nativeMoveY;
						isControllingMoveAxis = false;
						return;
					}
					float num = ((Mathf.Abs(physicalMoveY) <= 0.2f) ? digitalAxisGravity : digitalAxisSensitivity);
					virtualMoveY = Mathf.MoveTowards(virtualMoveY, physicalMoveY, num * deltaTime);
					if (Mathf.Approximately(virtualMoveY, physicalMoveY))
					{
						virtualMoveY = physicalMoveY;
						isControllingMoveAxis = false;
					}
				}
			}

			public void RecordNativeMoveAxis(float value)
			{
				nativeMoveY = value;
				hasNativeMoveY = true;
			}
		}

		[HarmonyPatch(typeof(PlayerSprinter), "LocalUpdate")]
		private static class StandUpOnSprintPatch
		{
			[HarmonyPrefix]
			private static void Prefix(PlayerSprinter __instance)
			{
				TryStandUp(__instance.pc, Action.sprint);
			}
		}

		[HarmonyPatch(typeof(PlayerSprinter), "LocalUpdate")]
		private static class AutoRunStatePatch
		{
			[HarmonyPostfix]
			private static void Postfix(PlayerSprinter __instance)
			{
				UpdateAutoRun(__instance);
			}
		}

		[HarmonyPatch(typeof(PlayerSitter), "Update")]
		private static class StandUpOnSitPatch
		{
			[HarmonyPrefix]
			private static void Prefix(PlayerSitter __instance, ref bool __state)
			{
				__state = ShouldStandUp(__instance.playerCharacter, __instance, Action.sit);
			}

			[HarmonyPostfix]
			private static void Postfix(PlayerSitter __instance, bool __state)
			{
				if (__state && __instance.isSittingLocal)
				{
					__instance.SetSittingLocal(false);
				}
			}
		}

		[HarmonyPatch(typeof(PlayerJumper), "Update")]
		private static class StandUpOnJumpPatch
		{
			[HarmonyPrefix]
			private static void Prefix(PlayerJumper __instance, ref bool __state)
			{
				__state = TryStandUp(__instance.playerCharacter, Action.jump);
			}

			[HarmonyPostfix]
			private static void Postfix(PlayerJumper __instance, bool __state)
			{
				if (__state)
				{
					__instance.jumpInQueue = false;
					ClearJumpAssist(__instance.playerCharacter);
				}
				else
				{
					UpdateJumpAssist(__instance);
				}
			}
		}

		[HarmonyPatch(typeof(PlayerJumper), "OnJump")]
		private static class JumpAssistOnJumpPatch
		{
			[HarmonyPostfix]
			private static void Postfix(PlayerJumper __instance)
			{
				RecordOriginalJump(__instance);
			}
		}

		[HarmonyPatch(typeof(PlayerGestures), "Update")]
		private static class RaisedPropLockAccelerationPatch
		{
			[HarmonyPrefix]
			private static void Prefix(PlayerGestures __instance)
			{
				AccelerateRaisedPropLock(__instance);
			}
		}

		[HarmonyPatch(typeof(Player), "GetAxis", new Type[] { typeof(int) })]
		private static class AutoRunMoveAxisPatch
		{
			[HarmonyPostfix]
			private static void Postfix(Player __instance, int actionId, ref float __result)
			{
				if (ShouldOverrideAutoRunMoveAxis(__instance, actionId))
				{
					OverrideAutoRunMoveAxis(ref __result);
				}
			}
		}

		[HarmonyPatch(typeof(LocalizedText), "RefreshAll")]
		private static class AutoRunHudLocalizationPatch
		{
			[HarmonyPostfix]
			private static void Postfix()
			{
				//IL_0011: Unknown result type (might be due to invalid IL or missing references)
				LocalizationManager instance = LocalizationManager.instance;
				if (instance != null)
				{
					SetAutoRunHudText(instance.currentLanguage);
				}
			}
		}

		private const string HarmonyId = "mhz.bigwalk.enhancedcontrols";

		private const float RaisedPropLockProgressDelay = 0.5f;

		private const float RaisedPropLockTotalDuration = 2f;

		private const float OriginalRaisedPropLockProgressStartRatio = 0.4f;

		private const float JumpBufferDuration = 0.12f;

		private const float CoyoteTimeDuration = 0.1f;

		private const float AutoRunAnalogNeutralThreshold = 0.2f;

		private const float AutoRunAnalogCancelThreshold = 0.87f;

		private const string AutoRunHudTextEnglish = "AUTO RUN";

		private const string AutoRunHudTextSimplifiedChinese = "自动奔跑";

		private const string AutoRunHudTextTraditionalChinese = "自動奔跑";

		private static RaisedPropLockAccelerationState raisedPropLockAcceleration;

		private static JumpAssistState jumpAssist;

		private static AutoRunState autoRunState;

		private static int autoRunMoveXAction;

		private static int autoRunMoveYAction;

		private static GameObject autoRunHud;

		private static LocalizedText autoRunHudText;

		private static LocalizationLanguage? autoRunHudLanguage;

		private static float originalRaisedPropLockDuration;

		public static ConfigEntry<bool> EnableStandUpOptimization { get; private set; }

		public static ConfigEntry<bool> EnableRaisedPropLockAcceleration { get; private set; }

		public static ConfigEntry<bool> EnableJumpAssist { get; private set; }

		public static ConfigEntry<KeyCode> AutoRunKey { get; private set; }

		public static ConfigEntry<KeyCode> AutoRunGamepadKey { get; private set; }

		public override void Load()
		{
			EnableStandUpOptimization = ((BasePlugin)this).Config.Bind<bool>("低姿态快速退出 / Quick Low-Posture Exit", "Enabled", true, "坐下、滑铲或过渡时,按坐下、奔跑或跳跃立即起身。\nImmediately stand up with Sit, Sprint, or Jump while sitting, sliding, or transitioning.");
			EnableRaisedPropLockAcceleration = ((BasePlugin)this).Config.Bind<bool>("举物锁定提速 / Raised-Prop Lock Speed", "Enabled", true, "缩短举高道具时锁定姿态的长按时间。\nShortens the hold time to lock the pose while raising a prop.");
			EnableJumpAssist = ((BasePlugin)this).Config.Bind<bool>("跳跃优化 / Jump Assist", "Enabled", true, "加入跳跃缓冲和土狼时间。落地前按跳会自动起跳,走出平台边缘后短暂仍可跳跃。\nAdds jump buffering and coyote time. Queues a jump pressed before landing and allows jumping briefly after walking off a ledge.");
			AutoRunKey = ((BasePlugin)this).Config.Bind<KeyCode>("自动奔跑 / Auto Run", "Key", (KeyCode)120, "按下此键盘按键开始或结束自动奔跑。\nPress this keyboard key to start or stop Auto Run.");
			AutoRunGamepadKey = ((BasePlugin)this).Config.Bind<KeyCode>("自动奔跑 / Auto Run", "Gamepad Key", (KeyCode)332, "按下此手柄按键开始或结束自动奔跑。\nPress this gamepad key to start or stop Auto Run.");
			autoRunMoveXAction = Action.moveX;
			autoRunMoveYAction = Action.moveY;
			originalRaisedPropLockDuration = PlayerActionState.stickyDuration;
			((BasePlugin)this).Log.LogInfo((object)"Enhanced Controls loaded.");
			Harmony.CreateAndPatchAll(typeof(EnhancedControlsPlugin).Assembly, "mhz.bigwalk.enhancedcontrols");
		}

		private static bool ShouldStandUp(PlayerCharacter player, PlayerSitter sitter, int action)
		{
			return EnableStandUpOptimization.Value && player != null && ((NetworkBehaviour)player).isLocalPlayer && player.inputPlayer != null && sitter != null && sitter.isSittingLocal && player.inputPlayer.GetButtonDown(action);
		}

		private static bool TryStandUp(PlayerCharacter player, int action)
		{
			if (player == null)
			{
				return false;
			}
			PlayerSitter sitter = player.sitter;
			if (!ShouldStandUp(player, sitter, action))
			{
				return false;
			}
			sitter.SetSittingLocal(false);
			return true;
		}

		private static void AccelerateRaisedPropLock(PlayerGestures gestures)
		{
			if (!EnableRaisedPropLockAcceleration.Value)
			{
				raisedPropLockAcceleration = null;
				return;
			}
			PlayerCharacter val = ((gestures != null) ? gestures.playerCharacter : null);
			if (val == null || !((NetworkBehaviour)val).isLocalPlayer || val.inputPlayer == null)
			{
				return;
			}
			if ((!val.inputPlayer.GetButton(Action.waveLeft) && !val.inputPlayer.GetButton(Action.waveRight)) || !gestures.wasHoldingProp)
			{
				raisedPropLockAcceleration = null;
				return;
			}
			if (raisedPropLockAcceleration == null)
			{
				raisedPropLockAcceleration = new RaisedPropLockAccelerationState(Time.realtimeSinceStartup);
			}
			float elapsed = Time.realtimeSinceStartup - raisedPropLockAcceleration.beginTime;
			SetWaveTimeHeld(gestures, GetMappedLockTime(elapsed));
		}

		private static float GetMappedLockTime(float elapsed)
		{
			float num = originalRaisedPropLockDuration * 0.4f;
			if (elapsed <= 0.5f)
			{
				return Mathf.Lerp(0f, num, elapsed / 0.5f);
			}
			float num2 = 1.5f;
			float num3 = Mathf.Clamp01((elapsed - 0.5f) / num2);
			return Mathf.Lerp(num, originalRaisedPropLockDuration, num3);
		}

		private static void SetWaveTimeHeld(PlayerGestures gestures, float timeHeld)
		{
			//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_0011: 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_001e: 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_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_003f: Unknown result type (might be due to invalid IL or missing references)
			PlayerActionState leftArmWavingState = gestures.leftArmWavingState;
			leftArmWavingState.timeHeld = timeHeld;
			gestures.leftArmWavingState = leftArmWavingState;
			PlayerActionState rightArmWavingState = gestures.rightArmWavingState;
			rightArmWavingState.timeHeld = timeHeld;
			gestures.rightArmWavingState = rightArmWavingState;
			PlayerActionState sharedArmWavingState = gestures.sharedArmWavingState;
			sharedArmWavingState.timeHeld = timeHeld;
			gestures.sharedArmWavingState = sharedArmWavingState;
		}

		private static void UpdateJumpAssist(PlayerJumper jumper)
		{
			PlayerCharacter val = ((jumper != null) ? jumper.playerCharacter : null);
			if (!EnableJumpAssist.Value || val == null || !((NetworkBehaviour)val).isLocalPlayer || val.inputPlayer == null)
			{
				ClearJumpAssist(val);
				return;
			}
			PlayerGround ground = val.ground;
			if (ground != null)
			{
				PlayerSitter sitter = val.sitter;
				if (sitter == null || !sitter.isSittingLocal)
				{
					if (jumpAssist == null || (Object)(object)jumpAssist.player != (Object)(object)val)
					{
						jumpAssist = new JumpAssistState(val);
					}
					float realtimeSinceStartup = Time.realtimeSinceStartup;
					bool isOnJumpableGround = ground.isOnJumpableGround;
					jumpAssist.UpdateGroundState(realtimeSinceStartup, isOnJumpableGround);
					bool buttonDown = val.inputPlayer.GetButtonDown(Action.jump);
					if (isOnJumpableGround)
					{
						if (buttonDown)
						{
							jumpAssist.ClearBufferedJump();
						}
						else if (jumpAssist.TryConsumeBufferedJump(realtimeSinceStartup))
						{
							jumper.jumpInQueue = true;
						}
					}
					else if (buttonDown)
					{
						if (jumpAssist.CanCoyoteJump(realtimeSinceStartup))
						{
							jumpAssist.RecordJump();
							jumper.jumpInQueue = false;
							jumper.ForceAJump();
						}
						else
						{
							jumpAssist.BufferJump(realtimeSinceStartup);
						}
					}
					return;
				}
			}
			ClearJumpAssist(val);
		}

		private static void RecordOriginalJump(PlayerJumper jumper)
		{
			PlayerCharacter val = ((jumper != null) ? jumper.playerCharacter : null);
			if (val != null && ((NetworkBehaviour)val).isLocalPlayer && (Object)(object)jumpAssist?.player == (Object)(object)val)
			{
				jumpAssist.RecordJump();
			}
		}

		private static void ClearJumpAssist(PlayerCharacter player)
		{
			if (player == null || (Object)(object)jumpAssist?.player == (Object)(object)player)
			{
				jumpAssist = null;
			}
		}

		private static void UpdateAutoRun(PlayerSprinter sprinter)
		{
			//IL_00a0: 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)
			PlayerCharacter val = ((sprinter != null) ? sprinter.pc : null);
			if (val == null || !((NetworkBehaviour)val).isLocalPlayer || val.inputPlayer == null)
			{
				SetAutoRunHudVisible(isVisible: false);
				return;
			}
			if (autoRunState == null || (Object)(object)autoRunState.player != (Object)(object)val)
			{
				autoRunState = new AutoRunState(val, val.inputPlayer);
			}
			float physicalMoveAxisRaw = GetPhysicalMoveAxisRaw(val.inputPlayer, autoRunMoveYAction);
			float physicalMoveAxisRaw2 = GetPhysicalMoveAxisRaw(val.inputPlayer, autoRunMoveXAction);
			bool flag = HasPhysicalMoveInput(physicalMoveAxisRaw2, physicalMoveAxisRaw);
			if (Input.GetKeyDown(AutoRunKey.Value) || Input.GetKeyDown(AutoRunGamepadKey.Value))
			{
				if (autoRunState.isActive)
				{
					autoRunState.StopAutoRun(flag, physicalMoveAxisRaw);
				}
				else
				{
					autoRunState.StartAutoRun(physicalMoveAxisRaw);
					sprinter.isSprinting = true;
				}
				FinishAutoRunUpdate(sprinter, autoRunState, flag, physicalMoveAxisRaw);
				return;
			}
			if (!autoRunState.isActive)
			{
				FinishAutoRunUpdate(sprinter, autoRunState, flag, physicalMoveAxisRaw);
				return;
			}
			if (autoRunState.waitingForVerticalRelease)
			{
				if (Mathf.Abs(physicalMoveAxisRaw) <= 0.2f)
				{
					autoRunState.waitingForVerticalRelease = false;
				}
			}
			else if (Mathf.Abs(physicalMoveAxisRaw) >= 0.87f)
			{
				autoRunState.StopAutoRun(flag, physicalMoveAxisRaw);
			}
			FinishAutoRunUpdate(sprinter, autoRunState, flag, physicalMoveAxisRaw);
		}

		private static void FinishAutoRunUpdate(PlayerSprinter sprinter, AutoRunState state, bool hasPhysicalMoveInput, float rawMoveY)
		{
			state.UpdateMoveAxis(rawMoveY, Time.deltaTime);
			if (state.isActive)
			{
				sprinter.isSprinting = true;
			}
			else
			{
				KeepSprintingWhileMoving(sprinter, state, hasPhysicalMoveInput);
			}
			SetAutoRunHudVisible(state.isActive);
		}

		private static float GetPhysicalMoveAxisRaw(Player inputPlayer, int actionId)
		{
			return inputPlayer.GetAxisRaw(actionId);
		}

		private static bool HasPhysicalMoveInput(float rawMoveX, float rawMoveY)
		{
			return Mathf.Abs(rawMoveX) > 0.2f || Mathf.Abs(rawMoveY) > 0.2f;
		}

		private static void KeepSprintingWhileMoving(PlayerSprinter sprinter, AutoRunState state, bool hasPhysicalMoveInput)
		{
			if (state.keepSprintingWhileMoving)
			{
				if (hasPhysicalMoveInput || state.isControllingMoveAxis)
				{
					sprinter.isSprinting = true;
				}
				else
				{
					state.keepSprintingWhileMoving = false;
				}
			}
		}

		private static void SetAutoRunHudVisible(bool isVisible)
		{
			if (!isVisible)
			{
				if ((Object)(object)autoRunHud != (Object)null && autoRunHud.activeSelf)
				{
					autoRunHud.SetActive(false);
				}
				return;
			}
			if ((Object)(object)autoRunHud == (Object)null)
			{
				CreateAutoRunHud();
			}
			if ((Object)(object)autoRunHud != (Object)null && !autoRunHud.activeSelf)
			{
				autoRunHud.SetActive(true);
			}
		}

		private static void CreateAutoRunHud()
		{
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			WorldMenuManager instance = WorldMenuManager.instance;
			object obj;
			if (instance == null)
			{
				obj = null;
			}
			else
			{
				TeachingHud teachingHud = instance.teachingHud;
				obj = ((teachingHud != null) ? teachingHud.localizedText : null);
			}
			LocalizedText val = (LocalizedText)obj;
			Transform val2 = ((instance != null) ? instance.hideableHud : null);
			if (val != null && val2 != null)
			{
				LocalizedText val3 = Object.Instantiate<LocalizedText>(val, val2);
				val3.noGlyphs = true;
				TMP_Text textElement = val3.textElement;
				if (textElement != null)
				{
					Color color = ((Graphic)textElement).color;
					color.a = 1f;
					((Graphic)textElement).color = color;
				}
				CanvasGroup component = ((Component)val3).GetComponent<CanvasGroup>();
				if (component != null)
				{
					component.alpha = 1f;
				}
				RectTransform component2 = ((Component)val3).GetComponent<RectTransform>();
				if (component2 != null)
				{
					component2.anchorMin = new Vector2(0f, 1f);
					component2.anchorMax = new Vector2(0f, 1f);
					component2.pivot = new Vector2(0f, 1f);
					component2.anchoredPosition = new Vector2(28f, -28f);
					component2.sizeDelta = new Vector2(250f, 42f);
				}
				autoRunHud = ((Component)val3).gameObject;
				autoRunHudText = val3;
				autoRunHudLanguage = null;
				LocalizationManager instance2 = LocalizationManager.instance;
				SetAutoRunHudText((LocalizationLanguage)((instance2 == null) ? 1 : ((int)instance2.currentLanguage)));
			}
		}

		private static void SetAutoRunHudText(LocalizationLanguage language)
		{
			//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_0019: 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_0038: 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)
			if (autoRunHud != null && autoRunHudText != null && autoRunHudLanguage != (LocalizationLanguage?)language)
			{
				autoRunHudText.ChangeValue(GetAutoRunHudText(language));
				autoRunHudLanguage = language;
			}
		}

		private static string GetAutoRunHudText(LocalizationLanguage language)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			if (1 == 0)
			{
			}
			string result = (((int)language == 6) ? "自动奔跑" : (((int)language != 15) ? "AUTO RUN" : "自動奔跑"));
			if (1 == 0)
			{
			}
			return result;
		}

		private static bool ShouldOverrideAutoRunMoveAxis(Player inputPlayer, int actionId)
		{
			int result;
			if (actionId == autoRunMoveYAction)
			{
				AutoRunState obj = autoRunState;
				if (obj != null && obj.isControllingMoveAxis)
				{
					result = ((autoRunState.inputPlayer == inputPlayer) ? 1 : 0);
					goto IL_002c;
				}
			}
			result = 0;
			goto IL_002c;
			IL_002c:
			return (byte)result != 0;
		}

		private static void OverrideAutoRunMoveAxis(ref float value)
		{
			autoRunState.RecordNativeMoveAxis(value);
			value = autoRunState.virtualMoveY;
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}