Decompiled source of DSPAutoPilot v0.1.1

DSPAutoPilot.dll

Decompiled 4 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using UnityEngine;
using tanu.CruiseAssist;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("AutoPilot")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AutoPilot")]
[assembly: AssemblyCopyright("Copyright ©  2022")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("3c5eb20b-5191-447a-96ae-5d7860bc3631")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace tanu.AutoPilot;

internal class AutoPilotConfigManager : ConfigManager
{
	internal AutoPilotConfigManager(ConfigFile Config)
		: base(Config)
	{
	}

	protected override void CheckConfigImplements(Step step)
	{
		bool flag = false;
		if (step == Step.AWAKE)
		{
			ConfigEntry<string> val = ConfigManager.Bind("Base", "ModVersion", "0.0.4", "Don't change.");
			val.Value = "0.0.4";
			flag = true;
		}
		if (step == Step.AWAKE || step == Step.GAME_MAIN_BEGIN)
		{
			AutoPilotDebugUI.Show = ConfigManager.Bind("Debug", "DebugWindowShow", defaultValue: false).Value;
			AutoPilotPlugin.Conf.MinEnergyPer = ConfigManager.Bind("Setting", "MinEnergyPer", 20).Value;
			AutoPilotPlugin.Conf.MaxSpeed = ConfigManager.Bind("Setting", "MaxSpeed", 2000).Value;
			AutoPilotPlugin.Conf.WarpMinRangeAU = ConfigManager.Bind("Setting", "WarpMinRangeAU", 2).Value;
			AutoPilotPlugin.Conf.SpeedToWarp = ConfigManager.Bind("Setting", "WarpSpeed", 1200).Value;
			AutoPilotPlugin.Conf.LocalWarpFlag = ConfigManager.Bind("Setting", "LocalWarp", defaultValue: false).Value;
			AutoPilotPlugin.Conf.AutoStartFlag = ConfigManager.Bind("Setting", "AutoStart", defaultValue: true).Value;
			AutoPilotPlugin.Conf.MainWindowJoinFlag = ConfigManager.Bind("Setting", "MainWindowJoin", defaultValue: true).Value;
			for (int i = 0; i < 2; i++)
			{
				((Rect)(ref AutoPilotMainUI.Rect[i])).x = ConfigManager.Bind("State", $"MainWindow{i}Left", 100).Value;
				((Rect)(ref AutoPilotMainUI.Rect[i])).y = ConfigManager.Bind("State", $"MainWindow{i}Top", 100).Value;
				((Rect)(ref AutoPilotConfigUI.Rect[i])).x = ConfigManager.Bind("State", $"ConfigWindow{i}Left", 100).Value;
				((Rect)(ref AutoPilotConfigUI.Rect[i])).y = ConfigManager.Bind("State", $"ConfigWindow{i}Top", 100).Value;
			}
			((Rect)(ref AutoPilotDebugUI.Rect)).x = ConfigManager.Bind("State", "DebugWindowLeft", 100).Value;
			((Rect)(ref AutoPilotDebugUI.Rect)).y = ConfigManager.Bind("State", "DebugWindowTop", 100).Value;
		}
		else if (step == Step.STATE)
		{
			LogManager.LogInfo("check state.");
			flag |= ConfigManager.UpdateEntry("Setting", "MinEnergyPer", AutoPilotPlugin.Conf.MinEnergyPer);
			flag |= ConfigManager.UpdateEntry("Setting", "MaxSpeed", AutoPilotPlugin.Conf.MaxSpeed);
			flag |= ConfigManager.UpdateEntry("Setting", "WarpMinRangeAU", AutoPilotPlugin.Conf.WarpMinRangeAU);
			flag |= ConfigManager.UpdateEntry("Setting", "WarpSpeed", AutoPilotPlugin.Conf.SpeedToWarp);
			flag |= ConfigManager.UpdateEntry("Setting", "LocalWarp", AutoPilotPlugin.Conf.LocalWarpFlag);
			flag |= ConfigManager.UpdateEntry("Setting", "AutoStart", AutoPilotPlugin.Conf.AutoStartFlag);
			flag |= ConfigManager.UpdateEntry("Setting", "MainWindowJoin", AutoPilotPlugin.Conf.MainWindowJoinFlag);
			for (int j = 0; j < 2; j++)
			{
				flag |= ConfigManager.UpdateEntry("State", $"MainWindow{j}Left", (int)((Rect)(ref AutoPilotMainUI.Rect[j])).x);
				flag |= ConfigManager.UpdateEntry("State", $"MainWindow{j}Top", (int)((Rect)(ref AutoPilotMainUI.Rect[j])).y);
				flag |= ConfigManager.UpdateEntry("State", $"ConfigWindow{j}Left", (int)((Rect)(ref AutoPilotConfigUI.Rect[j])).x);
				flag |= ConfigManager.UpdateEntry("State", $"ConfigWindow{j}Top", (int)((Rect)(ref AutoPilotConfigUI.Rect[j])).y);
			}
			flag |= ConfigManager.UpdateEntry("State", "DebugWindowLeft", (int)((Rect)(ref AutoPilotDebugUI.Rect)).x);
			flag |= ConfigManager.UpdateEntry("State", "DebugWindowTop", (int)((Rect)(ref AutoPilotDebugUI.Rect)).y);
			AutoPilotMainUI.NextCheckGameTick = long.MaxValue;
		}
		if (flag)
		{
			ConfigManager.Save();
		}
	}
}
internal class AutoPilotDebugUI
{
	public static bool Show = false;

	public static Rect Rect = new Rect(0f, 0f, 400f, 400f);

	private static float lastCheckWindowLeft = float.MinValue;

	private static float lastCheckWindowTop = float.MinValue;

	private static Vector2 scrollPos = Vector2.zero;

	public static void OnGUI()
	{
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Expected O, but got Unknown
		//IL_001f: 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_0040: Expected O, but got Unknown
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		GUIStyle val = new GUIStyle(GUI.skin.window);
		val.fontSize = 11;
		Rect = GUILayout.Window(99031293, Rect, new WindowFunction(WindowFunction), "AutoPilot - Debug", val, Array.Empty<GUILayoutOption>());
		float num = CruiseAssistMainUI.Scale / 100f;
		if ((float)Screen.width < ((Rect)(ref Rect)).xMax)
		{
			((Rect)(ref Rect)).x = (float)Screen.width - ((Rect)(ref Rect)).width;
		}
		if (((Rect)(ref Rect)).x < 0f)
		{
			((Rect)(ref Rect)).x = 0f;
		}
		if ((float)Screen.height < ((Rect)(ref Rect)).yMax)
		{
			((Rect)(ref Rect)).y = (float)Screen.height - ((Rect)(ref Rect)).height;
		}
		if (((Rect)(ref Rect)).y < 0f)
		{
			((Rect)(ref Rect)).y = 0f;
		}
		if (lastCheckWindowLeft != float.MinValue && (((Rect)(ref Rect)).x != lastCheckWindowLeft || ((Rect)(ref Rect)).y != lastCheckWindowTop))
		{
			AutoPilotMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		lastCheckWindowLeft = ((Rect)(ref Rect)).x;
		lastCheckWindowTop = ((Rect)(ref Rect)).y;
		if (AutoPilotMainUI.NextCheckGameTick <= GameMain.gameTick)
		{
			ConfigManager.CheckConfig(ConfigManager.Step.STATE);
		}
	}

	public static void WindowFunction(int windowId)
	{
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Expected O, but got Unknown
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: 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)
		//IL_0043: 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_0241: Unknown result type (might be due to invalid IL or missing references)
		//IL_0246: Unknown result type (might be due to invalid IL or missing references)
		//IL_024d: Unknown result type (might be due to invalid IL or missing references)
		//IL_026f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0276: Expected O, but got Unknown
		//IL_008a: Unknown result type (might be due to invalid IL or missing references)
		//IL_008f: 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_0095: Unknown result type (might be due to invalid IL or missing references)
		//IL_009a: 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_00aa: 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)
		//IL_00b6: 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_00c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00de: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e8: 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_0154: Unknown result type (might be due to invalid IL or missing references)
		//IL_0156: Unknown result type (might be due to invalid IL or missing references)
		//IL_015b: 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_02ce: Unknown result type (might be due to invalid IL or missing references)
		GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
		GUIStyle val = new GUIStyle(GUI.skin.label);
		val.fontSize = 12;
		scrollPos = GUILayout.BeginScrollView(scrollPos, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.mainPlayer.uPosition={GameMain.mainPlayer.uPosition}", val, Array.Empty<GUILayoutOption>());
		if (GameMain.localPlanet != null && CruiseAssistPlugin.TargetUPos != VectorLF3.zero)
		{
			Player mainPlayer = GameMain.mainPlayer;
			VectorLF3 targetUPos = CruiseAssistPlugin.TargetUPos;
			VectorLF3 val2 = targetUPos - mainPlayer.uPosition;
			double magnitude = ((VectorLF3)(ref val2)).magnitude;
			val2 = targetUPos - GameMain.localPlanet.uPosition;
			double magnitude2 = ((VectorLF3)(ref val2)).magnitude;
			VectorLF3 val3 = mainPlayer.uPosition - GameMain.localPlanet.uPosition;
			VectorLF3 val4 = CruiseAssistPlugin.TargetUPos - GameMain.localPlanet.uPosition;
			GUILayout.Label("range1=" + RangeToString(magnitude), val, Array.Empty<GUILayoutOption>());
			GUILayout.Label("range2=" + RangeToString(magnitude2), val, Array.Empty<GUILayoutOption>());
			GUILayout.Label($"range1>range2={magnitude > magnitude2}", val, Array.Empty<GUILayoutOption>());
			GUILayout.Label($"angle={Vector3.Angle(VectorLF3.op_Implicit(val3), VectorLF3.op_Implicit(val4))}", val, Array.Empty<GUILayoutOption>());
		}
		Mecha mecha = GameMain.mainPlayer.mecha;
		GUILayout.Label($"mecha.coreEnergy={mecha.coreEnergy}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"mecha.coreEnergyCap={mecha.coreEnergyCap}", val, Array.Empty<GUILayoutOption>());
		double num = mecha.coreEnergy / mecha.coreEnergyCap * 100.0;
		GUILayout.Label($"energyPer={num}", val, Array.Empty<GUILayoutOption>());
		double magnitude3 = ((VectorLF3)(ref GameMain.mainPlayer.controller.actionSail.visual_uvel)).magnitude;
		GUILayout.Label("spped=" + RangeToString(magnitude3), val, Array.Empty<GUILayoutOption>());
		EMovementState movementStateInFrame = GameMain.mainPlayer.controller.movementStateInFrame;
		GUILayout.Label($"movementStateInFrame={movementStateInFrame}", val, Array.Empty<GUILayoutOption>());
		GUIStyle val5 = new GUIStyle(GUI.skin.toggle);
		val5.fixedHeight = 20f;
		val5.fontSize = 12;
		val5.alignment = (TextAnchor)6;
		GUI.changed = false;
		AutoPilotPlugin.Conf.IgnoreGravityFlag = GUILayout.Toggle(AutoPilotPlugin.Conf.IgnoreGravityFlag, "Ignore gravity.", val5, Array.Empty<GUILayoutOption>());
		if (GUI.changed)
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
		}
		GUILayout.EndScrollView();
		GUILayout.EndVertical();
		GUI.DragWindow();
	}

	public static string RangeToString(double range)
	{
		if (range < 10000.0)
		{
			return (int)(range + 0.5) + "m ";
		}
		if (range < 600000.0)
		{
			return (range / 40000.0).ToString("0.00") + "AU";
		}
		return (range / 2400000.0).ToString("0.00") + "Ly";
	}
}
internal class AutoPilotExtension : CruiseAssistExtensionAPI
{
	public void CheckConfig(string step)
	{
		EnumUtils.TryParse<ConfigManager.Step>(step, out var result);
		ConfigManager.CheckConfig(result);
	}

	public void SetTargetAstroId(int astroId)
	{
		AutoPilotPlugin.State = ((!AutoPilotPlugin.Conf.AutoStartFlag) ? AutoPilotState.INACTIVE : AutoPilotState.ACTIVE);
		AutoPilotPlugin.InputSailSpeedUp = false;
	}

	public bool OperateWalk(PlayerMove_Walk __instance)
	{
		//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_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: 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)
		if (AutoPilotPlugin.State == AutoPilotState.INACTIVE)
		{
			return false;
		}
		Player player = ((PlayerAction)__instance).player;
		Mecha mecha = player.mecha;
		AutoPilotPlugin.EnergyPer = mecha.coreEnergy / mecha.coreEnergyCap * 100.0;
		AutoPilotPlugin.Speed = ((VectorLF3)(ref player.controller.actionSail.visual_uvel)).magnitude;
		AutoPilotPlugin.WarperCount = mecha.warpStorage.GetItemCount(1210);
		AutoPilotPlugin.LeavePlanet = true;
		AutoPilotPlugin.SpeedUp = false;
		AutoPilotPlugin.InputSailSpeedUp = false;
		if (AutoPilotPlugin.Conf.IgnoreGravityFlag)
		{
			player.controller.universalGravity = VectorLF3.zero;
			player.controller.localGravity = VectorLF3.op_Implicit(VectorLF3.zero);
		}
		((PlayerAction)__instance).controller.input0.z = 1f;
		return true;
	}

	public bool OperateDrift(PlayerMove_Drift __instance)
	{
		//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_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: 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)
		if (AutoPilotPlugin.State == AutoPilotState.INACTIVE)
		{
			return false;
		}
		Player player = ((PlayerAction)__instance).player;
		Mecha mecha = player.mecha;
		AutoPilotPlugin.EnergyPer = mecha.coreEnergy / mecha.coreEnergyCap * 100.0;
		AutoPilotPlugin.Speed = ((VectorLF3)(ref player.controller.actionSail.visual_uvel)).magnitude;
		AutoPilotPlugin.WarperCount = mecha.warpStorage.GetItemCount(1210);
		AutoPilotPlugin.LeavePlanet = true;
		AutoPilotPlugin.SpeedUp = false;
		AutoPilotPlugin.InputSailSpeedUp = false;
		if (AutoPilotPlugin.Conf.IgnoreGravityFlag)
		{
			player.controller.universalGravity = VectorLF3.zero;
			player.controller.localGravity = VectorLF3.op_Implicit(VectorLF3.zero);
		}
		((PlayerAction)__instance).controller.input0.z = 1f;
		return true;
	}

	public bool OperateFly(PlayerMove_Fly __instance)
	{
		//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_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: 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)
		if (AutoPilotPlugin.State == AutoPilotState.INACTIVE)
		{
			return false;
		}
		Player player = ((PlayerAction)__instance).player;
		Mecha mecha = player.mecha;
		AutoPilotPlugin.EnergyPer = mecha.coreEnergy / mecha.coreEnergyCap * 100.0;
		AutoPilotPlugin.Speed = ((VectorLF3)(ref player.controller.actionSail.visual_uvel)).magnitude;
		AutoPilotPlugin.WarperCount = mecha.warpStorage.GetItemCount(1210);
		AutoPilotPlugin.LeavePlanet = true;
		AutoPilotPlugin.SpeedUp = false;
		AutoPilotPlugin.InputSailSpeedUp = false;
		if (AutoPilotPlugin.Conf.IgnoreGravityFlag)
		{
			player.controller.universalGravity = VectorLF3.zero;
			player.controller.localGravity = VectorLF3.op_Implicit(VectorLF3.zero);
		}
		PlayerController controller = ((PlayerAction)__instance).controller;
		controller.input0.y = controller.input0.y + 1f;
		PlayerController controller2 = ((PlayerAction)__instance).controller;
		controller2.input1.y = controller2.input1.y + 1f;
		return true;
	}

	public bool OperateSail(PlayerMove_Sail __instance)
	{
		//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00de: 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_00ee: 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_020f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0219: Unknown result type (might be due to invalid IL or missing references)
		//IL_021e: 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_0277: Unknown result type (might be due to invalid IL or missing references)
		//IL_0281: Unknown result type (might be due to invalid IL or missing references)
		//IL_0286: Unknown result type (might be due to invalid IL or missing references)
		//IL_028b: Unknown result type (might be due to invalid IL or missing references)
		//IL_028d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0297: Unknown result type (might be due to invalid IL or missing references)
		//IL_029c: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_02aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_02fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0331: Unknown result type (might be due to invalid IL or missing references)
		//IL_0336: Unknown result type (might be due to invalid IL or missing references)
		//IL_033d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0344: Unknown result type (might be due to invalid IL or missing references)
		//IL_0349: Unknown result type (might be due to invalid IL or missing references)
		//IL_0350: Unknown result type (might be due to invalid IL or missing references)
		//IL_0355: Unknown result type (might be due to invalid IL or missing references)
		//IL_035a: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
		if (AutoPilotPlugin.State == AutoPilotState.INACTIVE)
		{
			return false;
		}
		Player player = ((PlayerAction)__instance).player;
		Mecha mecha = player.mecha;
		AutoPilotPlugin.EnergyPer = mecha.coreEnergy / mecha.coreEnergyCap * 100.0;
		AutoPilotPlugin.Speed = ((VectorLF3)(ref player.controller.actionSail.visual_uvel)).magnitude;
		AutoPilotPlugin.WarperCount = mecha.warpStorage.GetItemCount(1210);
		AutoPilotPlugin.LeavePlanet = false;
		AutoPilotPlugin.SpeedUp = false;
		AutoPilotPlugin.InputSailSpeedUp = false;
		if (player.warping)
		{
			return false;
		}
		if (AutoPilotPlugin.EnergyPer < (double)AutoPilotPlugin.Conf.MinEnergyPer)
		{
			return false;
		}
		if (AutoPilotPlugin.Conf.IgnoreGravityFlag)
		{
			player.controller.universalGravity = VectorLF3.zero;
			player.controller.localGravity = VectorLF3.op_Implicit(VectorLF3.zero);
		}
		if (AutoPilotPlugin.Speed < (double)AutoPilotPlugin.Conf.MaxSpeed)
		{
			AutoPilotPlugin.InputSailSpeedUp = true;
			AutoPilotPlugin.SpeedUp = true;
		}
		if (GameMain.localPlanet == null)
		{
			if ((AutoPilotPlugin.Conf.LocalWarpFlag || GameMain.localStar == null || CruiseAssistPlugin.TargetStar.id != GameMain.localStar.id) && (double)AutoPilotPlugin.Conf.WarpMinRangeAU * 40000.0 <= CruiseAssistPlugin.TargetRange && (double)AutoPilotPlugin.Conf.SpeedToWarp <= AutoPilotPlugin.Speed && 1 <= AutoPilotPlugin.WarperCount && mecha.coreEnergy > mecha.warpStartPowerPerSpeed * (double)mecha.maxWarpSpeed && mecha.UseWarper())
			{
				player.warpCommand = true;
				VFAudio.Create("warp-begin", player.transform, Vector3.zero, true, 0, -1, -1L);
			}
			return false;
		}
		VectorLF3 val = player.uPosition - GameMain.localPlanet.uPosition;
		if (120.0 < AutoPilotPlugin.Speed && (double)Math.Max(GameMain.localPlanet.realRadius, 800f) < ((VectorLF3)(ref val)).magnitude - (double)GameMain.localPlanet.realRadius)
		{
			return false;
		}
		VectorLF3 val2 = player.uPosition - GameMain.localPlanet.uPosition;
		VectorLF3 val3 = CruiseAssistPlugin.TargetUPos - GameMain.localPlanet.uPosition;
		VectorLF3 val4;
		if (Vector3.Angle(VectorLF3.op_Implicit(val2), VectorLF3.op_Implicit(val3)) > 90f)
		{
			val4 = val;
			AutoPilotPlugin.LeavePlanet = true;
		}
		else
		{
			VectorLF3 val5 = CruiseAssistPlugin.TargetUPos - player.uPosition;
			val4 = val5;
		}
		float num = Vector3.Angle(VectorLF3.op_Implicit(val4), VectorLF3.op_Implicit(player.uVelocity));
		float num2 = 1.6f / Mathf.Max(10f, num);
		double num3 = Math.Min(AutoPilotPlugin.Speed, 120.0);
		player.uVelocity = VectorLF3.op_Implicit(Vector3.Slerp(VectorLF3.op_Implicit(player.uVelocity), VectorLF3.op_Implicit(((VectorLF3)(ref val4)).normalized * num3), num2));
		return true;
	}

	public void SetInactive()
	{
		AutoPilotPlugin.State = AutoPilotState.INACTIVE;
		AutoPilotPlugin.InputSailSpeedUp = false;
	}

	public void CancelOperate()
	{
		AutoPilotPlugin.State = AutoPilotState.INACTIVE;
		AutoPilotPlugin.InputSailSpeedUp = false;
	}

	public void OnGUI()
	{
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_008e: 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)
		UIGame uiGame = UIRoot.instance.uiGame;
		float scale = CruiseAssistMainUI.Scale / 100f;
		AutoPilotMainUI.OnGUI();
		if (AutoPilotConfigUI.Show[CruiseAssistMainUI.wIdx])
		{
			AutoPilotConfigUI.OnGUI();
		}
		if (AutoPilotDebugUI.Show)
		{
			AutoPilotDebugUI.OnGUI();
		}
		bool flag = ResetInput(AutoPilotMainUI.Rect[CruiseAssistMainUI.wIdx], scale);
		if (!flag && AutoPilotConfigUI.Show[CruiseAssistMainUI.wIdx])
		{
			flag = ResetInput(AutoPilotConfigUI.Rect[CruiseAssistMainUI.wIdx], scale);
		}
		if (!flag && AutoPilotDebugUI.Show)
		{
			flag = ResetInput(AutoPilotDebugUI.Rect, scale);
		}
	}

	private bool ResetInput(Rect rect, float scale)
	{
		//IL_0029: 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_0092: Unknown result type (might be due to invalid IL or missing references)
		float num = ((Rect)(ref rect)).xMin * scale;
		float num2 = ((Rect)(ref rect)).xMax * scale;
		float num3 = ((Rect)(ref rect)).yMin * scale;
		float num4 = ((Rect)(ref rect)).yMax * scale;
		float x = Input.mousePosition.x;
		float num5 = (float)Screen.height - Input.mousePosition.y;
		if (num <= x && x <= num2 && num3 <= num5 && num5 <= num4)
		{
			int[] source = new int[3] { 0, 1, 2 };
			if (((IEnumerable<int>)source).Any((Func<int, bool>)Input.GetMouseButton) || Input.mouseScrollDelta.y != 0f)
			{
				Input.ResetInputAxes();
				return true;
			}
		}
		return false;
	}
}
internal class AutoPilotMainUI
{
	private static int wIdx = 0;

	public const float WindowWidthFull = 398f;

	public const float WindowHeightFull = 150f;

	public const float WindowWidthMini = 288f;

	public const float WindowHeightMini = 70f;

	public static Rect[] Rect = (Rect[])(object)new Rect[2]
	{
		new Rect(0f, 0f, 398f, 150f),
		new Rect(0f, 0f, 398f, 150f)
	};

	private static float[] lastCheckWindowLeft = new float[2]
	{
		float.MinValue,
		float.MinValue
	};

	private static float[] lastCheckWindowTop = new float[2]
	{
		float.MinValue,
		float.MinValue
	};

	public static long NextCheckGameTick = long.MaxValue;

	public static void OnGUI()
	{
		//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_0011: 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_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Invalid comparison between Unknown and I4
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Invalid comparison between Unknown and I4
		//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c0: Expected O, but got Unknown
		//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_0103: Expected O, but got Unknown
		//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0103: Unknown result type (might be due to invalid IL or missing references)
		wIdx = CruiseAssistMainUI.wIdx;
		CruiseAssistMainUIViewMode viewMode = CruiseAssistMainUI.ViewMode;
		CruiseAssistMainUIViewMode val = viewMode;
		if ((int)val > 0)
		{
			if ((int)val == 1)
			{
				((Rect)(ref Rect[wIdx])).width = ((Rect)(ref CruiseAssistMainUI.Rect[wIdx])).width;
				((Rect)(ref Rect[wIdx])).height = 70f;
			}
		}
		else
		{
			((Rect)(ref Rect[wIdx])).width = ((Rect)(ref CruiseAssistMainUI.Rect[wIdx])).width;
			((Rect)(ref Rect[wIdx])).height = 150f;
		}
		GUIStyle val2 = new GUIStyle(CruiseAssistMainUI.WindowStyle);
		val2.fontSize = 11;
		Rect[wIdx] = GUILayout.Window(99031291, Rect[wIdx], new WindowFunction(WindowFunction), "AutoPilot", val2, Array.Empty<GUILayoutOption>());
		float num = CruiseAssistMainUI.Scale / 100f;
		if (AutoPilotPlugin.Conf.MainWindowJoinFlag)
		{
			((Rect)(ref Rect[wIdx])).x = ((Rect)(ref CruiseAssistMainUI.Rect[CruiseAssistMainUI.wIdx])).x;
			((Rect)(ref Rect[wIdx])).y = ((Rect)(ref CruiseAssistMainUI.Rect[CruiseAssistMainUI.wIdx])).yMax;
		}
		if ((float)Screen.width / num < ((Rect)(ref Rect[wIdx])).xMax)
		{
			((Rect)(ref Rect[wIdx])).x = (float)Screen.width / num - ((Rect)(ref Rect[wIdx])).width;
		}
		if (((Rect)(ref Rect[wIdx])).x < 0f)
		{
			((Rect)(ref Rect[wIdx])).x = 0f;
		}
		if ((float)Screen.height / num < ((Rect)(ref Rect[wIdx])).yMax)
		{
			((Rect)(ref Rect[wIdx])).y = (float)Screen.height / num - ((Rect)(ref Rect[wIdx])).height;
		}
		if (((Rect)(ref Rect[wIdx])).y < 0f)
		{
			((Rect)(ref Rect[wIdx])).y = 0f;
		}
		if (lastCheckWindowLeft[wIdx] != float.MinValue && (((Rect)(ref Rect[wIdx])).x != lastCheckWindowLeft[wIdx] || ((Rect)(ref Rect[wIdx])).y != lastCheckWindowTop[wIdx]))
		{
			NextCheckGameTick = GameMain.gameTick + 300;
		}
		lastCheckWindowLeft[wIdx] = ((Rect)(ref Rect[wIdx])).x;
		lastCheckWindowTop[wIdx] = ((Rect)(ref Rect[wIdx])).y;
		if (NextCheckGameTick <= GameMain.gameTick)
		{
			ConfigManager.CheckConfig(ConfigManager.Step.STATE);
		}
	}

	public static void WindowFunction(int windowId)
	{
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Invalid comparison between Unknown and I4
		//IL_02b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b7: Expected O, but got Unknown
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Expected O, but got Unknown
		//IL_030c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0334: Unknown result type (might be due to invalid IL or missing references)
		//IL_033a: Expected O, but got Unknown
		//IL_0392: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_0432: 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_009e: Unknown result type (might be due to invalid IL or missing references)
		//IL_048c: Unknown result type (might be due to invalid IL or missing references)
		//IL_018c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0185: Unknown result type (might be due to invalid IL or missing references)
		//IL_017e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0201: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fa: 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_025e: Unknown result type (might be due to invalid IL or missing references)
		GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
		if ((int)CruiseAssistMainUI.ViewMode == 0)
		{
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			GUIStyle val = new GUIStyle(GUI.skin.label);
			val.fontSize = 12;
			GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
			string text = ((AutoPilotPlugin.State == AutoPilotState.INACTIVE) ? "---" : (((double)AutoPilotPlugin.Conf.MinEnergyPer < AutoPilotPlugin.EnergyPer) ? "OK" : "NG"));
			val.normal.textColor = ((text == "OK") ? Color.cyan : ((text == "NG") ? Color.red : Color.white));
			GUILayout.Label("Energy : " + text, val, Array.Empty<GUILayoutOption>());
			string text2 = ((AutoPilotPlugin.State == AutoPilotState.INACTIVE) ? "---" : ((CruiseAssistPlugin.TargetStar == null) ? "---" : (GameMain.mainPlayer.warping ? "---" : ((!AutoPilotPlugin.Conf.LocalWarpFlag && GameMain.localStar != null && CruiseAssistPlugin.TargetStar.id == GameMain.localStar.id) ? "---" : ((CruiseAssistPlugin.TargetRange < (double)(AutoPilotPlugin.Conf.WarpMinRangeAU * 40000)) ? "---" : ((AutoPilotPlugin.WarperCount < 1) ? "NG" : "OK"))))));
			val.normal.textColor = ((text2 == "OK") ? Color.cyan : ((text2 == "NG") ? Color.red : Color.white));
			GUILayout.Label("Warper : " + text2, val, Array.Empty<GUILayoutOption>());
			GUILayout.EndVertical();
			GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
			string text3 = ((AutoPilotPlugin.State == AutoPilotState.INACTIVE) ? "---" : (AutoPilotPlugin.LeavePlanet ? "ON" : "OFF"));
			val.normal.textColor = ((text3 == "ON") ? Color.cyan : Color.white);
			GUILayout.Label("Leave Planet : " + text3, val, Array.Empty<GUILayoutOption>());
			string text4 = ((AutoPilotPlugin.State == AutoPilotState.INACTIVE) ? "---" : (AutoPilotPlugin.SpeedUp ? "ON" : "OFF"));
			val.normal.textColor = ((text4 == "ON") ? Color.cyan : Color.white);
			GUILayout.Label("Speed UP : " + text4, val, Array.Empty<GUILayoutOption>());
			GUILayout.EndVertical();
			GUILayout.EndHorizontal();
			GUILayout.FlexibleSpace();
		}
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		GUIStyle val2 = new GUIStyle(GUI.skin.label);
		val2.fixedWidth = 160f;
		val2.fixedHeight = 32f;
		val2.fontSize = 14;
		val2.alignment = (TextAnchor)3;
		if (AutoPilotPlugin.State == AutoPilotState.INACTIVE)
		{
			GUILayout.Label("Auto Pilot Inactive.", val2, Array.Empty<GUILayoutOption>());
		}
		else
		{
			val2.normal.textColor = Color.cyan;
			GUILayout.Label("Auto Pilot Active.", val2, Array.Empty<GUILayoutOption>());
		}
		GUILayout.FlexibleSpace();
		GUIStyle val3 = new GUIStyle(CruiseAssistMainUI.BaseButtonStyle);
		val3.fixedWidth = 50f;
		val3.fixedHeight = 18f;
		val3.fontSize = 11;
		val3.alignment = (TextAnchor)4;
		GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
		if (GUILayout.Button("Config", val3, Array.Empty<GUILayoutOption>()))
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			bool[] show = AutoPilotConfigUI.Show;
			int num = wIdx;
			show[num] = !show[num];
			if (AutoPilotConfigUI.Show[wIdx])
			{
				AutoPilotConfigUI.TempMinEnergyPer = AutoPilotPlugin.Conf.MinEnergyPer.ToString();
				AutoPilotConfigUI.TempMaxSpeed = AutoPilotPlugin.Conf.MaxSpeed.ToString();
				AutoPilotConfigUI.TempWarpMinRangeAU = AutoPilotPlugin.Conf.WarpMinRangeAU.ToString();
				AutoPilotConfigUI.TempSpeedToWarp = AutoPilotPlugin.Conf.SpeedToWarp.ToString();
			}
		}
		if (GUILayout.Button("Start", val3, Array.Empty<GUILayoutOption>()))
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			AutoPilotPlugin.State = AutoPilotState.ACTIVE;
		}
		GUILayout.EndVertical();
		GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
		GUILayout.Button("-", val3, Array.Empty<GUILayoutOption>());
		if (GUILayout.Button("Stop", val3, Array.Empty<GUILayoutOption>()))
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			AutoPilotPlugin.State = AutoPilotState.INACTIVE;
		}
		GUILayout.EndVertical();
		GUILayout.EndHorizontal();
		GUILayout.EndVertical();
		GUI.DragWindow();
	}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("Appun.DSP.plugin.AutoPilot", "DSPAutoPilot", "0.1.1")]
public class AutoPilotPlugin : BaseUnityPlugin
{
	public class Conf
	{
		public static int MinEnergyPer = 20;

		public static int MaxSpeed = 2000;

		public static int WarpMinRangeAU = 2;

		public static int SpeedToWarp = 1200;

		public static bool LocalWarpFlag = false;

		public static bool AutoStartFlag = true;

		public static bool IgnoreGravityFlag = true;

		public static bool MainWindowJoinFlag = true;
	}

	public static double EnergyPer = 0.0;

	public static double Speed = 0.0;

	public static int WarperCount = 0;

	public static bool LeavePlanet = false;

	public static bool SpeedUp = false;

	public static AutoPilotState State = AutoPilotState.INACTIVE;

	public static bool InputSailSpeedUp = false;

	private Harmony harmony;

	public void Awake()
	{
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Expected O, but got Unknown
		LogManager.Logger = ((BaseUnityPlugin)this).Logger;
		new AutoPilotConfigManager(((BaseUnityPlugin)this).Config);
		ConfigManager.CheckConfig(ConfigManager.Step.AWAKE);
		harmony = new Harmony("tanu.AutoPilot.Patch");
		harmony.PatchAll(typeof(Patch_VFInput));
		CruiseAssistPlugin.RegistExtension((CruiseAssistExtensionAPI)(object)new AutoPilotExtension());
	}

	public void OnDestroy()
	{
		CruiseAssistPlugin.UnregistExtension(typeof(AutoPilotExtension));
		harmony.UnpatchSelf();
	}
}
public enum AutoPilotState
{
	ACTIVE,
	INACTIVE
}
internal abstract class ConfigManager
{
	public enum Step
	{
		AWAKE,
		GAME_MAIN_BEGIN,
		STATE
	}

	private static ConfigManager instance;

	private static Dictionary<ConfigDefinition, string> orphanedEntries;

	public static ConfigFile Config { get; private set; }

	protected ConfigManager(ConfigFile config)
	{
		instance = this;
		Config = config;
		Config.SaveOnConfigSet = false;
	}

	public static void CheckConfig(Step step)
	{
		instance.CheckConfigImplements(step);
	}

	protected abstract void CheckConfigImplements(Step step);

	public static ConfigEntry<T> Bind<T>(ConfigDefinition configDefinition, T defaultValue, ConfigDescription configDescription = null)
	{
		return Config.Bind<T>(configDefinition, defaultValue, configDescription);
	}

	public static ConfigEntry<T> Bind<T>(string section, string key, T defaultValue, ConfigDescription configDescription = null)
	{
		return Config.Bind<T>(section, key, defaultValue, configDescription);
	}

	public static ConfigEntry<T> Bind<T>(string section, string key, T defaultValue, string description)
	{
		return Config.Bind<T>(section, key, defaultValue, description);
	}

	public static ConfigEntry<T> GetEntry<T>(ConfigDefinition configDefinition)
	{
		try
		{
			return (ConfigEntry<T>)(object)Config[configDefinition];
		}
		catch (KeyNotFoundException ex)
		{
			LogManager.LogError($"{ex.GetType()}: configDefinition={configDefinition}");
			throw;
		}
	}

	public static ConfigEntry<T> GetEntry<T>(string section, string key)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Expected O, but got Unknown
		return GetEntry<T>(new ConfigDefinition(section, key));
	}

	public static T GetValue<T>(ConfigDefinition configDefinition)
	{
		return GetEntry<T>(configDefinition).Value;
	}

	public static T GetValue<T>(string section, string key)
	{
		return GetEntry<T>(section, key).Value;
	}

	public static bool ContainsKey(ConfigDefinition configDefinition)
	{
		return Config.ContainsKey(configDefinition);
	}

	public static bool ContainsKey(string section, string key)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		return Config.ContainsKey(new ConfigDefinition(section, key));
	}

	public static bool UpdateEntry<T>(string section, string key, T value) where T : IComparable
	{
		ConfigEntry<T> entry = GetEntry<T>(section, key);
		if (entry.Value.CompareTo(value) == 0)
		{
			return false;
		}
		entry.Value = value;
		return true;
	}

	public static bool RemoveEntry(ConfigDefinition key)
	{
		return Config.Remove(key);
	}

	public static Dictionary<ConfigDefinition, string> GetOrphanedEntries()
	{
		if (orphanedEntries == null)
		{
			orphanedEntries = Traverse.Create((object)Config).Property<Dictionary<ConfigDefinition, string>>("OrphanedEntries", (object[])null).Value;
		}
		return orphanedEntries;
	}

	public static void Migration<T>(string newSection, string newKey, T defaultValue, string oldSection, string oldKey)
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Expected O, but got Unknown
		GetOrphanedEntries();
		ConfigDefinition key = new ConfigDefinition(oldSection, oldKey);
		if (orphanedEntries.TryGetValue(key, out var value))
		{
			((ConfigEntryBase)Bind(newSection, newKey, defaultValue)).SetSerializedValue(value);
			orphanedEntries.Remove(key);
			LogManager.LogInfo("migration " + oldSection + "." + oldKey + "(" + value + ") => " + newSection + "." + newKey);
		}
	}

	public static void Save(bool clearOrphanedEntries = false)
	{
		if (clearOrphanedEntries)
		{
			GetOrphanedEntries().Clear();
		}
		Config.Save();
		LogManager.LogInfo("save config.");
	}

	public static void Clear()
	{
		Config.Clear();
	}

	public static void Reload()
	{
		Config.Reload();
	}
}
internal class AutoPilotConfigUI
{
	private static int wIdx = 0;

	public const float WindowWidth = 400f;

	public const float WindowHeight = 400f;

	public static bool[] Show = new bool[2];

	public static Rect[] Rect = (Rect[])(object)new Rect[2]
	{
		new Rect(0f, 0f, 400f, 400f),
		new Rect(0f, 0f, 400f, 400f)
	};

	private static float[] lastCheckWindowLeft = new float[2]
	{
		float.MinValue,
		float.MinValue
	};

	private static float[] lastCheckWindowTop = new float[2]
	{
		float.MinValue,
		float.MinValue
	};

	public static string TempMinEnergyPer;

	public static string TempMaxSpeed;

	public static string TempWarpMinRangeAU;

	public static string TempSpeedToWarp;

	public static void OnGUI()
	{
		//IL_0024: 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_0049: Expected O, but got Unknown
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		wIdx = CruiseAssistMainUI.wIdx;
		Rect[wIdx] = GUILayout.Window(99031292, Rect[wIdx], new WindowFunction(WindowFunction), "AutoPilot - Config", CruiseAssistMainUI.WindowStyle, Array.Empty<GUILayoutOption>());
		float num = CruiseAssistMainUI.Scale / 100f;
		if ((float)Screen.width / num < ((Rect)(ref Rect[wIdx])).xMax)
		{
			((Rect)(ref Rect[wIdx])).x = (float)Screen.width / num - ((Rect)(ref Rect[wIdx])).width;
		}
		if (((Rect)(ref Rect[wIdx])).x < 0f)
		{
			((Rect)(ref Rect[wIdx])).x = 0f;
		}
		if ((float)Screen.height / num < ((Rect)(ref Rect[wIdx])).yMax)
		{
			((Rect)(ref Rect[wIdx])).y = (float)Screen.height / num - ((Rect)(ref Rect[wIdx])).height;
		}
		if (((Rect)(ref Rect[wIdx])).y < 0f)
		{
			((Rect)(ref Rect[wIdx])).y = 0f;
		}
		if (lastCheckWindowLeft[wIdx] != float.MinValue && (((Rect)(ref Rect[wIdx])).x != lastCheckWindowLeft[wIdx] || ((Rect)(ref Rect[wIdx])).y != lastCheckWindowTop[wIdx]))
		{
			AutoPilotMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		lastCheckWindowLeft[wIdx] = ((Rect)(ref Rect[wIdx])).x;
		lastCheckWindowTop[wIdx] = ((Rect)(ref Rect[wIdx])).y;
	}

	public static void WindowFunction(int windowId)
	{
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Expected O, but got Unknown
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Expected O, but got Unknown
		//IL_0268: Unknown result type (might be due to invalid IL or missing references)
		//IL_026f: Expected O, but got Unknown
		//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_032b: Unknown result type (might be due to invalid IL or missing references)
		//IL_03db: Unknown result type (might be due to invalid IL or missing references)
		//IL_038a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0400: Unknown result type (might be due to invalid IL or missing references)
		GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
		GUIStyle val = new GUIStyle(GUI.skin.label);
		val.fontSize = 12;
		val.fixedHeight = 20f;
		val.alignment = (TextAnchor)3;
		GUIStyle val2 = new GUIStyle(CruiseAssistMainUI.BaseTextFieldStyle);
		val2.fontSize = 12;
		val2.fixedWidth = 60f;
		val.fixedHeight = 20f;
		val2.alignment = (TextAnchor)5;
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		val.fixedWidth = 240f;
		GUILayout.Label(Localization.Translate("Min Energy Percent (0-100 default:20)"), val, Array.Empty<GUILayoutOption>());
		GUILayout.FlexibleSpace();
		string instr = GUILayout.TextField(TempMinEnergyPer, val2, Array.Empty<GUILayoutOption>());
		SetValue(ref TempMinEnergyPer, instr, 0, 100, ref AutoPilotPlugin.Conf.MinEnergyPer);
		val.fixedWidth = 20f;
		GUILayout.Label("%", val, Array.Empty<GUILayoutOption>());
		GUILayout.EndHorizontal();
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		val.fixedWidth = 240f;
		GUILayout.Label(Localization.Translate("Max Speed (0-2000 default:2000)"), val, Array.Empty<GUILayoutOption>());
		GUILayout.FlexibleSpace();
		string instr2 = GUILayout.TextField(TempMaxSpeed, val2, Array.Empty<GUILayoutOption>());
		SetValue(ref TempMaxSpeed, instr2, 0, 2000, ref AutoPilotPlugin.Conf.MaxSpeed);
		val.fixedWidth = 20f;
		GUILayout.Label("m/s", val, Array.Empty<GUILayoutOption>());
		GUILayout.EndHorizontal();
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		val.fixedWidth = 240f;
		GUILayout.Label(Localization.Translate("Warp Min Range (1-60 default:2)"), val, Array.Empty<GUILayoutOption>());
		GUILayout.FlexibleSpace();
		string instr3 = GUILayout.TextArea(TempWarpMinRangeAU, val2, Array.Empty<GUILayoutOption>());
		SetValue(ref TempWarpMinRangeAU, instr3, 1, 60, ref AutoPilotPlugin.Conf.WarpMinRangeAU);
		val.fixedWidth = 20f;
		GUILayout.Label("AU", val, Array.Empty<GUILayoutOption>());
		GUILayout.EndHorizontal();
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		val.fixedWidth = 240f;
		GUILayout.Label(Localization.Translate("Speed to warp (0-2000 default:1200)"), val, Array.Empty<GUILayoutOption>());
		GUILayout.FlexibleSpace();
		string instr4 = GUILayout.TextArea(TempSpeedToWarp, val2, Array.Empty<GUILayoutOption>());
		SetValue(ref TempSpeedToWarp, instr4, 0, 2000, ref AutoPilotPlugin.Conf.SpeedToWarp);
		val.fixedWidth = 20f;
		GUILayout.Label("m/s", val, Array.Empty<GUILayoutOption>());
		GUILayout.EndHorizontal();
		GUIStyle val3 = new GUIStyle(CruiseAssistMainUI.BaseToggleStyle);
		val3.fixedHeight = 20f;
		val3.fontSize = 12;
		val3.alignment = (TextAnchor)6;
		GUI.changed = false;
		AutoPilotPlugin.Conf.LocalWarpFlag = GUILayout.Toggle(AutoPilotPlugin.Conf.LocalWarpFlag, Localization.Translate("Warp to planet in local system."), val3, Array.Empty<GUILayoutOption>());
		if (GUI.changed)
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			AutoPilotMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		GUI.changed = false;
		AutoPilotPlugin.Conf.AutoStartFlag = GUILayout.Toggle(AutoPilotPlugin.Conf.AutoStartFlag, Localization.Translate("Start AutoPilot when set target planet."), val3, Array.Empty<GUILayoutOption>());
		if (GUI.changed)
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			AutoPilotMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		GUI.changed = false;
		AutoPilotPlugin.Conf.MainWindowJoinFlag = GUILayout.Toggle(AutoPilotPlugin.Conf.MainWindowJoinFlag, Localization.Translate("Join AutoPilot window to CruiseAssist window."), val3, Array.Empty<GUILayoutOption>());
		if (GUI.changed)
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			AutoPilotMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		GUILayout.EndVertical();
		if (GUI.Button(new Rect(((Rect)(ref Rect[wIdx])).width - 16f, 1f, 16f, 16f), "", CruiseAssistMainUI.CloseButtonStyle))
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			Show[wIdx] = false;
		}
		GUI.DragWindow();
	}

	private static bool SetValue(ref string temp, string instr, int min, int max, ref int value)
	{
		if (string.IsNullOrEmpty(instr))
		{
			temp = string.Empty;
			return false;
		}
		if (int.TryParse(instr, out var result))
		{
			if (result < min)
			{
				result = min;
			}
			else if (max < result)
			{
				result = max;
			}
			value = result;
			temp = value.ToString();
			return true;
		}
		return false;
	}
}
internal class EnumUtils
{
	public static bool TryParse<TEnum>(string value, out TEnum result) where TEnum : struct
	{
		if (value == null || !Enum.IsDefined(typeof(TEnum), value))
		{
			result = (TEnum)Enum.GetValues(typeof(TEnum)).GetValue(0);
			return false;
		}
		result = (TEnum)Enum.Parse(typeof(TEnum), value);
		return true;
	}
}
internal static class LogManager
{
	public static ManualLogSource Logger { private get; set; }

	public static void LogInfo(object data)
	{
		Logger.LogInfo(data);
	}

	public static void LogInfo(MethodBase method)
	{
		Logger.LogInfo((object)(method.DeclaringType.Name + "." + method.Name));
	}

	public static void LogInfo(MethodBase method, object data)
	{
		Logger.LogInfo((object)(method.DeclaringType.Name + "." + method.Name + ": " + data));
	}

	public static void LogError(object data)
	{
		Logger.LogError(data);
	}

	public static void LogError(MethodBase method, object data)
	{
		Logger.LogError((object)(method.DeclaringType.Name + "." + method.Name + ": " + data));
	}
}
[HarmonyPatch(typeof(VFInput))]
internal class Patch_VFInput
{
	[HarmonyPatch(/*Could not decode attribute arguments.*/)]
	[HarmonyPostfix]
	public static void SailSpeedUp_Postfix(ref bool __result)
	{
		if (AutoPilotPlugin.State != AutoPilotState.INACTIVE && AutoPilotPlugin.InputSailSpeedUp)
		{
			__result = true;
		}
	}
}