Decompiled source of CAAP N v1.3.0

CruiseAssist.dll

Decompiled 2 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
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.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("CruiseAssist")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CruiseAssist")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("9cdb5e0f-fb97-46ff-a4fb-a9a400443fd3")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
[HarmonyPatch(typeof(PlayerMove_Drift))]
internal class Patch_PlayerMoveDrift
{
	[HarmonyPatch("GameTick")]
	[HarmonyPrefix]
	public static void GameTick_Prefix(PlayerMove_Drift __instance)
	{
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Invalid comparison between Unknown and I4
		//IL_002f: 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)
		if (!CruiseAssistPlugin.Enable || !CruiseAssistPlugin.TargetSelected || (int)((PlayerAction)__instance).controller.movementStateInFrame != 1)
		{
			return;
		}
		if (VFInput._moveForward.pressing || VFInput._pullUp.pressing)
		{
			CruiseAssistPlugin.Interrupt = true;
			CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
			{
				extension.CancelOperate();
			});
		}
		else
		{
			CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
			{
				extension.OperateDrift(__instance);
			});
		}
	}
}
[HarmonyPatch(typeof(PlayerMove_Fly))]
internal class Patch_PlayerMoveFly
{
	[HarmonyPatch("GameTick")]
	[HarmonyPrefix]
	public static void GameTick_Prefix(PlayerMove_Fly __instance)
	{
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Invalid comparison between Unknown and I4
		//IL_002f: 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)
		if (!CruiseAssistPlugin.Enable || !CruiseAssistPlugin.TargetSelected || (int)((PlayerAction)__instance).controller.movementStateInFrame != 2)
		{
			return;
		}
		if (VFInput._moveForward.pressing || VFInput._pullUp.pressing)
		{
			CruiseAssistPlugin.Interrupt = true;
			CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
			{
				extension.CancelOperate();
			});
		}
		else
		{
			CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
			{
				extension.OperateFly(__instance);
			});
		}
	}
}
[HarmonyPatch(typeof(PlayerMove_Walk))]
internal class Patch_PlayerMoveWalk
{
	[HarmonyPatch("GameTick")]
	[HarmonyPrefix]
	public static void GameTick_Prefix(PlayerMove_Walk __instance)
	{
		//IL_04b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_04cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_057b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0585: Unknown result type (might be due to invalid IL or missing references)
		//IL_058a: Unknown result type (might be due to invalid IL or missing references)
		//IL_058f: Unknown result type (might be due to invalid IL or missing references)
		//IL_05cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_05d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_05de: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_070d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0713: Invalid comparison between Unknown and I4
		//IL_0621: Unknown result type (might be due to invalid IL or missing references)
		//IL_062b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0630: Unknown result type (might be due to invalid IL or missing references)
		//IL_0635: Unknown result type (might be due to invalid IL or missing references)
		//IL_0716: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_03fb: 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)
		//IL_0664: Unknown result type (might be due to invalid IL or missing references)
		//IL_066e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0673: Unknown result type (might be due to invalid IL or missing references)
		//IL_0678: Unknown result type (might be due to invalid IL or missing references)
		//IL_0434: Unknown result type (might be due to invalid IL or missing references)
		//IL_043e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0443: Unknown result type (might be due to invalid IL or missing references)
		//IL_0448: Unknown result type (might be due to invalid IL or missing references)
		//IL_06c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_06d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_06d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_06dd: Unknown result type (might be due to invalid IL or missing references)
		CruiseAssistPlugin.lastState = CruiseAssistPlugin.State;
		if (CruiseAssistPlugin.Interrupt)
		{
			CruiseAssistPlugin.lockOn = false;
			CruiseAssistPlugin.State = CruiseAssistState.INACTIVE;
			CruiseAssistPlugin.SelectTargetPlanet = null;
			CruiseAssistPlugin.SelectTargetStar = null;
			CruiseAssistPlugin.SelectTargetHive = null;
			CruiseAssistPlugin.SelectTargetMsg = null;
			CruiseAssistPlugin.SelectTargetEnemyIdF = 0;
			CruiseAssistPlugin.lastState = CruiseAssistState.INACTIVE;
			CruiseAssistPlugin.AbortPreloadStar();
		}
		CruiseAssistPlugin.State = CruiseAssistState.INACTIVE;
		CruiseAssistPlugin.Interrupt = false;
		CruiseAssistPlugin.TargetStar = null;
		CruiseAssistPlugin.TargetPlanet = null;
		CruiseAssistPlugin.TargetHive = null;
		CruiseAssistPlugin.TargetMsg = null;
		CruiseAssistPlugin.TargetEnemyId = 0;
		CruiseAssistPlugin.TargetRange = 0.0;
		CruiseAssistPlugin.TargetSelected = false;
		if (GameMain.localPlanet != null && (CruiseAssistPlugin.History.Count == 0 || CruiseAssistPlugin.History.Last() != GameMain.localPlanet.id))
		{
			if (CruiseAssistPlugin.History.Count >= 128)
			{
				CruiseAssistPlugin.History.RemoveAt(0);
			}
			CruiseAssistPlugin.History.Add(GameMain.localPlanet.id);
			ConfigManager.CheckConfig(ConfigManager.Step.STATE);
		}
		if (!CruiseAssistPlugin.Enable)
		{
			CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
			{
				extension.SetInactive();
			});
			return;
		}
		int indicatorAstroId = GameMain.mainPlayer.navigation.indicatorAstroId;
		int indicatorEnemyId = GameMain.mainPlayer.navigation.indicatorEnemyId;
		int indicatorMsgId = GameMain.mainPlayer.navigation.indicatorMsgId;
		if ((Object)(object)UIRoot.instance.uiGame.starmap.focusHive != (Object)null)
		{
			return;
		}
		if (CruiseAssistPlugin.SelectTargetAstroId != indicatorAstroId)
		{
			CruiseAssistPlugin.SelectTargetAstroId = indicatorAstroId;
			if (indicatorAstroId == 0)
			{
				CruiseAssistPlugin.SelectTargetPlanet = null;
				CruiseAssistPlugin.SelectTargetStar = null;
			}
			else
			{
				if (indicatorAstroId > 1000000)
				{
					CruiseAssistPlugin.SelectTargetHive = GameMain.spaceSector.dfHivesByAstro[indicatorAstroId - 1000000];
					CruiseAssistPlugin.SelectTargetPlanet = null;
					CruiseAssistPlugin.SelectTargetStar = CruiseAssistPlugin.SelectTargetHive.starData;
				}
				else if (indicatorAstroId % 100 != 0)
				{
					CruiseAssistPlugin.SelectTargetPlanet = GameMain.galaxy.PlanetById(indicatorAstroId);
					CruiseAssistPlugin.SelectTargetStar = CruiseAssistPlugin.SelectTargetPlanet.star;
				}
				else
				{
					CruiseAssistPlugin.SelectTargetPlanet = null;
					CruiseAssistPlugin.SelectTargetStar = GameMain.galaxy.StarById(indicatorAstroId / 100);
				}
				CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
				{
					extension.SetTargetAstroId(indicatorAstroId);
				});
			}
		}
		if (CruiseAssistPlugin.SelectTargetEnemyId != indicatorEnemyId)
		{
			CruiseAssistPlugin.SelectTargetEnemyId = indicatorEnemyId;
			if (indicatorEnemyId != 0)
			{
				CruiseAssistPlugin.SelectTargetEnemyIdF = indicatorEnemyId;
				CruiseAssistPlugin.SelectTargetPlanet = null;
				CruiseAssistPlugin.SelectTargetStar = null;
				CruiseAssistPlugin.SelectTargetHive = null;
				CruiseAssistPlugin.SelectTargetMsg = null;
				CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
				{
					extension.SetTargetAstroId(indicatorAstroId);
				});
			}
			else
			{
				CruiseAssistPlugin.SelectTargetEnemyIdF = 0;
			}
		}
		if (CruiseAssistPlugin.SelectTargetMsgId != indicatorMsgId)
		{
			CruiseAssistPlugin.SelectTargetMsgId = indicatorMsgId;
			if (indicatorMsgId == 0)
			{
				CruiseAssistPlugin.SelectTargetMsg = null;
			}
			else
			{
				CruiseAssistPlugin.SelectTargetMsg = GameMain.gameScenario.cosmicMessageManager.messages[indicatorMsgId];
				CruiseAssistPlugin.SelectTargetStar = CruiseAssistPlugin.SelectTargetMsg.nearStar;
				CruiseAssistPlugin.SelectTargetEnemyIdF = 0;
				CruiseAssistPlugin.SelectTargetPlanet = null;
				CruiseAssistPlugin.SelectTargetHive = null;
				CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
				{
					extension.SetTargetAstroId(indicatorAstroId);
				});
			}
		}
		VectorLF3 val;
		if (CruiseAssistPlugin.SelectTargetStar != null)
		{
			if (GameMain.localStar != null && CruiseAssistPlugin.SelectTargetStar.id == GameMain.localStar.id)
			{
				if (CruiseAssistPlugin.SelectTargetPlanet == null && CruiseAssistPlugin.SelectTargetHive == null && GameMain.localPlanet != null)
				{
					CruiseAssistPlugin.SelectTargetStar = null;
					CruiseAssistPlugin.SelectTargetEnemyId = 0;
					CruiseAssistPlugin.SelectTargetAstroId = 0;
					GameMain.mainPlayer.navigation.indicatorAstroId = 0;
					CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
					{
						extension.SetInactive();
					});
					return;
				}
				if (CruiseAssistPlugin.SelectTargetPlanet != null)
				{
					if (GameMain.localPlanet != null && CruiseAssistPlugin.SelectTargetPlanet.id == GameMain.localPlanet.id)
					{
						CruiseAssistPlugin.Deactivate();
						return;
					}
					CruiseAssistPlugin.TargetPlanet = CruiseAssistPlugin.SelectTargetPlanet;
				}
				else if (CruiseAssistPlugin.SelectTargetHive != null)
				{
					val = GameMain.spaceSector.astros[CruiseAssistPlugin.SelectTargetHive.hiveAstroId - 1000000].uPos - GameMain.mainPlayer.uPosition;
					if (((VectorLF3)(ref val)).magnitude < 30000.0)
					{
						CruiseAssistPlugin.Deactivate();
						return;
					}
					CruiseAssistPlugin.TargetHive = CruiseAssistPlugin.SelectTargetHive;
				}
				else if (CruiseAssistPlugin.SelectTargetMsg != null)
				{
					val = CruiseAssistPlugin.SelectTargetMsg.uPosition - GameMain.mainPlayer.uPosition;
					if (((VectorLF3)(ref val)).magnitude < 2000.0)
					{
						CruiseAssistPlugin.Deactivate();
						return;
					}
					CruiseAssistPlugin.TargetMsg = CruiseAssistPlugin.SelectTargetMsg;
				}
				else if (CruiseAssistPlugin.ReticuleTargetPlanet != null)
				{
					CruiseAssistPlugin.TargetPlanet = CruiseAssistPlugin.ReticuleTargetPlanet;
				}
			}
			else
			{
				CruiseAssistPlugin.TargetStar = CruiseAssistPlugin.SelectTargetStar;
				CruiseAssistPlugin.TargetPlanet = CruiseAssistPlugin.SelectTargetPlanet;
				CruiseAssistPlugin.TargetHive = CruiseAssistPlugin.SelectTargetHive;
			}
		}
		else if (CruiseAssistPlugin.SelectTargetEnemyIdF != 0)
		{
			val = CruiseAssistPlugin.SelectTargetEnemy.pos - GameMain.mainPlayer.uPosition;
			if (((VectorLF3)(ref val)).magnitude < 3000.0)
			{
				CruiseAssistPlugin.Deactivate();
				return;
			}
			CruiseAssistPlugin.TargetEnemyId = CruiseAssistPlugin.SelectTargetEnemyId;
		}
		else if (CruiseAssistPlugin.ReticuleTargetPlanet != null)
		{
			CruiseAssistPlugin.SelectTargetPlanet = CruiseAssistPlugin.ReticuleTargetPlanet;
			CruiseAssistPlugin.SelectTargetStar = CruiseAssistPlugin.SelectTargetPlanet.star;
			CruiseAssistPlugin.TargetPlanet = CruiseAssistPlugin.ReticuleTargetPlanet;
			CruiseAssistPlugin.TargetStar = CruiseAssistPlugin.TargetPlanet.star;
		}
		else if (CruiseAssistPlugin.ReticuleTargetStar != null)
		{
			CruiseAssistPlugin.SelectTargetPlanet = null;
			CruiseAssistPlugin.SelectTargetStar = CruiseAssistPlugin.ReticuleTargetStar;
			CruiseAssistPlugin.TargetPlanet = null;
			CruiseAssistPlugin.TargetStar = CruiseAssistPlugin.ReticuleTargetStar;
		}
		_ = ((PlayerAction)__instance).player;
		if (CruiseAssistPlugin.TargetPlanet != null)
		{
			CruiseAssistPlugin.State = CruiseAssistState.TO_PLANET;
			CruiseAssistPlugin.TargetStar = CruiseAssistPlugin.TargetPlanet.star;
			val = CruiseAssistPlugin.TargetUPos - GameMain.mainPlayer.uPosition;
			CruiseAssistPlugin.TargetRange = ((VectorLF3)(ref val)).magnitude - (double)CruiseAssistPlugin.TargetPlanet.realRadius;
			CruiseAssistPlugin.TargetSelected = true;
		}
		else if (CruiseAssistPlugin.TargetHive != null)
		{
			CruiseAssistPlugin.State = CruiseAssistState.TO_HIVE;
			CruiseAssistPlugin.TargetStar = CruiseAssistPlugin.TargetHive.starData;
			val = CruiseAssistPlugin.TargetUPos - GameMain.mainPlayer.uPosition;
			CruiseAssistPlugin.TargetRange = ((VectorLF3)(ref val)).magnitude - 30000.0;
			CruiseAssistPlugin.TargetSelected = true;
		}
		else if (CruiseAssistPlugin.TargetMsg != null)
		{
			CruiseAssistPlugin.State = CruiseAssistState.TO_MSG;
			CruiseAssistPlugin.TargetStar = CruiseAssistPlugin.TargetMsg.nearStar;
			val = CruiseAssistPlugin.TargetUPos - GameMain.mainPlayer.uPosition;
			CruiseAssistPlugin.TargetRange = ((VectorLF3)(ref val)).magnitude - 2000.0;
			CruiseAssistPlugin.TargetSelected = true;
		}
		else if (CruiseAssistPlugin.TargetEnemyId != 0)
		{
			CruiseAssistPlugin.State = CruiseAssistState.TO_ENEMY;
			val = CruiseAssistPlugin.TargetUPos - GameMain.mainPlayer.uPosition;
			CruiseAssistPlugin.TargetRange = ((VectorLF3)(ref val)).magnitude;
			CruiseAssistPlugin.TargetSelected = true;
		}
		else
		{
			if (CruiseAssistPlugin.TargetStar == null)
			{
				CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
				{
					extension.SetInactive();
				});
				return;
			}
			CruiseAssistPlugin.State = CruiseAssistState.TO_STAR;
			val = CruiseAssistPlugin.TargetStar.uPosition - GameMain.mainPlayer.uPosition;
			CruiseAssistPlugin.TargetRange = ((VectorLF3)(ref val)).magnitude - (double)(CruiseAssistPlugin.TargetStar.viewRadius - 120f);
			CruiseAssistPlugin.TargetSelected = true;
		}
		if ((int)((PlayerAction)__instance).controller.movementStateInFrame > 0)
		{
			return;
		}
		if (VFInput._jump.pressing)
		{
			CruiseAssistPlugin.Interrupt = true;
			CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
			{
				extension.CancelOperate();
			});
		}
		else
		{
			CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
			{
				extension.OperateWalk(__instance);
			});
		}
	}
}
[HarmonyPatch(typeof(PlayerMove_Sail))]
internal class Patch_PlayerMoveSail
{
	[HarmonyPatch("GameTick")]
	[HarmonyPrefix]
	public static void GameTick_Prefix(PlayerMove_Sail __instance)
	{
		//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0142: Unknown result type (might be due to invalid IL or missing references)
		//IL_0148: Unknown result type (might be due to invalid IL or missing references)
		//IL_014d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0152: 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_015c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0161: Unknown result type (might be due to invalid IL or missing references)
		//IL_0203: Unknown result type (might be due to invalid IL or missing references)
		//IL_0208: 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_021f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0224: Unknown result type (might be due to invalid IL or missing references)
		//IL_022b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0230: Unknown result type (might be due to invalid IL or missing references)
		//IL_0235: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f5: 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)
		if (CruiseAssistPlugin.TargetStar?.id == GameMain.localStar?.id)
		{
			CruiseAssistPlugin.AbortPreloadStar();
		}
		if (!CruiseAssistPlugin.Enable || !CruiseAssistPlugin.TargetSelected)
		{
			return;
		}
		Player player = ((PlayerAction)__instance).player;
		if (!player.sailing)
		{
			return;
		}
		if (GameMain.mainPlayer.controller.input0 != Vector4.zero || (GameMain.mainPlayer.controller.input1 != Vector4.zero && GameMain.mainPlayer.controller.input1.y >= 0f))
		{
			CruiseAssistPlugin.Interrupt = true;
			CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
			{
				extension.CancelOperate();
			});
			return;
		}
		bool operate = false;
		CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
		{
			operate |= extension.OperateSail(__instance);
		});
		if (operate)
		{
			return;
		}
		VectorLF3 val = CruiseAssistPlugin.TargetUPos - player.uPosition;
		float num = Vector3.Angle(VectorLF3.op_Implicit(val), VectorLF3.op_Implicit(player.uVelocity));
		float num2 = 1.6f / Mathf.Max(10f, num);
		_ = ((VectorLF3)(ref player.controller.actionSail.visual_uvel)).magnitude;
		if ((double)num < 0.5)
		{
			CruiseAssistPlugin.lockOn = true;
		}
		if (CruiseAssistPlugin.lockOn)
		{
			if (CruiseAssistPlugin.TargetStar != null)
			{
				CruiseAssistPlugin.TryPreloadStar(CruiseAssistPlugin.TargetStar);
			}
			player.uVelocity = VectorLF3.op_Implicit(Vector3.Slerp(VectorLF3.op_Implicit(player.uVelocity), VectorLF3.op_Implicit(((VectorLF3)(ref val)).normalized * ((VectorLF3)(ref player.uVelocity)).magnitude), 0.75f));
		}
		else
		{
			player.uVelocity = VectorLF3.op_Implicit(Vector3.Slerp(VectorLF3.op_Implicit(player.uVelocity), VectorLF3.op_Implicit(((VectorLF3)(ref val)).normalized * ((VectorLF3)(ref player.uVelocity)).magnitude), num2));
		}
		if (CruiseAssistPlugin.State == CruiseAssistState.TO_ENEMY)
		{
			player.controller.actionSail.warpSpeedControl = 1.0 - Math.Pow(Maths.Clamp01(1.0 - (((VectorLF3)(ref val)).magnitude - 3000.0) / 400000.0), 2.0) * 0.65;
		}
	}
}
namespace tanu.CruiseAssist;

public class ListUtils
{
	public static string ToString(List<int> list)
	{
		if (list == null || list.Count == 0)
		{
			return "";
		}
		return list.Select((int id) => id.ToString()).Aggregate((string a, string b) => a + "," + b);
	}

	public static string ToString(List<string> list)
	{
		if (list == null || list.Count == 0)
		{
			return "";
		}
		return list.Aggregate((string a, string b) => a + "," + b);
	}

	public static List<int> ParseToIntList(string str)
	{
		if (str == null || str.Length == 0)
		{
			return new List<int>();
		}
		int result;
		return (from s in str.Split(new char[1] { ',' })
			where int.TryParse(s, out result)
			select s).Select(int.Parse).ToList();
	}

	public static List<string> ParseToStringList(string str)
	{
		if (str == null || str.Length == 0)
		{
			return new List<string>();
		}
		return str.Split(new char[1] { ',' }).ToList();
	}
}
public class CruiseAssistConfigManager : ConfigManager
{
	public CruiseAssistConfigManager(ConfigFile Config)
		: base(Config)
	{
	}

	protected override void CheckConfigImplements(Step step)
	{
		bool flag = false;
		if (step == Step.AWAKE)
		{
			ConfigManager.Bind("Base", "ModVersion", "1.3.0", "Don't change.").Value = "1.3.0";
			ConfigManager.Migration("State", "MainWindow0Left", 100, "State", "InfoWindowLeft");
			ConfigManager.Migration("State", "MainWindow0Top", 100, "State", "InfoWindowTop");
			ConfigManager.Migration("State", "MainWindow0Left", 100, "State", "MainWindowLeft");
			ConfigManager.Migration("State", "MainWindow0Top", 100, "State", "MainWindowTop");
			ConfigManager.Migration("State", "StarListWindow0Left", 100, "State", "StarListWindowLeft");
			ConfigManager.Migration("State", "StarListWindow0Top", 100, "State", "StarListWindowTop");
			flag = true;
		}
		switch (step)
		{
		case Step.AWAKE:
		case Step.GAME_MAIN_BEGIN:
		{
			CruiseAssistDebugUI.Show = ConfigManager.Bind("Debug", "DebugWindowShow", defaultValue: false).Value;
			CruiseAssistPlugin.Enable = ConfigManager.Bind("Setting", "Enable", defaultValue: true).Value;
			CruiseAssistPlugin.MarkVisitedFlag = ConfigManager.Bind("Setting", "MarkVisited", defaultValue: true).Value;
			CruiseAssistPlugin.SelectFocusFlag = ConfigManager.Bind("Setting", "SelectFocus", defaultValue: true).Value;
			CruiseAssistPlugin.HideDuplicateHistoryFlag = ConfigManager.Bind("Setting", "HideDuplicateHistory", defaultValue: true).Value;
			CruiseAssistPlugin.AutoDisableLockCursorFlag = ConfigManager.Bind("Setting", "AutoDisableLockCursor", defaultValue: false).Value;
			CruiseAssistPlugin.TrackDarkFogSeedsFlag = ConfigManager.Bind("Setting", "TrackDarkFogSeeds", defaultValue: true).Value;
			CruiseAssistPlugin.PreventNonTargetLoadingFlag = ConfigManager.Bind("Setting", "PreventNonTargetLoading", defaultValue: true).Value;
			CruiseAssistMainUI.Scale = ConfigManager.Bind("Setting", "UIScale", 150).Value;
			EnumUtils.TryParse<CruiseAssistMainUIViewMode>(ConfigManager.Bind("Setting", "MainWindowViewMode", CruiseAssistMainUIViewMode.FULL.ToString()).Value, out CruiseAssistMainUI.ViewMode);
			for (int j = 0; j < 2; j++)
			{
				((Rect)(ref CruiseAssistMainUI.Rect[j])).x = ConfigManager.Bind("State", $"MainWindow{j}Left", 100).Value;
				((Rect)(ref CruiseAssistMainUI.Rect[j])).y = ConfigManager.Bind("State", $"MainWindow{j}Top", 100).Value;
				((Rect)(ref CruiseAssistStarListUI.Rect[j])).x = ConfigManager.Bind("State", $"StarListWindow{j}Left", 100).Value;
				((Rect)(ref CruiseAssistStarListUI.Rect[j])).y = ConfigManager.Bind("State", $"StarListWindow{j}Top", 100).Value;
				((Rect)(ref CruiseAssistConfigUI.Rect[j])).x = ConfigManager.Bind("State", $"ConfigWindow{j}Left", 100).Value;
				((Rect)(ref CruiseAssistConfigUI.Rect[j])).y = ConfigManager.Bind("State", $"ConfigWindow{j}Top", 100).Value;
			}
			CruiseAssistStarListUI.ListSelected = ConfigManager.Bind("State", "StarListWindowListSelected", 0).Value;
			((Rect)(ref CruiseAssistDebugUI.Rect)).x = ConfigManager.Bind("State", "DebugWindowLeft", 100).Value;
			((Rect)(ref CruiseAssistDebugUI.Rect)).y = ConfigManager.Bind("State", "DebugWindowTop", 100).Value;
			if (!DSPGame.IsMenuDemo && GameMain.galaxy != null)
			{
				CruiseAssistPlugin.History = ListUtils.ParseToIntList(ConfigManager.Bind("Save", $"History_{GameMain.galaxy.seed}", "").Value);
				CruiseAssistPlugin.Bookmark = ListUtils.ParseToIntList(ConfigManager.Bind("Save", $"Bookmark_{GameMain.galaxy.seed}", "").Value);
			}
			else
			{
				CruiseAssistPlugin.History = new List<int>();
				CruiseAssistPlugin.Bookmark = new List<int>();
			}
			break;
		}
		case Step.STATE:
		{
			LogManager.LogInfo("check state.");
			flag |= ConfigManager.UpdateEntry("Setting", "Enable", CruiseAssistPlugin.Enable);
			flag |= ConfigManager.UpdateEntry("Setting", "MarkVisited", CruiseAssistPlugin.MarkVisitedFlag);
			flag |= ConfigManager.UpdateEntry("Setting", "SelectFocus", CruiseAssistPlugin.SelectFocusFlag);
			flag |= ConfigManager.UpdateEntry("Setting", "HideDuplicateHistory", CruiseAssistPlugin.HideDuplicateHistoryFlag);
			flag |= ConfigManager.UpdateEntry("Setting", "AutoDisableLockCursor", CruiseAssistPlugin.AutoDisableLockCursorFlag);
			flag |= ConfigManager.UpdateEntry("Setting", "TrackDarkFogSeeds", CruiseAssistPlugin.TrackDarkFogSeedsFlag);
			flag |= ConfigManager.UpdateEntry("Setting", "PreventNonTargetLoading", CruiseAssistPlugin.PreventNonTargetLoadingFlag);
			flag |= ConfigManager.UpdateEntry("Setting", "UIScale", (int)CruiseAssistMainUI.Scale);
			flag |= ConfigManager.UpdateEntry("Setting", "MainWindowViewMode", CruiseAssistMainUI.ViewMode.ToString());
			for (int i = 0; i < 2; i++)
			{
				flag |= ConfigManager.UpdateEntry("State", $"MainWindow{i}Left", (int)((Rect)(ref CruiseAssistMainUI.Rect[i])).x);
				flag |= ConfigManager.UpdateEntry("State", $"MainWindow{i}Top", (int)((Rect)(ref CruiseAssistMainUI.Rect[i])).y);
				flag |= ConfigManager.UpdateEntry("State", $"StarListWindow{i}Left", (int)((Rect)(ref CruiseAssistStarListUI.Rect[i])).x);
				flag |= ConfigManager.UpdateEntry("State", $"StarListWindow{i}Top", (int)((Rect)(ref CruiseAssistStarListUI.Rect[i])).y);
				flag |= ConfigManager.UpdateEntry("State", $"ConfigWindow{i}Left", (int)((Rect)(ref CruiseAssistConfigUI.Rect[i])).x);
				flag |= ConfigManager.UpdateEntry("State", $"ConfigWindow{i}Top", (int)((Rect)(ref CruiseAssistConfigUI.Rect[i])).y);
			}
			flag |= ConfigManager.UpdateEntry("State", "StarListWindowListSelected", CruiseAssistStarListUI.ListSelected);
			flag |= ConfigManager.UpdateEntry("State", "DebugWindowLeft", (int)((Rect)(ref CruiseAssistDebugUI.Rect)).x);
			flag |= ConfigManager.UpdateEntry("State", "DebugWindowTop", (int)((Rect)(ref CruiseAssistDebugUI.Rect)).y);
			if (!DSPGame.IsMenuDemo && GameMain.galaxy != null)
			{
				if (!ConfigManager.ContainsKey("Save", $"History_{GameMain.galaxy.seed}") || !ConfigManager.ContainsKey("Save", $"Bookmark_{GameMain.galaxy.seed}"))
				{
					ConfigManager.Bind("Save", $"History_{GameMain.galaxy.seed}", "");
					ConfigManager.Bind("Save", $"Bookmark_{GameMain.galaxy.seed}", "");
					flag = true;
				}
				flag |= ConfigManager.UpdateEntry("Save", $"History_{GameMain.galaxy.seed}", ListUtils.ToString(CruiseAssistPlugin.History));
				flag |= ConfigManager.UpdateEntry("Save", $"Bookmark_{GameMain.galaxy.seed}", ListUtils.ToString(CruiseAssistPlugin.Bookmark));
			}
			CruiseAssistMainUI.NextCheckGameTick = long.MaxValue;
			break;
		}
		}
		if (flag)
		{
			ConfigManager.Save();
		}
	}
}
public interface CruiseAssistExtensionAPI
{
	void CheckConfig(string step);

	void SetTargetAstroId(int astroId);

	bool OperateWalk(PlayerMove_Walk __instance);

	bool OperateDrift(PlayerMove_Drift __instance);

	bool OperateFly(PlayerMove_Fly __instance);

	bool OperateSail(PlayerMove_Sail __instance);

	void SetInactive();

	void CancelOperate();

	void OnGUI();

	bool CheckActive();
}
[BepInPlugin("nord.CruiseAssist", "CruiseAssist-N", "1.3.0")]
public class CruiseAssistPlugin : BaseUnityPlugin
{
	public const string ModGuid = "nord.CruiseAssist";

	public const string ModName = "CruiseAssist-N";

	public const string ModVersion = "1.3.0";

	public const double HIVE_IN_RANGE = 30000.0;

	public const double ENEMY_IN_RANGE = 3000.0;

	public const double MSG_IN_RANGE = 2000.0;

	public static bool Enable = true;

	public static bool Interrupt = false;

	public static bool TargetSelected = false;

	public static bool MarkVisitedFlag = true;

	public static bool SelectFocusFlag = false;

	public static bool HideDuplicateHistoryFlag = true;

	public static bool AutoDisableLockCursorFlag = false;

	public static bool TrackDarkFogSeedsFlag = true;

	public static bool PreventNonTargetLoadingFlag = true;

	public static StarData ReticuleTargetStar = null;

	public static PlanetData ReticuleTargetPlanet = null;

	public static StarData SelectTargetStar = null;

	public static PlanetData SelectTargetPlanet = null;

	public static EnemyDFHiveSystem SelectTargetHive = null;

	public static CosmicMessageData SelectTargetMsg = null;

	public static int SelectTargetAstroId = 0;

	public static int SelectTargetEnemyId = 0;

	public static int SelectTargetEnemyIdF = 0;

	public static int SelectTargetMsgId = 0;

	public static StarData TargetStar = null;

	public static PlanetData TargetPlanet = null;

	public static EnemyDFHiveSystem TargetHive = null;

	public static CosmicMessageData TargetMsg = null;

	public static int TargetEnemyId = 0;

	public static bool lockOn = false;

	public static StarData preloadStar = null;

	public static CruiseAssistState State = CruiseAssistState.INACTIVE;

	public static CruiseAssistState lastState = CruiseAssistState.INACTIVE;

	public static List<int> History = new List<int>();

	public static List<int> Bookmark = new List<int>();

	public static Func<StarData, string> GetStarName = (StarData star) => star.displayName;

	public static Func<PlanetData, string> GetPlanetName = (PlanetData planet) => planet.displayName;

	public static Func<EnemyDFHiveSystem, string> GetHiveName = (EnemyDFHiveSystem hive) => hive.displayName;

	public static Func<EnemyData, string> GetEnemyName = (EnemyData enemy) => ((Proto)((ProtoSet<EnemyProto>)(object)LDB.enemies).Select((int)enemy.protoId)).name;

	public static Func<CosmicMessageData, string> GetMsgName = delegate(CosmicMessageData msg)
	{
		int protoId = msg.protoId;
		string text = "";
		text = Localization.Translate("宇宙讯息");
		if (protoId > CosmicMessageProto.maxProtoId)
		{
			text = Localization.Translate("黑雾通讯器");
		}
		return text;
	};

	private Harmony harmony;

	internal static List<CruiseAssistExtensionAPI> extensions = new List<CruiseAssistExtensionAPI>();

	public static double TargetRange = 0.0;

	public static EnemyData SelectTargetEnemy => GameMain.spaceSector.enemyPool[SelectTargetEnemyId];

	public static EnemyData TargetEnemy => GameMain.spaceSector.enemyPool[TargetEnemyId];

	public static VectorLF3 TargetUPos
	{
		get
		{
			//IL_000c: 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_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: 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_0098: Unknown result type (might be due to invalid IL or missing references)
			if (TargetPlanet != null)
			{
				return TargetPlanet.uPosition;
			}
			if (TargetHive != null)
			{
				return GameMain.spaceSector.astros[TargetHive.hiveAstroId - 1000000].uPos;
			}
			if (TargetEnemyId != 0)
			{
				VectorLF3 zero = VectorLF3.zero;
				ref EnemyData reference = ref GameMain.spaceSector.enemyPool[TargetEnemyId];
				GameMain.spaceSector.TransformFromAstro_ref(reference.astroId, ref zero, ref reference.pos);
				return zero;
			}
			if (TargetMsg != null)
			{
				return TargetMsg.uPosition;
			}
			if (TargetStar == null)
			{
				return GameMain.mainPlayer.uPosition;
			}
			return TargetStar.uPosition;
		}
	}

	public static bool CheckActive()
	{
		return State != CruiseAssistState.INACTIVE;
	}

	public void Awake()
	{
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Expected O, but got Unknown
		LogManager.Logger = ((BaseUnityPlugin)this).Logger;
		new CruiseAssistConfigManager(((BaseUnityPlugin)this).Config);
		ConfigManager.CheckConfig(ConfigManager.Step.AWAKE);
		harmony = new Harmony("nord.CruiseAssist.Patch");
		harmony.PatchAll(typeof(Patch_GameMain));
		harmony.PatchAll(typeof(Patch_UISailPanel));
		harmony.PatchAll(typeof(Patch_UIStarmap));
		harmony.PatchAll(typeof(Patch_UITechTree));
		harmony.PatchAll(typeof(Patch_PlayerMoveWalk));
		harmony.PatchAll(typeof(Patch_PlayerMoveDrift));
		harmony.PatchAll(typeof(Patch_PlayerMoveFly));
		harmony.PatchAll(typeof(Patch_PlayerMoveSail));
		harmony.PatchAll(typeof(Patch_DeterminLocalPlanet));
	}

	public void OnDestroy()
	{
		harmony.UnpatchSelf();
	}

	public void OnGUI()
	{
		//IL_0117: Unknown result type (might be due to invalid IL or missing references)
		//IL_011c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0168: Unknown result type (might be due to invalid IL or missing references)
		//IL_018f: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
		if (DSPGame.IsMenuDemo || GameMain.mainPlayer == null)
		{
			return;
		}
		UIGame uiGame = UIRoot.instance.uiGame;
		if (!uiGame.guideComplete || ((ManualBehaviour)uiGame.techTree).active || ((ManualBehaviour)uiGame.escMenu).active || ((ManualBehaviour)uiGame.dysonEditor).active || uiGame.hideAllUI0 || uiGame.hideAllUI1 || ((Object)(object)UIMilkyWayLoadingSplash.instance != (Object)null && ((ManualBehaviour)UIMilkyWayLoadingSplash.instance).active) || ((Object)(object)UIRoot.instance.uiMilkyWay != (Object)null && ((ManualBehaviour)UIRoot.instance.uiMilkyWay).active) || VFInput.inCombatScreenGUI || ((ManualBehaviour)uiGame.controlPanelWindow).active)
		{
			return;
		}
		bool extensionActive = false;
		extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
		{
			extensionActive |= extension.CheckActive();
		});
		if (GameMain.mainPlayer.sailing || ((ManualBehaviour)uiGame.starmap).active || extensionActive)
		{
			CruiseAssistMainUI.wIdx = (((ManualBehaviour)uiGame.starmap).active ? 1 : 0);
			float num = CruiseAssistMainUI.Scale / 100f;
			GUIUtility.ScaleAroundPivot(new Vector2(num, num), Vector2.zero);
			CruiseAssistMainUI.OnGUI();
			if (CruiseAssistStarListUI.Show[CruiseAssistMainUI.wIdx])
			{
				CruiseAssistStarListUI.OnGUI();
			}
			if (CruiseAssistConfigUI.Show[CruiseAssistMainUI.wIdx])
			{
				CruiseAssistConfigUI.OnGUI();
			}
			if (CruiseAssistDebugUI.Show)
			{
				CruiseAssistDebugUI.OnGUI();
			}
			bool flag = false;
			flag = ResetInput(CruiseAssistMainUI.Rect[CruiseAssistMainUI.wIdx], num);
			if (!flag && CruiseAssistStarListUI.Show[CruiseAssistMainUI.wIdx])
			{
				flag = ResetInput(CruiseAssistStarListUI.Rect[CruiseAssistMainUI.wIdx], num);
			}
			if (!flag && CruiseAssistConfigUI.Show[CruiseAssistMainUI.wIdx])
			{
				flag = ResetInput(CruiseAssistConfigUI.Rect[CruiseAssistMainUI.wIdx], num);
			}
			if (!flag && CruiseAssistDebugUI.Show)
			{
				flag = ResetInput(CruiseAssistDebugUI.Rect, num);
			}
			extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
			{
				extension.OnGUI();
			});
		}
	}

	private bool ResetInput(Rect rect, float scale)
	{
		//IL_0027: 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_0077: 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 && (((IEnumerable<int>)new int[3] { 0, 1, 2 }).Any((Func<int, bool>)Input.GetMouseButton) || Input.mouseScrollDelta.y != 0f))
		{
			Input.ResetInputAxes();
			return true;
		}
		return false;
	}

	public static void RegistExtension(CruiseAssistExtensionAPI extension)
	{
		extensions.Add(extension);
	}

	public static void UnregistExtension(Type type)
	{
		extensions.RemoveAll((CruiseAssistExtensionAPI extension) => extension.GetType().FullName == type.FullName);
	}

	public static void Deactivate()
	{
		//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
		SelectTargetStar = null;
		SelectTargetHive = null;
		SelectTargetPlanet = null;
		SelectTargetMsg = null;
		SelectTargetAstroId = 0;
		SelectTargetEnemyId = 0;
		SelectTargetMsgId = 0;
		GameMain.mainPlayer.navigation.indicatorAstroId = 0;
		GameMain.mainPlayer.navigation.indicatorEnemyId = 0;
		GameMain.mainPlayer.navigation.indicatorMsgId = 0;
		lockOn = false;
		AbortPreloadStar();
		extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
		{
			extension.SetInactive();
		});
		Player mainPlayer = GameMain.mainPlayer;
		if (lastState != CruiseAssistState.INACTIVE && State == CruiseAssistState.INACTIVE && mainPlayer.warping && mainPlayer.warpCommand)
		{
			mainPlayer.warpCommand = false;
			VFAudio.Create("warp-end", mainPlayer.transform, Vector3.zero, true, 0, -1, -1L);
		}
	}

	public static EnemyDFHiveSystem GetSeedsTargetHive(EnemyData seed)
	{
		//IL_0000: 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_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		if (seed.dfTinderId <= 0)
		{
			return null;
		}
		EnemyDFHiveSystem hiveByAstroId = GameMain.spaceSector.GetHiveByAstroId(seed.astroId);
		if (hiveByAstroId == null)
		{
			return null;
		}
		ref DFTinderComponent reference = ref hiveByAstroId.tinders.buffer[seed.dfTinderId];
		if (reference.id == seed.dfTinderId && reference.direction > 0 && reference.stage >= -1)
		{
			return GameMain.spaceSector.GetHiveByAstroId(reference.targetHiveAstroId);
		}
		return null;
	}

	public static void TryPreloadStar(StarData star)
	{
		if (GameMain.localStar == null && star?.id != preloadStar?.id && !star.loaded && GameMain.isRunning)
		{
			if (preloadStar != null)
			{
				AbortPreloadStar();
			}
			preloadStar = star;
			LogManager.LogInfo("Try to preload the star.");
		}
	}

	public static void AbortPreloadStar()
	{
		if (preloadStar != null)
		{
			if (GameMain.localStar?.id != preloadStar.id && preloadStar.loaded)
			{
				LogManager.LogInfo("Abort star's preloading.");
			}
			preloadStar = null;
		}
	}
}
public abstract class ConfigManager
{
	public enum Step
	{
		AWAKE,
		GAME_MAIN_BEGIN,
		UNIVERSE_GEN_CREATE_GALAXY,
		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_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: 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_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: 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_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: 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.");
	}
}
[HarmonyPatch(typeof(GameData), "ArriveStar")]
public class Patch_ArriveStar
{
	[HarmonyPrefix]
	public static bool ArriveStar_Prefix(StarData star)
	{
		if (CruiseAssistPlugin.preloadStar != null && CruiseAssistPlugin.preloadStar.id != star?.id)
		{
			return false;
		}
		return true;
	}
}
[HarmonyPatch(typeof(GameData), "DetermineLocalPlanet")]
public class Patch_DeterminLocalPlanet
{
	[HarmonyPrefix]
	public static bool DetermineLocalPlanet_Prefix(ref bool __result)
	{
		if (!CruiseAssistPlugin.PreventNonTargetLoadingFlag)
		{
			return true;
		}
		StarData val = null;
		PlanetData val2 = null;
		GameMain.data.GetNearestStarPlanet(ref val, ref val2);
		if (CruiseAssistPlugin.preloadStar != null && val?.id != CruiseAssistPlugin.preloadStar.id)
		{
			__result = false;
			return false;
		}
		return true;
	}
}
[HarmonyPatch(typeof(UIStarmap))]
public class Patch_UIStarmap
{
	[HarmonyPatch("_OnClose")]
	[HarmonyPrefix]
	public static void OnClose_Prefix()
	{
		ConfigManager.CheckConfig(ConfigManager.Step.STATE);
		CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
		{
			extension.CheckConfig(ConfigManager.Step.STATE.ToString());
		});
	}
}
[HarmonyPatch(typeof(UITechTree))]
public class Patch_UITechTree
{
	[HarmonyPatch("_OnOpen")]
	[HarmonyPrefix]
	public static void OnOpen_Prefix()
	{
		ConfigManager.CheckConfig(ConfigManager.Step.STATE);
		CruiseAssistPlugin.extensions.ForEach(delegate(CruiseAssistExtensionAPI extension)
		{
			extension.CheckConfig(ConfigManager.Step.STATE.ToString());
		});
	}
}
public class CruiseAssistConfigUI
{
	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 = float.MinValue;

	private static float lastCheckWindowTop = float.MinValue;

	public static float TempScale = 150f;

	private static GUIStyle windowStyle;

	private static GUIStyle mainWindowStyleLabelStyle;

	private static GUIStyle mainWindowStyleButtonStyle;

	private static GUIStyle uiScaleTitleLabelStyle;

	private static GUIStyle scaleSliderStyle;

	private static GUIStyle scaleSliderThumbStyle;

	private static GUIStyle uiScaleValueLabelStyle;

	private static GUIStyle scaleSetButtonStyle;

	private static GUIStyle toggleStyle;

	private static GUIStyle closeButtonStyle;

	public static void OnGUI()
	{
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Expected O, but got Unknown
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		CruiseAssistMainUI.StyleStuff();
		wIdx = CruiseAssistMainUI.wIdx;
		windowStyle = (GUIStyle)(((object)windowStyle) ?? ((object)new GUIStyle(CruiseAssistMainUI.WindowStyle)
		{
			fontSize = 11
		}));
		Rect[wIdx] = GUILayout.Window(99030293, Rect[wIdx], new WindowFunction(WindowFunction), "CruiseAssist - Config", 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 != float.MinValue && (((Rect)(ref Rect[wIdx])).x != lastCheckWindowLeft || ((Rect)(ref Rect[wIdx])).y != lastCheckWindowTop))
		{
			CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		lastCheckWindowLeft = ((Rect)(ref Rect[wIdx])).x;
		lastCheckWindowTop = ((Rect)(ref Rect[wIdx])).y;
	}

	public static void WindowFunction(int windowId)
	{
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		//IL_0093: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_0143: Unknown result type (might be due to invalid IL or missing references)
		//IL_0148: Unknown result type (might be due to invalid IL or missing references)
		//IL_0153: Unknown result type (might be due to invalid IL or missing references)
		//IL_015e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0166: Unknown result type (might be due to invalid IL or missing references)
		//IL_0194: Unknown result type (might be due to invalid IL or missing references)
		//IL_0199: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0220: Unknown result type (might be due to invalid IL or missing references)
		//IL_0225: Unknown result type (might be due to invalid IL or missing references)
		//IL_0230: Unknown result type (might be due to invalid IL or missing references)
		//IL_023b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0243: Unknown result type (might be due to invalid IL or missing references)
		//IL_0285: Unknown result type (might be due to invalid IL or missing references)
		//IL_028a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0295: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a0: 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_02d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_0313: Unknown result type (might be due to invalid IL or missing references)
		//IL_0318: Unknown result type (might be due to invalid IL or missing references)
		//IL_0323: 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_0368: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_040c: Unknown result type (might be due to invalid IL or missing references)
		//IL_045e: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0502: Unknown result type (might be due to invalid IL or missing references)
		//IL_0545: Unknown result type (might be due to invalid IL or missing references)
		//IL_054a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0555: Unknown result type (might be due to invalid IL or missing references)
		//IL_0560: Unknown result type (might be due to invalid IL or missing references)
		//IL_0589: Unknown result type (might be due to invalid IL or missing references)
		GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		mainWindowStyleLabelStyle = (GUIStyle)(((object)mainWindowStyleLabelStyle) ?? ((object)new GUIStyle(GUI.skin.label)
		{
			fixedWidth = 120f,
			fixedHeight = 20f,
			fontSize = 12,
			alignment = (TextAnchor)3
		}));
		GUILayout.Label("Main Window Style :", mainWindowStyleLabelStyle, Array.Empty<GUILayoutOption>());
		mainWindowStyleButtonStyle = (GUIStyle)(((object)mainWindowStyleButtonStyle) ?? ((object)new GUIStyle(CruiseAssistMainUI.BaseToolbarButtonStyle)
		{
			fixedWidth = 80f,
			fixedHeight = 20f,
			fontSize = 12
		}));
		string[] array = new string[2] { "FULL", "MINI" };
		int num = ((CruiseAssistMainUI.ViewMode != CruiseAssistMainUIViewMode.FULL) ? 1 : 0);
		GUI.changed = false;
		int num2 = GUILayout.Toolbar(num, array, mainWindowStyleButtonStyle, Array.Empty<GUILayoutOption>());
		if (GUI.changed)
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
		}
		if (num2 != num)
		{
			switch (num2)
			{
			case 0:
				CruiseAssistMainUI.ViewMode = CruiseAssistMainUIViewMode.FULL;
				break;
			case 1:
				CruiseAssistMainUI.ViewMode = CruiseAssistMainUIViewMode.MINI;
				break;
			}
			CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		GUILayout.EndHorizontal();
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		uiScaleTitleLabelStyle = (GUIStyle)(((object)uiScaleTitleLabelStyle) ?? ((object)new GUIStyle(GUI.skin.label)
		{
			fixedWidth = 60f,
			fixedHeight = 20f,
			fontSize = 12,
			alignment = (TextAnchor)3
		}));
		GUILayout.Label("UI Scale :", uiScaleTitleLabelStyle, Array.Empty<GUILayoutOption>());
		object obj = scaleSliderStyle;
		if (obj == null)
		{
			GUIStyle val = new GUIStyle(CruiseAssistMainUI.BaseHorizontalSliderStyle)
			{
				fixedWidth = 180f
			};
			val.margin.top = 10;
			val.alignment = (TextAnchor)3;
			obj = (object)val;
		}
		scaleSliderStyle = (GUIStyle)obj;
		scaleSliderThumbStyle = (GUIStyle)(((object)scaleSliderThumbStyle) ?? ((object)new GUIStyle(CruiseAssistMainUI.BaseHorizontalSliderThumbStyle)));
		TempScale = GUILayout.HorizontalSlider(TempScale, 80f, 240f, scaleSliderStyle, scaleSliderThumbStyle, Array.Empty<GUILayoutOption>());
		TempScale = (int)TempScale / 5 * 5;
		uiScaleValueLabelStyle = (GUIStyle)(((object)uiScaleValueLabelStyle) ?? ((object)new GUIStyle(GUI.skin.label)
		{
			fixedWidth = 40f,
			fixedHeight = 20f,
			fontSize = 12,
			alignment = (TextAnchor)3
		}));
		GUILayout.Label(TempScale.ToString("0") + "%", uiScaleValueLabelStyle, Array.Empty<GUILayoutOption>());
		object obj2 = scaleSetButtonStyle;
		if (obj2 == null)
		{
			GUIStyle val2 = new GUIStyle(CruiseAssistMainUI.BaseButtonStyle)
			{
				fixedWidth = 60f,
				fixedHeight = 18f
			};
			val2.margin.top = 6;
			val2.fontSize = 12;
			obj2 = (object)val2;
		}
		scaleSetButtonStyle = (GUIStyle)obj2;
		if (GUILayout.Button("SET", scaleSetButtonStyle, Array.Empty<GUILayoutOption>()))
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			CruiseAssistMainUI.Scale = TempScale;
			CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		GUILayout.EndHorizontal();
		toggleStyle = (GUIStyle)(((object)toggleStyle) ?? ((object)new GUIStyle(CruiseAssistMainUI.BaseToggleStyle)
		{
			fixedHeight = 20f,
			fontSize = 12,
			alignment = (TextAnchor)3
		}));
		GUI.changed = false;
		CruiseAssistPlugin.MarkVisitedFlag = GUILayout.Toggle(CruiseAssistPlugin.MarkVisitedFlag, "Mark the visited system and planet.", toggleStyle, Array.Empty<GUILayoutOption>());
		if (GUI.changed)
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		GUI.changed = false;
		CruiseAssistPlugin.SelectFocusFlag = GUILayout.Toggle(CruiseAssistPlugin.SelectFocusFlag, "Focus when target selected.", toggleStyle, Array.Empty<GUILayoutOption>());
		if (GUI.changed)
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		GUI.changed = false;
		CruiseAssistPlugin.HideDuplicateHistoryFlag = GUILayout.Toggle(CruiseAssistPlugin.HideDuplicateHistoryFlag, "Hide duplicate history.", toggleStyle, Array.Empty<GUILayoutOption>());
		if (GUI.changed)
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		GUI.changed = false;
		CruiseAssistPlugin.AutoDisableLockCursorFlag = GUILayout.Toggle(CruiseAssistPlugin.AutoDisableLockCursorFlag, "Disable lock cursor when starting sail mode.", toggleStyle, Array.Empty<GUILayoutOption>());
		if (GUI.changed)
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		GUI.changed = false;
		CruiseAssistPlugin.TrackDarkFogSeedsFlag = GUILayout.Toggle(CruiseAssistPlugin.TrackDarkFogSeedsFlag, "Display all active Dark Fog seeds in starlist.", toggleStyle, Array.Empty<GUILayoutOption>());
		if (GUI.changed)
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		GUI.changed = false;
		CruiseAssistPlugin.PreventNonTargetLoadingFlag = GUILayout.Toggle(CruiseAssistPlugin.PreventNonTargetLoadingFlag, "Prevent loading of non-target stars when CruiseAssist is active.", toggleStyle, Array.Empty<GUILayoutOption>());
		if (GUI.changed)
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		GUILayout.FlexibleSpace();
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		GUILayout.FlexibleSpace();
		closeButtonStyle = (GUIStyle)(((object)closeButtonStyle) ?? ((object)new GUIStyle(CruiseAssistMainUI.BaseButtonStyle)
		{
			fixedWidth = 80f,
			fixedHeight = 20f,
			fontSize = 12
		}));
		if (GUILayout.Button("Close", closeButtonStyle, Array.Empty<GUILayoutOption>()))
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			Show[wIdx] = false;
		}
		GUILayout.EndHorizontal();
		GUILayout.EndVertical();
		GUI.DragWindow();
	}
}
public class CruiseAssistDebugUI
{
	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 long nextCheckGameTick = long.MaxValue;

	private static Vector2 scrollPos = Vector2.zero;

	public static int trackedTinders = 0;

	public static void OnGUI()
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Expected O, but got Unknown
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Expected O, but got Unknown
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: 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(99030294, Rect, new WindowFunction(WindowFunction), "CruiseAssist - Debug", val, Array.Empty<GUILayoutOption>());
		_ = 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))
		{
			nextCheckGameTick = GameMain.gameTick + 300;
		}
		lastCheckWindowLeft = ((Rect)(ref Rect)).x;
		lastCheckWindowTop = ((Rect)(ref Rect)).y;
		if (nextCheckGameTick <= GameMain.gameTick)
		{
			ConfigManager.CheckConfig(ConfigManager.Step.STATE);
			nextCheckGameTick = long.MaxValue;
		}
	}

	public static void WindowFunction(int windowId)
	{
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Expected O, but got Unknown
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0271: Unknown result type (might be due to invalid IL or missing references)
		//IL_0295: 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($"trackedTinders={trackedTinders}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"CruiseAssist.lockOn={CruiseAssistPlugin.lockOn}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"CruiseAssist.preloadStar={CruiseAssistPlugin.preloadStar?.id}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.localStar={GameMain.localStar?.id}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.localPlanet={GameMain.localPlanet?.id}", val, Array.Empty<GUILayoutOption>());
		StarData preloadStar = CruiseAssistPlugin.preloadStar;
		GUILayout.Label($"CruiseAssist.preloadStar.loaded={((preloadStar != null) ? new bool?(preloadStar.loaded) : null)}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"CruiseAssist.ReticuleTargetStar.id={CruiseAssistPlugin.ReticuleTargetStar?.id}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"CruiseAssist.ReticuleTargetPlanet.id={CruiseAssistPlugin.ReticuleTargetPlanet?.id}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"CruiseAssist.SelectTargetStar.id={CruiseAssistPlugin.SelectTargetStar?.id}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"CruiseAssist.SelectTargetPlanet.id={CruiseAssistPlugin.SelectTargetPlanet?.id}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"CruiseAssist.SelectTargetMsg.protoId={CruiseAssistPlugin.SelectTargetMsg?.protoId}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"CruiseAssist.TargetUPos={CruiseAssistPlugin.TargetUPos}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.mainPlayer.uPosition={GameMain.mainPlayer.uPosition}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.mainPlayer.navigation.indicatorAstroId={GameMain.mainPlayer.navigation.indicatorAstroId}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.mainPlayer.navigation.indicatorEnemyId={GameMain.mainPlayer.navigation.indicatorEnemyId}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.mainPlayer.navigation.indicatorMsgId={GameMain.mainPlayer.navigation.indicatorMsgId}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.mainPlayer.controller.input0.w={GameMain.mainPlayer.controller.input0.w}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.mainPlayer.controller.input0.x={GameMain.mainPlayer.controller.input0.x}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.mainPlayer.controller.input0.y={GameMain.mainPlayer.controller.input0.y}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.mainPlayer.controller.input0.z={GameMain.mainPlayer.controller.input0.z}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.mainPlayer.controller.input1.w={GameMain.mainPlayer.controller.input1.w}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.mainPlayer.controller.input1.x={GameMain.mainPlayer.controller.input1.x}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.mainPlayer.controller.input1.y={GameMain.mainPlayer.controller.input1.y}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GameMain.mainPlayer.controller.input1.z={GameMain.mainPlayer.controller.input1.z}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"VFInput._sailSpeedUp={VFInput._sailSpeedUp}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"CruiseAssist.Enable={CruiseAssistPlugin.Enable}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"CruiseAssist.History={CruiseAssistPlugin.History.Count()}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label("CruiseAssist.History=" + ListUtils.ToString(CruiseAssistPlugin.History), val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GUI.skin.window.margin.top={GUI.skin.window.margin.top}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GUI.skin.window.border.top={GUI.skin.window.border.top}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GUI.skin.window.padding.top={GUI.skin.window.padding.top}", val, Array.Empty<GUILayoutOption>());
		GUILayout.Label($"GUI.skin.window.overflow.top={GUI.skin.window.overflow.top}", val, Array.Empty<GUILayoutOption>());
		GUILayout.EndScrollView();
		GUILayout.EndVertical();
		GUI.DragWindow();
	}
}
public enum CruiseAssistMainUIViewMode
{
	FULL,
	MINI
}
public class CruiseAssistStarListUI
{
	private static int wIdx = 0;

	public const float WindowWidth = 440f;

	public const float WindowHeight = 480f;

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

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

	public static int ListSelected = 0;

	public static int[] actionSelected = new int[3];

	private static float lastCheckWindowLeft = float.MinValue;

	private static float lastCheckWindowTop = float.MinValue;

	private static Vector2[] scrollPos = (Vector2[])(object)new Vector2[3]
	{
		Vector2.zero,
		Vector2.zero,
		Vector2.zero
	};

	private const string VisitedMark = "● ";

	private const string NonVisitMark = "";

	public static GUIStyle windowStyle = null;

	public static GUIStyle mainWindowStyleButtonStyle = null;

	public static GUIStyle nameLabelStyle = null;

	public static GUIStyle nRangeLabelStyle = null;

	public static GUIStyle hRangeLabelStyle = null;

	public static GUIStyle nActionButtonStyle = null;

	public static GUIStyle hActionButtonStyle = null;

	public static GUIStyle nSortButtonStyle = null;

	public static GUIStyle hSortButtonStyle = null;

	public static GUIStyle nViewButtonStyle = null;

	public static GUIStyle hViewButtonStyle = null;

	public static GUIStyle buttonStyle = null;

	public static GUIContent cheapText = null;

	public static string[][] listButtonModeName = new string[3][]
	{
		new string[2] { "Target", "Bookmark" },
		new string[3] { "Target", "Bookmark", "Delete" },
		new string[3] { "Target", "Sort", "Delete" }
	};

	public static GUIContent getCheapGUIContent(string text)
	{
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		cheapText = (GUIContent)(((object)cheapText) ?? ((object)new GUIContent()));
		cheapText.text = text;
		return cheapText;
	}

	public static void OnGUI()
	{
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Expected O, but got Unknown
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		wIdx = CruiseAssistMainUI.wIdx;
		windowStyle = (GUIStyle)(((object)windowStyle) ?? ((object)new GUIStyle(CruiseAssistMainUI.WindowStyle)));
		windowStyle.fontSize = 11;
		Rect[wIdx] = GUILayout.Window(99030292, Rect[wIdx], new WindowFunction(WindowFunction), "CruiseAssist - StarList", 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 != float.MinValue && (((Rect)(ref Rect[wIdx])).x != lastCheckWindowLeft || ((Rect)(ref Rect[wIdx])).y != lastCheckWindowTop))
		{
			CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		lastCheckWindowLeft = ((Rect)(ref Rect[wIdx])).x;
		lastCheckWindowTop = ((Rect)(ref Rect[wIdx])).y;
	}

	public static void WindowFunction(int windowId)
	{
		//IL_0022: 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_00e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_0117: Unknown result type (might be due to invalid IL or missing references)
		//IL_0165: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_022b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0254: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_02cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_0321: Unknown result type (might be due to invalid IL or missing references)
		//IL_053c: Unknown result type (might be due to invalid IL or missing references)
		//IL_059e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0603: Unknown result type (might be due to invalid IL or missing references)
		//IL_03df: Unknown result type (might be due to invalid IL or missing references)
		//IL_03e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_03e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f0: 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>());
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		mainWindowStyleButtonStyle = (GUIStyle)(((object)mainWindowStyleButtonStyle) ?? ((object)new GUIStyle(CruiseAssistMainUI.BaseButtonStyle)));
		mainWindowStyleButtonStyle.fixedWidth = 80f;
		mainWindowStyleButtonStyle.fixedHeight = 20f;
		mainWindowStyleButtonStyle.fontSize = 12;
		string[] array = new string[3] { "Normal", "History", "Bookmark" };
		GUI.changed = false;
		int num = GUILayout.Toolbar(ListSelected, array, mainWindowStyleButtonStyle, Array.Empty<GUILayoutOption>());
		if (GUI.changed)
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
		}
		if (num != ListSelected)
		{
			ListSelected = num;
			CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
		}
		GUILayout.EndHorizontal();
		scrollPos[ListSelected] = GUILayout.BeginScrollView(scrollPos[ListSelected], GUIStyle.none, CruiseAssistMainUI.BaseVerticalScrollBarStyle, Array.Empty<GUILayoutOption>());
		nameLabelStyle = (GUIStyle)(((object)nameLabelStyle) ?? ((object)new GUIStyle(GUI.skin.label)));
		nameLabelStyle.fixedWidth = 240f;
		nameLabelStyle.stretchHeight = true;
		nameLabelStyle.fontSize = 14;
		nameLabelStyle.alignment = (TextAnchor)3;
		nRangeLabelStyle = (GUIStyle)(((object)nRangeLabelStyle) ?? ((object)new GUIStyle(GUI.skin.label)));
		nRangeLabelStyle.fixedWidth = 60f;
		nRangeLabelStyle.fixedHeight = 20f;
		nRangeLabelStyle.fontSize = 14;
		nRangeLabelStyle.alignment = (TextAnchor)5;
		hRangeLabelStyle = (GUIStyle)(((object)hRangeLabelStyle) ?? ((object)new GUIStyle(nRangeLabelStyle)));
		hRangeLabelStyle.fixedHeight = 40f;
		nActionButtonStyle = (GUIStyle)(((object)nActionButtonStyle) ?? ((object)new GUIStyle(CruiseAssistMainUI.BaseButtonStyle)));
		nActionButtonStyle.fixedWidth = 40f;
		nActionButtonStyle.fixedHeight = 18f;
		nActionButtonStyle.margin.top = 6;
		nActionButtonStyle.fontSize = 12;
		hActionButtonStyle = (GUIStyle)(((object)hActionButtonStyle) ?? ((object)new GUIStyle(nActionButtonStyle)));
		hActionButtonStyle.margin.top = 16;
		nSortButtonStyle = (GUIStyle)(((object)nSortButtonStyle) ?? ((object)new GUIStyle(CruiseAssistMainUI.BaseButtonStyle)));
		nSortButtonStyle.fixedWidth = 20f;
		nSortButtonStyle.fixedHeight = 18f;
		nSortButtonStyle.margin.top = 6;
		nSortButtonStyle.fontSize = 12;
		hSortButtonStyle = (GUIStyle)(((object)hSortButtonStyle) ?? ((object)new GUIStyle(nSortButtonStyle)));
		hSortButtonStyle.margin.top = 16;
		nViewButtonStyle = (GUIStyle)(((object)nViewButtonStyle) ?? ((object)new GUIStyle(CruiseAssistMainUI.BaseButtonStyle)));
		nViewButtonStyle.fixedWidth = 20f;
		nViewButtonStyle.fixedHeight = 18f;
		nViewButtonStyle.margin.top = 6;
		nViewButtonStyle.fontSize = 12;
		hViewButtonStyle = (GUIStyle)(((object)hViewButtonStyle) ?? ((object)new GUIStyle(nViewButtonStyle)));
		hViewButtonStyle.margin.top = 16;
		if (ListSelected == 0)
		{
			List<DFTinderComponent> activeTinders = null;
			CruiseAssistDebugUI.trackedTinders = 0;
			if (CruiseAssistPlugin.TrackDarkFogSeedsFlag)
			{
				activeTinders = new List<DFTinderComponent>();
				EnemyDFHiveSystem[] dfHivesByAstro = GameMain.spaceSector.dfHivesByAstro;
				foreach (EnemyDFHiveSystem val in dfHivesByAstro)
				{
					if (val == null || val.tinderCount == 0)
					{
						continue;
					}
					CruiseAssistDebugUI.trackedTinders += val.tinders.cursor;
					for (int j = 1; j < val.tinders.cursor; j++)
					{
						if (((DFTinderComponent)(ref val.tinders.buffer[j])).ID > 0)
						{
							DFTinderComponent val2 = val.tinders.buffer[j];
							if (val2.stage >= -1 && val2.direction > 0)
							{
								activeTinders.Add(val2);
							}
						}
					}
				}
			}
			CollectionExtensions.Do<Tuple<StarData, double>>((IEnumerable<Tuple<StarData, double>>)(from tuple in GameMain.galaxy.stars.Select(delegate(StarData star)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_000c: 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_0016: Unknown result type (might be due to invalid IL or missing references)
					VectorLF3 val9 = star.uPosition - GameMain.mainPlayer.uPosition;
					return new Tuple<StarData, double>(star, ((VectorLF3)(ref val9)).magnitude);
				})
				orderby tuple.v2
				select tuple), (Action<Tuple<StarData, double>>)delegate(Tuple<StarData, double> tuple)
			{
				//IL_005d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0062: Unknown result type (might be due to invalid IL or missing references)
				//IL_0069: Unknown result type (might be due to invalid IL or missing references)
				//IL_0664: Unknown result type (might be due to invalid IL or missing references)
				//IL_0678: 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_00a5: 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_00ac: 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_00b8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
				//IL_06aa: Unknown result type (might be due to invalid IL or missing references)
				//IL_06be: Unknown result type (might be due to invalid IL or missing references)
				//IL_05f3: Unknown result type (might be due to invalid IL or missing references)
				//IL_05fd: Unknown result type (might be due to invalid IL or missing references)
				//IL_0602: Unknown result type (might be due to invalid IL or missing references)
				//IL_0607: Unknown result type (might be due to invalid IL or missing references)
				//IL_013f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0144: Unknown result type (might be due to invalid IL or missing references)
				//IL_0157: Unknown result type (might be due to invalid IL or missing references)
				//IL_016b: Unknown result type (might be due to invalid IL or missing references)
				//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
				//IL_017c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0194: Unknown result type (might be due to invalid IL or missing references)
				//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
				//IL_07c0: Unknown result type (might be due to invalid IL or missing references)
				//IL_0267: Unknown result type (might be due to invalid IL or missing references)
				//IL_0823: Unknown result type (might be due to invalid IL or missing references)
				//IL_0284: Unknown result type (might be due to invalid IL or missing references)
				//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
				StarData star3 = tuple.v1;
				double range = tuple.v2;
				string starName = CruiseAssistPlugin.GetStarName(star3);
				bool flag3 = false;
				List<Tuple<EnemyData, double>> list = new List<Tuple<EnemyData, double>>();
				VectorLF3 val6;
				if (activeTinders != null)
				{
					foreach (DFTinderComponent item in activeTinders)
					{
						EnemyDFHiveSystem hiveByAstroId = GameMain.spaceSector.GetHiveByAstroId(item.targetHiveAstroId);
						if (hiveByAstroId != null && hiveByAstroId.starData.id == star3.id)
						{
							EnemyData val5 = GameMain.spaceSector.enemyPool[item.enemyId];
							val6 = val5.pos - GameMain.mainPlayer.uPosition;
							double magnitude2 = ((VectorLF3)(ref val6)).magnitude;
							list.Add(new Tuple<EnemyData, double>(val5, magnitude2));
						}
					}
					list.Sort((Tuple<EnemyData, double> tuple1, Tuple<EnemyData, double> tuple2) => tuple1.v2.CompareTo(tuple2.v2));
					foreach (Tuple<EnemyData, double> item2 in list)
					{
						GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
						EnemyData v = item2.v1;
						double v2 = item2.v2;
						nameLabelStyle.normal.textColor = Color.red;
						nRangeLabelStyle.normal.textColor = Color.red;
						if (CruiseAssistPlugin.TargetEnemyId != 0 && v.id == CruiseAssistPlugin.TargetEnemyId)
						{
							nameLabelStyle.normal.textColor = CruiseAssistMainUI.enemyTextColor;
							nRangeLabelStyle.normal.textColor = CruiseAssistMainUI.enemyTextColor;
						}
						string text3 = starName + " ← " + CruiseAssistPlugin.GetEnemyName(v);
						GUILayout.Label(text3, nameLabelStyle, Array.Empty<GUILayoutOption>());
						float num5 = nameLabelStyle.CalcHeight(getCheapGUIContent(text3), nameLabelStyle.fixedWidth);
						GUILayout.FlexibleSpace();
						GUILayout.Label(CruiseAssistMainUI.RangeToString(v2), (num5 < 30f) ? nRangeLabelStyle : hRangeLabelStyle, Array.Empty<GUILayoutOption>());
						if (GUILayout.Button((actionSelected[ListSelected] == 0) ? "SET" : "-", (num5 < 30f) ? nActionButtonStyle : hActionButtonStyle, Array.Empty<GUILayoutOption>()))
						{
							VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
							if (actionSelected[ListSelected] == 0)
							{
								SelectEnemy(v.id);
							}
						}
						if (actionSelected[ListSelected] == 0 && GUILayout.Button("-", (num5 < 30f) ? nSortButtonStyle : hSortButtonStyle, Array.Empty<GUILayoutOption>()))
						{
							VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
						}
						GUILayout.EndHorizontal();
					}
				}
				UIStarmap starmap = UIRoot.instance.uiGame.starmap;
				if (GameMain.localStar != null && star3.id == GameMain.localStar.id)
				{
					flag3 = true;
				}
				else if ((star3.id == CruiseAssistPlugin.SelectTargetStar?.id || star3.id == starmap.focusStar?.star.id || star3.id == starmap.focusPlanet?.planet.star.id || star3.id == starmap.focusHive?.hive.starData.id || star3.id == starmap.viewStar?.id || star3.id == starmap.viewPlanet?.star.id || star3.id == starmap.viewHive?.starData.id) && GameMain.history.universeObserveLevel >= ((range >= 14400000.0) ? 4 : 3))
				{
					flag3 = true;
				}
				if (flag3)
				{
					CollectionExtensions.Do<Tuple<EnemyDFHiveSystem, double>>((IEnumerable<Tuple<EnemyDFHiveSystem, double>>)(from tuple2 in GameMain.spaceSector.dfHivesByAstro.Where((EnemyDFHiveSystem hive) => hive != null && hive.starData.id == star3.id && hive.hasAnyStructureOrUnit).Select(delegate(EnemyDFHiveSystem hive)
						{
							//IL_001c: Unknown result type (might be due to invalid IL or missing references)
							//IL_0026: 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_0030: Unknown result type (might be due to invalid IL or missing references)
							VectorLF3 val8 = GameMain.spaceSector.astros[hive.hiveAstroId - 1000000].uPos - GameMain.mainPlayer.uPosition;
							return new Tuple<EnemyDFHiveSystem, double>(hive, ((VectorLF3)(ref val8)).magnitude);
						})
						orderby tuple2.v2
						select tuple2), (Action<Tuple<EnemyDFHiveSystem, double>>)delegate(Tuple<EnemyDFHiveSystem, double> tuple2)
					{
						//IL_0023: Unknown result type (might be due to invalid IL or missing references)
						//IL_0037: Unknown result type (might be due to invalid IL or missing references)
						//IL_0064: Unknown result type (might be due to invalid IL or missing references)
						//IL_0078: Unknown result type (might be due to invalid IL or missing references)
						//IL_0130: Unknown result type (might be due to invalid IL or missing references)
						//IL_0192: Unknown result type (might be due to invalid IL or missing references)
						GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
						EnemyDFHiveSystem v5 = tuple2.v1;
						double v6 = tuple2.v2;
						nameLabelStyle.normal.textColor = Color.white;
						nRangeLabelStyle.normal.textColor = Color.white;
						if (CruiseAssistPlugin.SelectTargetHive != null && v5.hiveAstroId == CruiseAssistPlugin.SelectTargetHive.hiveAstroId)
						{
							nameLabelStyle.normal.textColor = CruiseAssistMainUI.hiveTextColor;
							nRangeLabelStyle.normal.textColor = CruiseAssistMainUI.hiveTextColor;
						}
						string text7 = starName + " - " + CruiseAssistPlugin.GetHiveName(v5);
						GUILayout.Label(text7, nameLabelStyle, Array.Empty<GUILayoutOption>());
						float num8 = nameLabelStyle.CalcHeight(getCheapGUIContent(text7), nameLabelStyle.fixedWidth);
						GUILayout.FlexibleSpace();
						GUILayout.Label(CruiseAssistMainUI.RangeToString(v6), (num8 < 30f) ? nRangeLabelStyle : hRangeLabelStyle, Array.Empty<GUILayoutOption>());
						if (GUILayout.Button((actionSelected[ListSelected] == 0) ? "SET" : "-", (num8 < 30f) ? nActionButtonStyle : hActionButtonStyle, Array.Empty<GUILayoutOption>()))
						{
							VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
							if (actionSelected[ListSelected] == 0)
							{
								SelectHive(star3, v5);
							}
						}
						if (actionSelected[ListSelected] == 0 && GUILayout.Button("V", (num8 < 30f) ? nViewButtonStyle : hViewButtonStyle, Array.Empty<GUILayoutOption>()))
						{
							VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
							if (actionSelected[ListSelected] == 0)
							{
								SelectHive(star3, v5, set: false);
							}
						}
						GUILayout.EndHorizontal();
					});
					IEnumerable<Tuple<PlanetData, double>> enumerable4 = star3.planets.Select(delegate(PlanetData planet)
					{
						//IL_0002: Unknown result type (might be due to invalid IL or missing references)
						//IL_000c: 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_0016: Unknown result type (might be due to invalid IL or missing references)
						VectorLF3 val7 = planet.uPosition - GameMain.mainPlayer.uPosition;
						return new Tuple<PlanetData, double>(planet, ((VectorLF3)(ref val7)).magnitude);
					});
					val6 = star3.uPosition - GameMain.mainPlayer.uPosition;
					CollectionExtensions.Do<Tuple<PlanetData, double>>((IEnumerable<Tuple<PlanetData, double>>)(from tuple2 in CollectionExtensions.AddItem<Tuple<PlanetData, double>>(enumerable4, new Tuple<PlanetData, double>(null, ((VectorLF3)(ref val6)).magnitude))
						orderby tuple2.v2
						select tuple2), (Action<Tuple<PlanetData, double>>)delegate(Tuple<PlanetData, double> tuple2)
					{
						//IL_0024: 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_0140: 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_0077: Unknown result type (might be due to invalid IL or missing references)
						//IL_008b: 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_0323: Unknown result type (might be due to invalid IL or missing references)
						GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
						PlanetData v3 = tuple2.v1;
						double v4 = tuple2.v2;
						nameLabelStyle.normal.textColor = Color.white;
						nRangeLabelStyle.normal.textColor = Color.white;
						float num7;
						if (v3 == null)
						{
							if (CruiseAssistPlugin.SelectTargetPlanet == null && CruiseAssistPlugin.SelectTargetStar != null && star3.id == CruiseAssistPlugin.SelectTargetStar.id)
							{
								nameLabelStyle.normal.textColor = Color.cyan;
								nRangeLabelStyle.normal.textColor = Color.cyan;
							}
							string text5 = starName;
							if (CruiseAssistPlugin.MarkVisitedFlag)
							{
								text5 = ((star3.planets.Where((PlanetData p) => p.factory != null).Count() > 0) ? "● " : "") + text5;
							}
							GUILayout.Label(text5, nameLabelStyle, Array.Empty<GUILayoutOption>());
							num7 = nameLabelStyle.CalcHeight(getCheapGUIContent(text5), nameLabelStyle.fixedWidth);
						}
						else
						{
							if (CruiseAssistPlugin.SelectTargetPlanet != null && v3.id == CruiseAssistPlugin.SelectTargetPlanet.id)
							{
								nameLabelStyle.normal.textColor = Color.cyan;
								nRangeLabelStyle.normal.textColor = Color.cyan;
							}
							string text6 = starName + " - " + CruiseAssistPlugin.GetPlanetName(v3);
							if (CruiseAssistPlugin.MarkVisitedFlag)
							{
								text6 = ((v3.factory != null) ? "● " : "") + text6;
							}
							GUILayout.Label(text6, nameLabelStyle, Array.Empty<GUILayoutOption>());
							num7 = nameLabelStyle.CalcHeight(getCheapGUIContent(text6), nameLabelStyle.fixedWidth);
						}
						GUILayout.FlexibleSpace();
						GUILayout.Label(CruiseAssistMainUI.RangeToString((v3 == null) ? range : v4), (num7 < 30f) ? nRangeLabelStyle : hRangeLabelStyle, Array.Empty<GUILayoutOption>());
						if (GUILayout.Button((actionSelected[ListSelected] == 0) ? "SET" : ((v3 == null) ? "-" : (CruiseAssistPlugin.Bookmark.Contains(v3.id) ? "DEL" : "ADD")), (num7 < 30f) ? nActionButtonStyle : hActionButtonStyle, Array.Empty<GUILayoutOption>()))
						{
							VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
							if (actionSelected[ListSelected] == 0)
							{
								SelectStar(star3, v3);
							}
							else if (v3 != null)
							{
								if (CruiseAssistPlugin.Bookmark.Contains(v3.id))
								{
									CruiseAssistPlugin.Bookmark.Remove(v3.id);
								}
								else if (CruiseAssistPlugin.Bookmark.Count <= 128)
								{
									CruiseAssistPlugin.Bookmark.Add(v3.id);
									CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
								}
							}
						}
						if (actionSelected[ListSelected] == 0 && GUILayout.Button("V", (num7 < 30f) ? nViewButtonStyle : hViewButtonStyle, Array.Empty<GUILayoutOption>()))
						{
							VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
							if (actionSelected[ListSelected] == 0)
							{
								SelectStar(star3, v3, set: false);
							}
						}
						GUILayout.EndHorizontal();
					});
				}
				else
				{
					GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
					nameLabelStyle.normal.textColor = Color.white;
					nRangeLabelStyle.normal.textColor = Color.white;
					if (CruiseAssistPlugin.SelectTargetStar != null && star3.id == CruiseAssistPlugin.SelectTargetStar.id)
					{
						nameLabelStyle.normal.textColor = Color.cyan;
						nRangeLabelStyle.normal.textColor = Color.cyan;
					}
					string text4 = starName;
					if (CruiseAssistPlugin.MarkVisitedFlag)
					{
						text4 = ((star3.planets.Where((PlanetData p) => p.factory != null).Count() > 0) ? "● " : "") + text4;
					}
					GUILayout.Label(text4, nameLabelStyle, Array.Empty<GUILayoutOption>());
					float num6 = nameLabelStyle.CalcHeight(getCheapGUIContent(text4), nameLabelStyle.fixedWidth);
					GUILayout.FlexibleSpace();
					GUILayout.Label(CruiseAssistMainUI.RangeToString(range), (num6 < 30f) ? nRangeLabelStyle : hRangeLabelStyle, Array.Empty<GUILayoutOption>());
					if (GUILayout.Button((actionSelected[ListSelected] == 0) ? "SET" : "-", (num6 < 30f) ? nActionButtonStyle : hActionButtonStyle, Array.Empty<GUILayoutOption>()))
					{
						VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
						if (actionSelected[ListSelected] == 0)
						{
							SelectStar(star3, null);
						}
					}
					if (actionSelected[ListSelected] == 0 && GUILayout.Button("V", (num6 < 30f) ? nViewButtonStyle : hViewButtonStyle, Array.Empty<GUILayoutOption>()))
					{
						VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
						if (actionSelected[ListSelected] == 0)
						{
							SelectStar(star3, null, set: false);
						}
					}
					GUILayout.EndHorizontal();
				}
			});
		}
		else if (ListSelected == 1 || ListSelected == 2)
		{
			bool highlighted = false;
			IEnumerable<int> enumerable2;
			if (ListSelected != 1)
			{
				IEnumerable<int> enumerable = CruiseAssistPlugin.Bookmark.ToList();
				enumerable2 = enumerable;
			}
			else
			{
				enumerable2 = Enumerable.Reverse(CruiseAssistPlugin.History);
			}
			IEnumerable<int> enumerable3 = enumerable2;
			if (ListSelected == 1 && actionSelected[ListSelected] != 2 && CruiseAssistPlugin.HideDuplicateHistoryFlag)
			{
				enumerable3 = enumerable3.Distinct();
			}
			int listIndex = -1;
			CollectionExtensions.Do<int>(enumerable3, (Action<int>)delegate(int id)
			{
				//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)
				//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)
				//IL_005d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_02ff: Unknown result type (might be due to invalid IL or missing references)
				//IL_01de: Unknown result type (might be due to invalid IL or missing references)
				//IL_0442: 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)
				int num2 = listIndex + 1;
				listIndex = num2;
				PlanetData val3 = GameMain.galaxy.PlanetById(id);
				if (val3 != null)
				{
					StarData star2 = val3.star;
					string text = CruiseAssistPlugin.GetStarName(star2);
					VectorLF3 val4 = val3.uPosition - GameMain.mainPlayer.uPosition;
					double magnitude = ((VectorLF3)(ref val4)).magnitude;
					nameLabelStyle.normal.textColor = Color.white;
					nRangeLabelStyle.normal.textColor = Color.white;
					if (!highlighted && CruiseAssistPlugin.SelectTargetPlanet != null && val3.id == CruiseAssistPlugin.SelectTargetPlanet.id)
					{
						nameLabelStyle.normal.textColor = Color.cyan;
						nRangeLabelStyle.normal.textColor = Color.cyan;
						highlighted = true;
					}
					GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
					string text2 = text + " - " + CruiseAssistPlugin.GetPlanetName(val3);
					if (CruiseAssistPlugin.MarkVisitedFlag)
					{
						text2 = ((val3.factory != null) ? "● " : "") + text2;
					}
					GUILayout.Label(text2, nameLabelStyle, Array.Empty<GUILayoutOption>());
					float num3 = nameLabelStyle.CalcHeight(getCheapGUIContent(text2), nameLabelStyle.fixedWidth);
					GUILayout.FlexibleSpace();
					GUILayout.Label(CruiseAssistMainUI.RangeToString(magnitude), (num3 < 30f) ? nRangeLabelStyle : hRangeLabelStyle, Array.Empty<GUILayoutOption>());
					if (ListSelected == 2 && actionSelected[ListSelected] == 1)
					{
						int num4 = CruiseAssistPlugin.Bookmark.IndexOf(id);
						bool flag = num4 == 0;
						bool flag2 = num4 == CruiseAssistPlugin.Bookmark.Count - 1;
						if (GUILayout.Button(flag2 ? "-" : "↓", (num3 < 30f) ? nSortButtonStyle : hSortButtonStyle, Array.Empty<GUILayoutOption>()))
						{
							VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
							if (!flag2)
							{
								CruiseAssistPlugin.Bookmark.RemoveAt(num4);
								CruiseAssistPlugin.Bookmark.Insert(num4 + 1, id);
							}
						}
						if (GUILayout.Button(flag ? "-" : "↑", (num3 < 30f) ? nSortButtonStyle : hSortButtonStyle, Array.Empty<GUILayoutOption>()))
						{
							VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
							if (!flag)
							{
								CruiseAssistPlugin.Bookmark.RemoveAt(num4);
								CruiseAssistPlugin.Bookmark.Insert(num4 - 1, id);
							}
						}
					}
					else
					{
						if (GUILayout.Button((actionSelected[ListSelected] == 0) ? "SET" : ((actionSelected[ListSelected] != 2) ? (CruiseAssistPlugin.Bookmark.Contains(id) ? "DEL" : "ADD") : ((ListSelected == 1 && listIndex == 0) ? "-" : "DEL")), (num3 < 30f) ? nActionButtonStyle : hActionButtonStyle, Array.Empty<GUILayoutOption>()))
						{
							VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
							if (actionSelected[ListSelected] == 0)
							{
								SelectStar(star2, val3);
							}
							else if (actionSelected[ListSelected] == 1)
							{
								if (ListSelected == 1)
								{
									if (CruiseAssistPlugin.Bookmark.Contains(id))
									{
										CruiseAssistPlugin.Bookmark.Remove(id);
									}
									else if (CruiseAssistPlugin.Bookmark.Count <= 128)
									{
										CruiseAssistPlugin.Bookmark.Add(id);
										CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
									}
								}
							}
							else if (actionSelected[ListSelected] == 2)
							{
								if (ListSelected == 1)
								{
									if (listIndex != 0)
									{
										CruiseAssistPlugin.History.RemoveAt(CruiseAssistPlugin.History.Count - 1 - listIndex);
										CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
									}
								}
								else if (ListSelected == 2)
								{
									CruiseAssistPlugin.Bookmark.Remove(val3.id);
									CruiseAssistMainUI.NextCheckGameTick = GameMain.gameTick + 300;
								}
							}
						}
						if (actionSelected[ListSelected] == 0 && GUILayout.Button("V", (num3 < 30f) ? nViewButtonStyle : hViewButtonStyle, Array.Empty<GUILayoutOption>()))
						{
							VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
							if (actionSelected[ListSelected] == 0)
							{
								SelectStar(star2, val3, set: false);
							}
						}
					}
					GUILayout.EndHorizontal();
				}
			});
		}
		GUILayout.EndScrollView();
		GUILayout.FlexibleSpace();
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		buttonStyle = (GUIStyle)(((object)buttonStyle) ?? ((object)new GUIStyle(CruiseAssistMainUI.BaseButtonStyle)));
		buttonStyle.fixedWidth = 80f;
		buttonStyle.fixedHeight = 20f;
		buttonStyle.fontSize = 12;
		if (GUILayout.Button(listButtonModeName[ListSelected][actionSelected[ListSelected]], buttonStyle, Array.Empty<GUILayoutOption>()))
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			actionSelected[ListSelected]++;
			actionSelected[ListSelected] %= listButtonModeName[ListSelected].Length;
		}
		GUILayout.FlexibleSpace();
		if (GUILayout.Button("Close", buttonStyle, Array.Empty<GUILayoutOption>()))
		{
			VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
			Show[wIdx] = false;
		}
		GUILayout.EndHorizontal();
		GUILayout.EndVertical();
		GUI.DragWindow();
	}

	public static void SelectStar(StarData star, PlanetData planet, bool set = true)
	{
		UIGame uiGame = UIRoot.instance.uiGame;
		if (CruiseAssistPlugin.SelectFocusFlag && ((ManualBehaviour)uiGame.starmap).active)
		{
			if (star != null)
			{
				UIStarmapStar val = uiGame.starmap.starUIs.Where((UIStarmapStar s) => s.star.id == star.id).FirstOrDefault();
				if ((Object)(object)val != (Object)null)
				{
					UIStarmap_OnStarClick(uiGame.starmap, val);
					uiGame.starmap.OnCursorFunction2Click(0);
				}
			}
			if (planet != null)
			{
				UIStarmapPlanet val2 = uiGame.starmap.planetUIs.Where((UIStarmapPlanet p) => p.planet.id == planet.id).FirstOrDefault();
				if ((Object)(object)val2 != (Object)null)
				{
					UIStarmap_OnPlanetClick(uiGame.starmap, val2);
					uiGame.starmap.OnCursorFunction2Click(0);
				}
			}
		}
		if (set)
		{
			if (planet != null)
			{
				GameMain.mainPlayer.navigation.indicatorAstroId = planet.id;
			}
			else if (star != null)
			{
				GameMain.mainPlayer.navigation.indicatorAstroId = star.id * 100;
			}
			else
			{
				GameMain.mainPlayer.navigation.indicatorAstroId = 0;
			}
		}
	}

	public static void SelectHive(StarData star, EnemyDFHiveSystem hive, bool set = true)
	{
		UIGame uiGame = UIRoot.instance.uiGame;
		if (CruiseAssistPlugin.SelectFocusFlag && ((ManualBehaviour)uiGame.starmap).active)
		{
			if (star != null)
			{
				UIStarmapStar val = uiGame.starmap.starUIs.Where((UIStarmapStar s) => s.star.id == star.id).FirstOrDefault();
				if ((Object)(object)val != (Object)null)
				{
					UIStarmap_OnStarClick(uiGame.starmap, val);
					uiGame.starmap.OnCursorFunction2Click(0);
				}
			}
			if (hive != null)
			{
				UIStarmapDFHive val2 = uiGame.starmap.dfHiveUIs.Where((UIStarmapDFHive p) => p.hive.hiveAstroId == hive.hiveAstroId).FirstOrDefault();
				if ((Object)(object)val2 != (Object)null)
				{
					UIStarmap_OnHiveClick(uiGame.starmap, val2);
					uiGame.starmap.OnCursorFunction2Click(0);
				}
			}
		}
		if (set)
		{
			if (hive != null)
			{
				GameMain.mainPlayer.navigation.indicatorAstroId = hive.hiveAstroId;
			}
			else if (star != null)
			{
				GameMain.mainPlayer.navigation.indicatorAstroId = star.id * 100;
			}
			else
			{
				GameMain.mainPlayer.navigation.indicatorAstroId = 0;
			}
		}
	}

	public static void SelectEnemy(int enemyId)
	{
		if (enemyId != 0)
		{
			GameMain.mainPlayer.navigation.indicatorEnemyId = enemyId;
		}
	}

	private static void UIStarmap_OnStarClick(UIStarmap starmap, UIStarmapStar star)
	{
		Traverse val = Traverse.Create((object)starmap);
		if ((Object)(object)starmap.focusStar != (Object)(object)star)
		{
			starmap.screenCameraController.DisablePositionLock();
			starmap.focusPlanet = null;
			starmap.focusHive = null;
			starmap.focusStar = star;
			val.Field("_lastClickTime").SetValue((object)0.0);
		}
		val.Field("forceUpdateCursorView").SetValue((object)true);
	}

	private static void UIStarmap_OnPlanetClick(UIStarmap starmap, UIStarmapPlanet planet)
	{
		Traverse val = Traverse.Create((object)starmap);
		if ((Object)(object)starmap.focusPlanet != (Object)(object)planet)
		{
			if ((starmap.viewPlanet != null && planet.planet != starmap.viewPlanet) || starmap.viewStar != null)
			{
				starmap.screenCameraController.DisablePositionLock();
			}
			starmap.focusPlanet = planet;
			starmap.focusHive = null;
			starmap.focusStar = null;
			val.Field("_lastClickTime").SetValue((object)0.0);
		}
		val.Field("forceUpdateCursorView").SetValue((object)tru

AutoPilot.dll

Decompiled 2 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
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.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("0.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)
		{
			ConfigManager.Bind("Base", "ModVersion", "1.3.0", "Don't change.").Value = "1.3.0";
			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", 400).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 AutoPilotConfigUI
{
	public static GUIStyle guistyle = null;

	public static GUIStyle guistyle2 = null;

	public static GUIStyle guistyle3 = null;

	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_0023: 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_0048: Expected O, but got Unknown
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: 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_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: 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)
		//IL_0334: Unknown result type (might be due to invalid IL or missing references)
		//IL_038b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0431: Unknown result type (might be due to invalid IL or missing references)
		//IL_03e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_044d: Unknown result type (might be due to invalid IL or missing references)
		GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
		guistyle = (GUIStyle)(((object)guistyle) ?? ((object)new GUIStyle(GUI.skin.label)));
		guistyle.fontSize = 12;
		guistyle.fixedHeight = 20f;
		guistyle.alignment = (TextAnchor)3;
		guistyle2 = (GUIStyle)(((object)guistyle2) ?? ((object)new GUIStyle(CruiseAssistMainUI.BaseTextFieldStyle)));
		guistyle2.fontSize = 12;
		guistyle2.fixedWidth = 60f;
		guistyle.fixedHeight = 20f;
		guistyle2.alignment = (TextAnchor)5;
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		guistyle.fixedWidth = 240f;
		GUILayout.Label(Localization.Translate("Min Energy Percent (0-100 default:20)"), guistyle, Array.Empty<GUILayoutOption>());
		GUILayout.FlexibleSpace();
		string instr = GUILayout.TextField(TempMinEnergyPer, guistyle2, Array.Empty<GUILayoutOption>());
		SetValue(ref TempMinEnergyPer, instr, 0, 100, ref AutoPilotPlugin.Conf.MinEnergyPer);
		guistyle.fixedWidth = 20f;
		GUILayout.Label("%", guistyle, Array.Empty<GUILayoutOption>());
		GUILayout.EndHorizontal();
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		guistyle.fixedWidth = 240f;
		GUILayout.Label(Localization.Translate("Max Speed (0-2000 default:2000)"), guistyle, Array.Empty<GUILayoutOption>());
		GUILayout.FlexibleSpace();
		string instr2 = GUILayout.TextField(TempMaxSpeed, guistyle2, Array.Empty<GUILayoutOption>());
		SetValue(ref TempMaxSpeed, instr2, 0, 2000, ref AutoPilotPlugin.Conf.MaxSpeed);
		guistyle.fixedWidth = 20f;
		GUILayout.Label("m/s", guistyle, Array.Empty<GUILayoutOption>());
		GUILayout.EndHorizontal();
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		guistyle.fixedWidth = 240f;
		GUILayout.Label(Localization.Translate("Warp Min Range (0-60 default:2)"), guistyle, Array.Empty<GUILayoutOption>());
		GUILayout.FlexibleSpace();
		string instr3 = GUILayout.TextArea(TempWarpMinRangeAU, guistyle2, Array.Empty<GUILayoutOption>());
		SetValue(ref TempWarpMinRangeAU, instr3, 0, 60, ref AutoPilotPlugin.Conf.WarpMinRangeAU);
		guistyle.fixedWidth = 20f;
		GUILayout.Label("AU", guistyle, Array.Empty<GUILayoutOption>());
		GUILayout.EndHorizontal();
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		guistyle.fixedWidth = 240f;
		GUILayout.Label(Localization.Translate("Speed to warp (0-2000 default:400)"), guistyle, Array.Empty<GUILayoutOption>());
		GUILayout.FlexibleSpace();
		string instr4 = GUILayout.TextArea(TempSpeedToWarp, guistyle2, Array.Empty<GUILayoutOption>());
		SetValue(ref TempSpeedToWarp, instr4, 0, 2000, ref AutoPilotPlugin.Conf.SpeedToWarp);
		guistyle.fixedWidth = 20f;
		GUILayout.Label("m/s", guistyle, Array.Empty<GUILayoutOption>());
		GUILayout.EndHorizontal();
		guistyle3 = (GUIStyle)(((object)guistyle3) ?? ((object)new GUIStyle(CruiseAssistMainUI.BaseToggleStyle)));
		guistyle3.fixedHeight = 20f;
		guistyle3.fontSize = 12;
		guistyle3.alignment = (TextAnchor)6;
		GUI.changed = false;
		AutoPilotPlugin.Conf.LocalWarpFlag = GUILayout.Toggle(AutoPilotPlugin.Conf.LocalWarpFlag, Localization.Translate("Warp to planet in local system."), guistyle3, 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."), guistyle3, 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."), guistyle3, 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 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_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Expected O, but got Unknown
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Expected O, but got Unknown
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: 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>());
		_ = 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_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Expected O, but got Unknown
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: 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)
		//IL_0061: Unknown result type (might be due to invalid IL or missing references)
		//IL_0066: Unknown result type (might be due to invalid IL or missing references)
		//IL_0226: Unknown result type (might be due to invalid IL or missing references)
		//IL_022b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0232: Unknown result type (might be due to invalid IL or missing references)
		//IL_0272: Unknown result type (might be due to invalid IL or missing references)
		//IL_0279: Expected O, but got Unknown
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		//IL_008c: 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_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ab: 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)
		//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0141: Unknown result type (might be due to invalid IL or missing references)
		//IL_0143: Unknown result type (might be due to invalid IL or missing references)
		//IL_0148: Unknown result type (might be due to invalid IL or missing references)
		//IL_014a: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c4: 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>());
		GUILayout.Label($"safeToGo={AutoPilotPlugin.safeToGo}", 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 bool CheckActive()
	{
		return AutoPilotPlugin.State == AutoPilotState.ACTIVE;
	}

	public void CheckConfig(string step)
	{
		EnumUtils.TryParse<ConfigManager.Step>(step, out var result);
		ConfigManager.CheckConfig(result);
	}

	public void SetTargetAstroId(int astroId)
	{
		LogManager.LogInfo("Trying set auto start.");
		AutoPilotPlugin.State = ((!AutoPilotPlugin.Conf.AutoStartFlag) ? AutoPilotState.INACTIVE : AutoPilotState.ACTIVE);
		AutoPilotPlugin.InputSailSpeedUp = false;
	}

	public bool OperateWalk(PlayerMove_Walk __instance)
	{
		//IL_0089: 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_0099: 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_00a3: 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_0089: 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_0099: 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_00a3: 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_0089: 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_0099: 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_00a3: 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_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: 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_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_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: 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_017f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0184: Unknown result type (might be due to invalid IL or missing references)
		//IL_0190: Unknown result type (might be due to invalid IL or missing references)
		//IL_0195: Unknown result type (might be due to invalid IL or missing references)
		//IL_019a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0299: 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_02a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ee: 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_031c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0321: Unknown result type (might be due to invalid IL or missing references)
		//IL_0328: Unknown result type (might be due to invalid IL or missing references)
		//IL_0340: Unknown result type (might be due to invalid IL or missing references)
		//IL_0345: Unknown result type (might be due to invalid IL or missing references)
		//IL_034c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0351: Unknown result type (might be due to invalid IL or missing references)
		//IL_0356: Unknown result type (might be due to invalid IL or missing references)
		//IL_0358: Unknown result type (might be due to invalid IL or missing references)
		//IL_035c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0361: Unknown result type (might be due to invalid IL or missing references)
		//IL_0366: Unknown result type (might be due to invalid IL or missing references)
		//IL_0388: Unknown result type (might be due to invalid IL or missing references)
		//IL_038d: Unknown result type (might be due to invalid IL or missing references)
		//IL_038f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0394: Unknown result type (might be due to invalid IL or missing references)
		//IL_0266: Unknown result type (might be due to invalid IL or missing references)
		if (AutoPilotPlugin.lastVisitedPlanet != null)
		{
			if (GameMain.localStar != null)
			{
				VectorLF3 uPosition = ((PlayerAction)__instance).player.uPosition;
				VectorLF3 targetUPos = CruiseAssistPlugin.TargetUPos;
				VectorLF3 val = AutoPilotPlugin.lastVisitedPlanet.uPosition - uPosition;
				VectorLF3 val2 = targetUPos - uPosition;
				double num = Math.Abs(VectorLF3.Dot(val, val2)) / ((VectorLF3)(ref val2)).magnitude;
				VectorLF3 val3 = ((VectorLF3)(ref val2)).normalized * num - val;
				if (VectorLF3.Dot(val, val2) < 0.0 || ((VectorLF3)(ref val2)).magnitude < num || ((VectorLF3)(ref val3)).magnitude > (double)AutoPilotPlugin.lastVisitedPlanet.realRadius + 400.0)
				{
					AutoPilotPlugin.safeToGo = true;
				}
				else
				{
					AutoPilotPlugin.safeToGo = false;
				}
			}
			else
			{
				AutoPilotPlugin.safeToGo = true;
			}
		}
		else
		{
			AutoPilotPlugin.safeToGo = true;
		}
		bool result;
		if (AutoPilotPlugin.State == AutoPilotState.INACTIVE)
		{
			result = false;
		}
		else
		{
			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)
			{
				result = false;
				AutoPilotPlugin.warped = true;
			}
			else if (AutoPilotPlugin.EnergyPer < (double)AutoPilotPlugin.Conf.MinEnergyPer)
			{
				result = false;
			}
			else
			{
				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 && AutoPilotPlugin.safeToGo)
				{
					if ((AutoPilotPlugin.Conf.LocalWarpFlag || GameMain.localStar == null || CruiseAssistPlugin.TargetStar.id != GameMain.localStar.id || CruiseAssistPlugin.TargetEnemyId != 0) && (double)AutoPilotPlugin.Conf.WarpMinRangeAU * 40000.0 <= CruiseAssistPlugin.TargetRange && (double)AutoPilotPlugin.Conf.SpeedToWarp <= AutoPilotPlugin.Speed && 1 <= AutoPilotPlugin.WarperCount && mecha.coreEnergy > mecha.warpStartPowerPerSpeed * (double)mecha.maxWarpSpeed && !AutoPilotPlugin.warped && mecha.UseWarper())
					{
						player.warpCommand = true;
						AutoPilotPlugin.warped = true;
						VFAudio.Create("warp-begin", player.transform, Vector3.zero, true, 0, -1, -1L);
					}
					result = false;
				}
				else
				{
					if (GameMain.localPlanet != null)
					{
						AutoPilotPlugin.lastVisitedPlanet = GameMain.localPlanet;
					}
					if (AutoPilotPlugin.lastVisitedPlanet == null)
					{
						return false;
					}
					VectorLF3 val4 = player.uPosition - AutoPilotPlugin.lastVisitedPlanet.uPosition;
					if (AutoPilotPlugin.safeToGo && (GameMain.localPlanet == null || ((VectorLF3)(ref val4)).magnitude > (double)AutoPilotPlugin.lastVisitedPlanet.realRadius + 400.0))
					{
						result = false;
					}
					else
					{
						VectorLF3 val5 = val4;
						AutoPilotPlugin.LeavePlanet = true;
						float num2 = Vector3.Angle(VectorLF3.op_Implicit(val5), VectorLF3.op_Implicit(player.uVelocity));
						float num3 = 1.6f / Mathf.Max(10f, num2);
						VectorLF3 val6 = VectorLF3.op_Implicit(Vector3.Slerp(VectorLF3.op_Implicit(player.uVelocity), VectorLF3.op_Implicit(((VectorLF3)(ref val5)).normalized * Math.Max(AutoPilotPlugin.Speed, 200.0)), num3));
						val6 -= player.uVelocity;
						player.controller.actionSail.UseSailEnergy(ref val6, 1.5);
						player.uVelocity += val6;
						result = true;
					}
				}
			}
		}
		return result;
	}

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

	public void CancelOperate()
	{
		SetInactive();
	}

	public void OnGUI()
	{
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		_ = 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_0027: 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_007f: 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 && (((IEnumerable<int>)new int[3] { 0, 1, 2 }).Any((Func<int, bool>)Input.GetMouseButton) || Input.mouseScrollDelta.y != 0f))
		{
			Input.ResetInputAxes();
			return true;
		}
		return false;
	}
}
internal class AutoPilotMainUI
{
	public static GUIStyle guistyle = null;

	public static GUIStyle guistyle2 = null;

	public static GUIStyle guistyle3 = null;

	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_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: 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_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Invalid comparison between Unknown and I4
		//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e6: Expected O, but got Unknown
		//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
		wIdx = CruiseAssistMainUI.wIdx;
		CruiseAssistMainUIViewMode viewMode = CruiseAssistMainUI.ViewMode;
		if ((int)viewMode != 0)
		{
			if ((int)viewMode == 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 windowStyle = CruiseAssistMainUI.WindowStyle;
		windowStyle.fontSize = 11;
		Rect[wIdx] = GUILayout.Window(99031291, Rect[wIdx], new WindowFunction(WindowFunction), "AutoPilot", windowStyle, 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_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Invalid comparison between Unknown and I4
		//IL_02b8: 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_0335: Unknown result type (might be due to invalid IL or missing references)
		//IL_030b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0366: Unknown result type (might be due to invalid IL or missing references)
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_03cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_045b: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_018f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0188: Unknown result type (might be due to invalid IL or missing references)
		//IL_0181: Unknown result type (might be due to invalid IL or missing references)
		//IL_0203: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0268: Unknown result type (might be due to invalid IL or missing references)
		//IL_0261: 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 = (GUIStyle)(((object)guistyle) ?? ((object)new GUIStyle(GUI.skin.label)));
			guistyle.fontSize = 12;
			GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
			string text = ((AutoPilotPlugin.State == AutoPilotState.INACTIVE) ? "---" : (((double)AutoPilotPlugin.Conf.MinEnergyPer < AutoPilotPlugin.EnergyPer) ? "OK" : "NG"));
			guistyle.normal.textColor = ((text == "OK") ? Color.cyan : ((text == "NG") ? Color.red : Color.white));
			GUILayout.Label("Energy : " + text, guistyle, 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"))))));
			guistyle.normal.textColor = ((text2 == "OK") ? Color.cyan : ((text2 == "NG") ? Color.red : Color.white));
			GUILayout.Label("Warper : " + text2, guistyle, Array.Empty<GUILayoutOption>());
			GUILayout.EndVertical();
			GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
			string text3 = ((AutoPilotPlugin.State == AutoPilotState.INACTIVE) ? "---" : (AutoPilotPlugin.LeavePlanet ? "ON" : "OFF"));
			guistyle.normal.textColor = ((text3 == "ON") ? Color.cyan : Color.white);
			GUILayout.Label("Leave Planet : " + text3, guistyle, Array.Empty<GUILayoutOption>());
			string text4 = ((AutoPilotPlugin.State == AutoPilotState.INACTIVE) ? "---" : (AutoPilotPlugin.SpeedUp ? "ON" : "OFF"));
			guistyle.normal.textColor = ((text4 == "ON") ? Color.cyan : Color.white);
			GUILayout.Label("Speed UP : " + text4, guistyle, Array.Empty<GUILayoutOption>());
			GUILayout.EndVertical();
			GUILayout.EndHorizontal();
			GUILayout.FlexibleSpace();
		}
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		guistyle2 = (GUIStyle)(((object)guistyle2) ?? ((object)new GUIStyle(GUI.skin.label)));
		guistyle2.fixedWidth = 160f;
		guistyle2.fixedHeight = 32f;
		guistyle2.fontSize = 14;
		guistyle2.alignment = (TextAnchor)3;
		if (AutoPilotPlugin.State == AutoPilotState.INACTIVE)
		{
			guistyle2.normal.textColor = Color.white;
			GUILayout.Label("Auto Pilot Inactive.", guistyle2, Array.Empty<GUILayoutOption>());
		}
		else
		{
			guistyle2.normal.textColor = Color.cyan;
			GUILayout.Label("Auto Pilot Active.", guistyle2, Array.Empty<GUILayoutOption>());
		}
		GUILayout.FlexibleSpace();
		guistyle3 = (GUIStyle)(((object)guistyle3) ?? ((object)new GUIStyle(CruiseAssistMainUI.BaseButtonStyle)));
		guistyle3.fixedWidth = 50f;
		guistyle3.fixedHeight = 18f;
		guistyle3.fontSize = 11;
		guistyle3.alignment = (TextAnchor)4;
		GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
		if (GUILayout.Button("Config", guistyle3, 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", guistyle3, 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("-", guistyle3, Array.Empty<GUILayoutOption>());
		if (GUILayout.Button("Stop", guistyle3, 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("nord.AutoPilot", "Autopilot-N", "1.3.0")]
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 = 400;

		public static bool LocalWarpFlag = false;

		public static bool AutoStartFlag = true;

		public static bool IgnoreGravityFlag = true;

		public static bool MainWindowJoinFlag = true;
	}

	public const string ModGuid = "nord.AutoPilot";

	public const string ModName = "Autopilot-N";

	public const string ModVersion = "1.3.0";

	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 static bool safeToGo = false;

	public static PlanetData lastVisitedPlanet = null;

	public static bool warped = false;

	public void Awake()
	{
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Expected O, but got Unknown
		LogManager.Logger = ((BaseUnityPlugin)this).Logger;
		new AutoPilotConfigManager(((BaseUnityPlugin)this).Config);
		ConfigManager.CheckConfig(ConfigManager.Step.AWAKE);
		harmony = new Harmony("nord.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_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: 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_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: 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_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: 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 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;
		}
	}
}