Decompiled source of PlanetFinder v1.1.5

PlanetFinder.dll

Decompiled 3 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Threading;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("PlanetFinder")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("PlanetFinder")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("43cacced-1c08-475c-80c9-8a77158a4bd9")]
[assembly: AssemblyFileVersion("1.1.5.0")]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.1.5.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class IsReadOnlyAttribute : Attribute
	{
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace PlanetFinder
{
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "PlanetFinder";

		public const string PLUGIN_NAME = "PlanetFinder";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace PlanetFinderMod
{
	public class CruiseAssistIntg
	{
		public MethodInfo _selectPlanetOrStar;

		public readonly bool canSelectPlanet;

		public CruiseAssistIntg()
		{
			canSelectPlanet = false;
			_selectPlanetOrStar = null;
			try
			{
				if (Chainloader.PluginInfos.TryGetValue("tanu.CruiseAssist", out var value) && (Object)(object)value.Instance != (Object)null)
				{
					Type type = ((object)value.Instance).GetType().Assembly.GetType("tanu.CruiseAssist.CruiseAssistStarListUI");
					_selectPlanetOrStar = type.GetMethod("SelectStar", new Type[2]
					{
						typeof(StarData),
						typeof(PlanetData)
					});
					canSelectPlanet = _selectPlanetOrStar != null;
				}
			}
			catch (Exception)
			{
			}
		}

		public void SelectPlanetOrStar(PlanetData planet, StarData star = null)
		{
			if (!(_selectPlanetOrStar == null))
			{
				if (planet != null && star == null)
				{
					star = planet.star;
				}
				if (_selectPlanetOrStar != null && (planet != null || star != null))
				{
					object[] parameters = new object[2] { star, planet };
					_selectPlanetOrStar.Invoke(null, parameters);
				}
			}
		}
	}
	public class DSPStarMapMemoIntg
	{
		public readonly bool canGetSignalIconId;

		public readonly bool canGetDesc;

		private FieldInfo _memoPool;

		private FieldInfo _signalIconIdField;

		private FieldInfo _descField;

		public DSPStarMapMemoIntg()
		{
			canGetSignalIconId = false;
			canGetDesc = false;
			try
			{
				if (Chainloader.PluginInfos.TryGetValue("Appun.DSP.plugin.StarMapMemo", out var value) && (Object)(object)value.Instance != (Object)null)
				{
					Type type = ((object)value.Instance).GetType().Assembly.GetType("DSPStarMapMemo.MemoPool");
					Type type2 = ((object)value.Instance).GetType().Assembly.GetType("DSPStarMapMemo.MemoPool+Memo");
					if (type != null && type2 != null)
					{
						_signalIconIdField = type2.GetField("signalIconId");
						_descField = type2.GetField("desc");
						_memoPool = type.GetField("memoPool", BindingFlags.Static | BindingFlags.Public);
					}
					canGetSignalIconId = _memoPool != null && _signalIconIdField != null;
					canGetDesc = _memoPool != null && _descField != null;
				}
			}
			catch (Exception)
			{
			}
		}

		public int GetSignalIconId(int planetId)
		{
			if (_memoPool != null && _signalIconIdField != null)
			{
				object value = _memoPool.GetValue(null);
				if (value == null)
				{
					return 0;
				}
				object[] array = new object[2] { planetId, null };
				if ((bool)value.GetType().InvokeMember("TryGetValue", BindingFlags.InvokeMethod, null, value, array) && array.Length == 2 && array[1] != null)
				{
					object value2 = _signalIconIdField.GetValue(array[1]);
					if (value2 != null)
					{
						int[] array2 = value2 as int[];
						for (int i = 0; i < array2.Length; i++)
						{
							if (array2[i] != 0)
							{
								return array2[i];
							}
						}
					}
				}
			}
			return 0;
		}

		public string GetDesc(int planetId)
		{
			if (_memoPool != null && _descField != null)
			{
				object value = _memoPool.GetValue(null);
				if (value == null)
				{
					return null;
				}
				object[] array = new object[2] { planetId, null };
				if ((bool)value.GetType().InvokeMember("TryGetValue", BindingFlags.InvokeMethod, null, value, array) && array.Length == 2 && array[1] != null)
				{
					object value2 = _descField.GetValue(array[1]);
					if (value2 != null)
					{
						return value2 as string;
					}
				}
			}
			return null;
		}
	}
	public class LSTMIntg
	{
		public MethodInfo _openPlanetId;

		public readonly bool canOpenPlanetId;

		public LSTMIntg()
		{
			canOpenPlanetId = false;
			_openPlanetId = null;
			try
			{
				if (Chainloader.PluginInfos.TryGetValue("com.hetima.dsp.LSTM", out var value) && (Object)(object)value.Instance != (Object)null)
				{
					_openPlanetId = ((object)value.Instance).GetType().GetMethod("IntegrationOpenPlanetId", new Type[1] { typeof(int) });
					canOpenPlanetId = _openPlanetId != null;
				}
			}
			catch (Exception)
			{
			}
		}

		public void OpenPlanetId(int planetId)
		{
			if (_openPlanetId != null)
			{
				object[] parameters = new object[1] { planetId };
				_openPlanetId.Invoke(null, parameters);
			}
		}
	}
	public class MyCheckBox : MonoBehaviour
	{
		public UIButton uiButton;

		public Image checkImage;

		public RectTransform rectTrans;

		public Text labelText;

		public ConfigEntry<bool> config;

		public static RectTransform CreateCheckBox(ConfigEntry<bool> config, string label = "", int fontSize = 17)
		{
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = Object.Instantiate<GameObject>(((Component)UIRoot.instance.uiGame.buildMenu.uxFacilityCheck).gameObject);
			((Object)val).name = "my-checkbox";
			MyCheckBox cb = val.AddComponent<MyCheckBox>();
			cb.config = config;
			Transform transform = val.transform;
			RectTransform val2 = (RectTransform)(object)((transform is RectTransform) ? transform : null);
			cb.rectTrans = val2;
			ResetAnchor(val2);
			val2.anchoredPosition3D = new Vector3(0f, 0f, 0f);
			cb.uiButton = val.GetComponent<UIButton>();
			MyCheckBox myCheckBox = cb;
			Transform obj = val.transform.Find("checked");
			myCheckBox.checkImage = ((obj != null) ? ((Component)obj).GetComponent<Image>() : null);
			Transform val3 = val.transform.Find("text");
			if ((Object)(object)val3 != (Object)null)
			{
				Object.DestroyImmediate((Object)(object)((Component)val3).GetComponent<Localizer>());
				cb.labelText = ((Component)val3).GetComponent<Text>();
				cb.labelText.fontSize = fontSize;
				cb.SetLabelText(label);
			}
			cb.uiButton.onClick += cb.OnClick;
			cb.SettingChanged();
			config.SettingChanged += delegate
			{
				cb.SettingChanged();
			};
			return cb.rectTrans;
			static void ResetAnchor(RectTransform rect_)
			{
				//IL_0001: 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)
				rect_.anchorMax = Vector2.zero;
				rect_.anchorMin = Vector2.zero;
			}
		}

		public void SetLabelText(string val)
		{
			if ((Object)(object)labelText != (Object)null)
			{
				labelText.text = val;
			}
		}

		public void SettingChanged()
		{
			if (config.Value != ((Behaviour)checkImage).enabled)
			{
				((Behaviour)checkImage).enabled = config.Value;
			}
		}

		public void OnClick(int obj)
		{
			config.Value = !config.Value;
		}
	}
	public class MyKeyBinder : MonoBehaviour
	{
		public ConfigEntry<KeyboardShortcut> config;

		[SerializeField]
		public Text functionText;

		[SerializeField]
		public Text keyText;

		[SerializeField]
		public InputField setTheKeyInput;

		[SerializeField]
		public Toggle setTheKeyToggle;

		[SerializeField]
		public RectTransform rectTrans;

		[SerializeField]
		public UIButton inputUIButton;

		[SerializeField]
		public Text conflictText;

		[SerializeField]
		public Text waitingText;

		[SerializeField]
		public UIButton setDefaultUIButton;

		[SerializeField]
		public UIButton setNoneKeyUIButton;

		private bool nextNotOn;

		private KeyCode _lastKey;

		private static KeyCode[] modKeys;

		public static RectTransform CreateKeyBinder(ConfigEntry<KeyboardShortcut> config, string label = "")
		{
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0182: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
			UIKeyEntry val = Object.Instantiate<UIKeyEntry>(UIRoot.instance.optionWindow.entryPrefab);
			((Component)val).gameObject.SetActive(true);
			GameObject gameObject = ((Component)val).gameObject;
			((Object)gameObject).name = "my-keybinder";
			MyKeyBinder kb = gameObject.AddComponent<MyKeyBinder>();
			kb.config = config;
			kb.functionText = val.functionText;
			kb.keyText = val.keyText;
			kb.setTheKeyInput = val.setTheKeyInput;
			kb.setTheKeyToggle = val.setTheKeyToggle;
			kb.rectTrans = val.rectTrans;
			kb.inputUIButton = val.inputUIButton;
			kb.conflictText = val.conflictText;
			kb.waitingText = val.waitingText;
			kb.setDefaultUIButton = val.setDefaultUIButton;
			kb.setNoneKeyUIButton = val.setNoneKeyUIButton;
			kb.functionText.text = label;
			kb.functionText.fontSize = 17;
			Transform transform = ((Component)kb.keyText).transform;
			((RectTransform)((transform is RectTransform) ? transform : null)).anchoredPosition = new Vector2(20f, -22f);
			kb.keyText.fontSize = 17;
			Transform transform2 = ((Component)((Component)kb.inputUIButton).transform.parent).transform;
			((RectTransform)((transform2 is RectTransform) ? transform2 : null)).anchoredPosition = new Vector2(20f, -52f);
			Transform transform3 = ((Component)kb.setDefaultUIButton).transform;
			((RectTransform)((transform3 is RectTransform) ? transform3 : null)).anchoredPosition = new Vector2(160f, -52f);
			Transform transform4 = ((Component)kb.setNoneKeyUIButton).transform;
			((RectTransform)((transform4 is RectTransform) ? transform4 : null)).anchoredPosition = new Vector2(260f, -52f);
			Transform transform5 = gameObject.transform;
			Transform obj = ((transform5 is RectTransform) ? transform5 : null);
			ResetAnchor((RectTransform)(object)obj);
			Object.Destroy((Object)(object)val);
			((Component)kb.setNoneKeyUIButton).gameObject.SetActive(false);
			kb.SettingChanged();
			config.SettingChanged += delegate
			{
				kb.SettingChanged();
			};
			kb.inputUIButton.onClick += kb.OnInputUIButtonClick;
			kb.setDefaultUIButton.onClick += kb.OnSetDefaultKeyClick;
			return (RectTransform)(object)obj;
			static void ResetAnchor(RectTransform rect_)
			{
				//IL_0001: 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)
				rect_.anchorMax = Vector2.zero;
				rect_.anchorMin = Vector2.zero;
			}
		}

		private void Update()
		{
			if (!setTheKeyToggle.isOn && inputUIButton.highlighted)
			{
				setTheKeyToggle.isOn = true;
			}
			if (!setTheKeyToggle.isOn)
			{
				return;
			}
			if (!inputUIButton._isPointerEnter && Input.GetKeyDown((KeyCode)323))
			{
				inputUIButton.highlighted = false;
				setTheKeyToggle.isOn = false;
				Reset();
				return;
			}
			if (!inputUIButton.highlighted)
			{
				setTheKeyToggle.isOn = false;
				Reset();
				return;
			}
			((Component)waitingText).gameObject.SetActive(true);
			if (TrySetValue())
			{
				setTheKeyToggle.isOn = false;
				inputUIButton.highlighted = false;
				Reset();
			}
		}

		public bool TrySetValue()
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			if (Input.GetKey((KeyCode)27))
			{
				VFInput.UseEscape();
				return true;
			}
			if (Input.GetKey((KeyCode)323) || Input.GetKey((KeyCode)324))
			{
				return true;
			}
			if (!GetIunptKeys() && (int)_lastKey != 0)
			{
				string pressedKey = GetPressedKey();
				if (string.IsNullOrEmpty(pressedKey))
				{
					return false;
				}
				_lastKey = (KeyCode)0;
				config.Value = KeyboardShortcut.Deserialize(pressedKey);
				return true;
			}
			return false;
		}

		public string GetPressedKey()
		{
			//IL_002f: 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)
			string text = ((object)(KeyCode)(ref _lastKey)).ToString();
			if (string.IsNullOrEmpty(text))
			{
				return null;
			}
			string text2 = "";
			KeyCode[] array = modKeys;
			for (int i = 0; i < array.Length; i++)
			{
				KeyCode val = array[i];
				if (Input.GetKey(val))
				{
					text2 = text2 + "+" + ((object)(KeyCode)(ref val)).ToString();
				}
			}
			if (!string.IsNullOrEmpty(text2))
			{
				text += text2;
			}
			return text;
		}

		public bool GetIunptKeys()
		{
			//IL_0025: 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_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: 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)
			bool result = false;
			new List<KeyCode>();
			foreach (KeyCode value in Enum.GetValues(typeof(KeyCode)))
			{
				if ((int)value != 0 && !modKeys.Contains(value) && Input.GetKey(value))
				{
					_lastKey = value;
					result = true;
				}
			}
			return result;
		}

		public void Reset()
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			((Component)conflictText).gameObject.SetActive(false);
			((Component)waitingText).gameObject.SetActive(false);
			((Selectable)setDefaultUIButton.button).Select();
			_lastKey = (KeyCode)0;
		}

		public void OnInputUIButtonClick(int data)
		{
			inputUIButton.highlighted = true;
			if (nextNotOn)
			{
				nextNotOn = false;
				inputUIButton.highlighted = false;
				setTheKeyToggle.isOn = false;
				((Component)waitingText).gameObject.SetActive(false);
			}
		}

		public void OnSetDefaultKeyClick(int data)
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//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)
			config.Value = (KeyboardShortcut)((ConfigEntryBase)config).DefaultValue;
			Text obj = keyText;
			KeyboardShortcut value = config.Value;
			obj.text = ((KeyboardShortcut)(ref value)).Serialize();
		}

		public void OnSetNoneKeyClick(int data)
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//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)
			config.Value = (KeyboardShortcut)((ConfigEntryBase)config).DefaultValue;
			Text obj = keyText;
			KeyboardShortcut value = config.Value;
			obj.text = ((KeyboardShortcut)(ref value)).Serialize();
		}

		public void SettingChanged()
		{
			//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)
			Text obj = keyText;
			KeyboardShortcut value = config.Value;
			obj.text = ((KeyboardShortcut)(ref value)).Serialize();
		}

		static MyKeyBinder()
		{
			KeyCode[] array = new KeyCode[12];
			RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
			modKeys = (KeyCode[])(object)array;
		}
	}
	public class MyListView : MonoBehaviour
	{
		public RecyclingListView recyclingListView;

		public ScrollRect m_ScrollRect;

		public static MyListView CreateListView(MonoBehaviour preFab, RecyclingListView.ItemDelegate dlgt, string goName = "", Transform parent = null, float vsWidth = 16f)
		{
			//IL_0186: 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_015a: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = Object.Instantiate<GameObject>(((Component)UIRoot.instance.uiGame.tutorialWindow.entryList).gameObject);
			if ((Object)(object)parent != (Object)null)
			{
				val.transform.SetParent(parent, false);
			}
			if (!string.IsNullOrEmpty(goName))
			{
				((Object)val).name = goName;
			}
			UIListView component = val.GetComponent<UIListView>();
			GameObject gameObject = ((Component)component.m_ContentPanel).gameObject;
			MyListView myListView = val.AddComponent<MyListView>();
			myListView.recyclingListView = gameObject.AddComponent<RecyclingListView>();
			Object.Destroy((Object)(object)gameObject.transform.GetChild(0));
			gameObject.transform.DetachChildren();
			myListView.recyclingListView.ChildPrefab = preFab;
			myListView.recyclingListView.ItemCallback = dlgt;
			myListView.m_ScrollRect = component.m_ScrollRect;
			myListView.recyclingListView.scrollRect = myListView.m_ScrollRect;
			((Component)myListView.recyclingListView.scrollRect.horizontalScrollbar).gameObject.SetActive(false);
			((Component)myListView.recyclingListView.scrollRect.verticalScrollbar).gameObject.SetActive(true);
			myListView.recyclingListView.scrollRect.vertical = true;
			myListView.recyclingListView.scrollRect.horizontal = false;
			myListView.recyclingListView.RowPadding = 4f;
			Image component2 = ((Component)myListView.recyclingListView.scrollRect.verticalScrollbar).GetComponent<Image>();
			if ((Object)(object)component2 != (Object)null)
			{
				((Graphic)component2).color = new Color(0f, 0f, 0f, 0.62f);
			}
			Transform transform = ((Component)myListView.recyclingListView.scrollRect.verticalScrollbar).transform;
			RectTransform val2 = (RectTransform)(object)((transform is RectTransform) ? transform : null);
			val2.sizeDelta = new Vector2(vsWidth, val2.sizeDelta.y);
			Object.Destroy((Object)(object)component.m_ContentPanel);
			Object.Destroy((Object)(object)component);
			return myListView;
		}

		public void Clear()
		{
			recyclingListView.Clear();
		}

		public void SetItemCount(int num)
		{
			recyclingListView.RowCount = num;
		}
	}
	public class MySlider : MonoBehaviour
	{
		public Slider slider;

		public RectTransform rectTrans;

		public Text labelText;

		public string labelFormat;

		public ConfigEntry<float> config;

		private bool _sliderEventLock;

		public static RectTransform CreateSlider(ConfigEntry<float> config, float minValue, float maxValue, string format = "0", float width = 0f)
		{
			//IL_0075: 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)
			//IL_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0216: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = Object.Instantiate<GameObject>(((Component)UIRoot.instance.optionWindow.audioVolumeComp).gameObject);
			((Object)val).name = "my-slider";
			val.SetActive(true);
			MySlider sl = val.AddComponent<MySlider>();
			sl.config = config;
			Transform transform = val.transform;
			RectTransform val2 = (RectTransform)(object)((transform is RectTransform) ? transform : null);
			sl.rectTrans = val2;
			ResetAnchor(val2);
			if (width > 0f)
			{
				val2.sizeDelta = new Vector2(width, val2.sizeDelta.y);
			}
			sl.slider = val.GetComponent<Slider>();
			sl.slider.minValue = minValue;
			sl.slider.maxValue = maxValue;
			((UnityEventBase)sl.slider.onValueChanged).RemoveAllListeners();
			((UnityEvent<float>)(object)sl.slider.onValueChanged).AddListener((UnityAction<float>)sl.SliderChanged);
			MySlider mySlider = sl;
			Slider obj = sl.slider;
			object obj2;
			if (obj == null)
			{
				obj2 = null;
			}
			else
			{
				RectTransform handleRect = obj.handleRect;
				if (handleRect == null)
				{
					obj2 = null;
				}
				else
				{
					Transform obj3 = ((Transform)handleRect).Find("Text");
					obj2 = ((obj3 != null) ? ((Component)obj3).GetComponent<Text>() : null);
				}
			}
			mySlider.labelText = (Text)obj2;
			if ((Object)(object)sl.labelText != (Object)null)
			{
				sl.labelText.fontSize = 14;
				Transform transform2 = ((Component)sl.labelText).transform;
				((RectTransform)((transform2 is RectTransform) ? transform2 : null)).sizeDelta = new Vector2(22f, 22f);
			}
			sl.labelFormat = format;
			Transform obj4 = ((Component)sl.slider).transform.Find("Background");
			Image val3 = ((obj4 != null) ? ((Component)obj4).GetComponent<Image>() : null);
			if ((Object)(object)val3 != (Object)null)
			{
				((Graphic)val3).color = new Color(0.5f, 0.5f, 0.5f, 0.5f);
			}
			Image component = ((Component)sl.slider.fillRect).GetComponent<Image>();
			if ((Object)(object)component != (Object)null)
			{
				((Graphic)component).color = new Color(1f, 1f, 1f, 0.28f);
			}
			sl.SettingChanged();
			sl.UpdateLabel();
			config.SettingChanged += delegate
			{
				sl.SettingChanged();
			};
			return sl.rectTrans;
			static void ResetAnchor(RectTransform rect_)
			{
				//IL_0001: 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_0026: Unknown result type (might be due to invalid IL or missing references)
				rect_.anchorMax = Vector2.zero;
				rect_.anchorMin = Vector2.zero;
				rect_.anchoredPosition3D = new Vector3(0f, 0f, 0f);
			}
		}

		public void SettingChanged()
		{
			if (_sliderEventLock)
			{
				return;
			}
			_sliderEventLock = true;
			if (config.Value != slider.value)
			{
				float num = config.Value;
				if (num > slider.maxValue)
				{
					num = slider.maxValue;
				}
				else if (num < slider.minValue)
				{
					num = slider.minValue;
				}
				slider.value = num;
				UpdateLabel();
			}
			_sliderEventLock = false;
		}

		public void UpdateLabel()
		{
			if ((Object)(object)labelText != (Object)null)
			{
				labelText.text = config.Value.ToString(labelFormat);
			}
		}

		public void SliderChanged(float val)
		{
			if (!_sliderEventLock)
			{
				_sliderEventLock = true;
				float value = Mathf.Round(slider.value);
				config.Value = value;
				UpdateLabel();
				_sliderEventLock = false;
			}
		}
	}
	public interface MyWindow
	{
		void TryClose();

		bool isFunctionWindow();
	}
	public static class MyWindowCtl
	{
		public static class Patch
		{
			[HarmonyPostfix]
			[HarmonyPatch(typeof(UIGame), "_OnCreate")]
			public static void UIGame__OnCreate_Postfix()
			{
				_created = true;
			}

			[HarmonyPostfix]
			[HarmonyPatch(typeof(UIGame), "_OnDestroy")]
			public static void UIGame__OnDestroy_Postfix()
			{
				foreach (ManualBehaviour window in _windows)
				{
					window._Destroy();
				}
				_windows.Clear();
			}

			[HarmonyPostfix]
			[HarmonyPatch(typeof(UIGame), "_OnInit")]
			public static void UIGame__OnInit_Postfix(UIGame __instance)
			{
				foreach (ManualBehaviour window in _windows)
				{
					window._Init(window.data);
				}
				_inited = true;
			}

			[HarmonyPostfix]
			[HarmonyPatch(typeof(UIGame), "_OnFree")]
			public static void UIGame__OnFree_Postfix()
			{
				foreach (ManualBehaviour window in _windows)
				{
					window._Free();
				}
			}

			[HarmonyPostfix]
			[HarmonyPatch(typeof(UIGame), "_OnUpdate")]
			public static void UIGame__OnUpdate_Postfix()
			{
				if (GameMain.isPaused || !GameMain.isRunning)
				{
					return;
				}
				foreach (ManualBehaviour window in _windows)
				{
					window._Update();
				}
			}

			[HarmonyPostfix]
			[HarmonyPatch(typeof(UIGame), "ShutAllFunctionWindow")]
			public static void UIGame_ShutAllFunctionWindow_Postfix()
			{
				foreach (ManualBehaviour window in _windows)
				{
					if (useMyWindowInterface)
					{
						if ((window as MyWindow).isFunctionWindow())
						{
							(window as MyWindow).TryClose();
						}
					}
					else
					{
						window._Close();
					}
				}
			}
		}

		public static bool useMyWindowInterface = true;

		public static List<ManualBehaviour> _windows = new List<ManualBehaviour>(4);

		internal static bool _created = false;

		internal static bool _inited = false;

		public static T CreateWindow<T>(string name, string title = "") where T : Component
		{
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Expected O, but got Unknown
			UITankWindow tankWindow = UIRoot.instance.uiGame.tankWindow;
			GameObject val = Object.Instantiate<GameObject>(((Component)tankWindow).gameObject, ((Component)tankWindow).transform.parent);
			((Object)val).name = name;
			val.SetActive(false);
			Object.Destroy((Object)(object)val.GetComponent<UITankWindow>());
			object obj = val.AddComponent<T>();
			ManualBehaviour val2 = (ManualBehaviour)((obj is ManualBehaviour) ? obj : null);
			for (int i = 0; i < val.transform.childCount; i++)
			{
				GameObject gameObject = ((Component)val.transform.GetChild(i)).gameObject;
				if (((Object)gameObject).name == "panel-bg")
				{
					Button componentInChildren = gameObject.GetComponentInChildren<Button>();
					if ((Object)(object)componentInChildren != (Object)null)
					{
						((UnityEvent)componentInChildren.onClick).AddListener(new UnityAction(val2._Close));
					}
				}
				else if (((Object)gameObject).name != "shadow" && ((Object)gameObject).name != "panel-bg")
				{
					Object.Destroy((Object)(object)gameObject);
				}
			}
			SetTitle(val2, title);
			val2._Create();
			if (_inited)
			{
				val2._Init(val2.data);
			}
			_windows.Add(val2);
			return (T)(object)((val2 is T) ? val2 : null);
		}

		public static void SetTitle(ManualBehaviour win, string title)
		{
			Text titleText = GetTitleText(win);
			if (Object.op_Implicit((Object)(object)titleText))
			{
				titleText.text = title;
			}
		}

		public static Text GetTitleText(ManualBehaviour win)
		{
			Transform obj = ((Component)win).gameObject.transform.Find("panel-bg/title-text");
			if (obj == null)
			{
				return null;
			}
			return ((Component)obj).gameObject.GetComponent<Text>();
		}

		public static RectTransform GetRectTransform(ManualBehaviour win)
		{
			return ((Component)win).GetComponent<RectTransform>();
		}

		public static void SetRect(ManualBehaviour win, RectTransform rect)
		{
			((Component)win).GetComponent<RectTransform>();
		}

		public static void OpenWindow(ManualBehaviour win)
		{
			win._Open();
			((Component)win).transform.SetAsLastSibling();
		}

		public static void CloseWindow(ManualBehaviour win)
		{
			win._Close();
		}
	}
	[BepInPlugin("com.hetima.dsp.PlanetFinder", "PlanetFinder", "1.1.5")]
	public class PLFN : BaseUnityPlugin
	{
		private static class Patch
		{
			internal static bool _initialized;

			[HarmonyPrefix]
			[HarmonyPatch(typeof(GameMain), "Begin")]
			public static void GameMain_Begin_Prefix()
			{
				if (!_initialized)
				{
					_initialized = true;
					aLSTMIntg = new LSTMIntg();
					aDSPStarMapMemoIntg = new DSPStarMapMemoIntg();
					aCruiseAssistIntg = new CruiseAssistIntg();
					planetFinder = UIPlanetFinderWindow.CreateInstance();
					_configWin = UIConfigWindow.CreateWindow();
					recentPlanets = new List<PlanetData>(100);
					CreateUI();
				}
				planetFinder?.BeginGame();
			}

			[HarmonyPrefix]
			[HarmonyPatch(typeof(DSPGame), "EndGame")]
			public static void DSPGame_EndGame_Prefix()
			{
				planetFinder?.EndGame();
			}

			[HarmonyPostfix]
			[HarmonyPatch(typeof(GameData), "ArrivePlanet")]
			public static void GameData_ArrivePlanet(PlanetData planet)
			{
				AddRecentPlanet(planet);
			}

			[HarmonyPostfix]
			[HarmonyPatch(typeof(UIPlanetDetail), "RefreshDynamicProperties")]
			public static void UIPlanetDetail_RefreshDynamicProperties(UIPlanetDetail __instance)
			{
				if (showFavButtonInStarmap.Value && favBtnGO.activeSelf)
				{
					favBtnGO.GetComponent<UIButton>().highlighted = IsFavPlanet(__instance.planet);
				}
			}
		}

		public const string __NAME__ = "PlanetFinder";

		public const string __GUID__ = "com.hetima.dsp.PlanetFinder";

		internal static ManualLogSource Logger;

		public static UIPlanetFinderWindow planetFinder;

		public static UIConfigWindow _configWin;

		public static List<PlanetData> recentPlanets;

		public static ConfigEntry<KeyboardShortcut> mainWindowHotkey;

		public static ConfigEntry<bool> showButtonInMainPanel;

		public static ConfigEntry<bool> showButtonInStarmap;

		public static ConfigEntry<bool> showFavButtonInStarmap;

		public static ConfigEntry<bool> showPowerState;

		public static ConfigEntry<bool> showPrefix;

		public static ConfigEntry<string> gasGiantPrefix;

		public static ConfigEntry<string> tidalLockedPrefix;

		public static ConfigEntry<float> mainWindowSize;

		public static ConfigEntry<bool> integrationWithDSPStarMapMemo;

		public static ConfigEntry<bool> integrationWithLSTM;

		public static ConfigEntry<bool> integrationWithCruiseAssist;

		public static GameObject panelButtonGO;

		public static GameObject starmapButtonGO;

		public static GameObject favBtnGO;

		public static LSTMIntg aLSTMIntg;

		public static DSPStarMapMemoIntg aDSPStarMapMemoIntg;

		public static CruiseAssistIntg aCruiseAssistIntg;

		private void Awake()
		{
			//IL_0010: 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_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
			Logger = ((BaseUnityPlugin)this).Logger;
			Harmony val = new Harmony("com.hetima.dsp.PlanetFinder");
			mainWindowHotkey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Keyboard Shortcuts", "mainWindowHotkey", KeyboardShortcut.Deserialize("F + LeftControl"), "Hotkey to open/close window");
			showButtonInMainPanel = ((BaseUnityPlugin)this).Config.Bind<bool>("UI", "showButtonInMainPanel", true, "show open/close button in main panel");
			showButtonInStarmap = ((BaseUnityPlugin)this).Config.Bind<bool>("UI", "showButtonInStarmap", true, "show open/close button in starmap");
			showFavButtonInStarmap = ((BaseUnityPlugin)this).Config.Bind<bool>("UI", "showFavButtonInStarmap", false, "show toggle favorited button in starmap planet detail panel");
			showPowerState = ((BaseUnityPlugin)this).Config.Bind<bool>("UI", "showPowerState", true, "show power consumption");
			showPrefix = ((BaseUnityPlugin)this).Config.Bind<bool>("UI", "showPrefix", true, "show prefix [GAS] and [TL]");
			gasGiantPrefix = ((BaseUnityPlugin)this).Config.Bind<string>("UI", "gasGiantPrefix", "[GAS]", "gas giant prefix default is [GAS]");
			tidalLockedPrefix = ((BaseUnityPlugin)this).Config.Bind<string>("UI", "tidalLockedPrefix", "[TL]", "tidal locked prefix default is [TL]");
			mainWindowSize = ((BaseUnityPlugin)this).Config.Bind<float>("UI", "mainWindowSize", 8f, "Main window row size (4-16)");
			integrationWithDSPStarMapMemo = ((BaseUnityPlugin)this).Config.Bind<bool>("Integration", "integrationWithDSPStarMapMemo", false, "Display icons set by DSPStarMapMemo");
			integrationWithLSTM = ((BaseUnityPlugin)this).Config.Bind<bool>("Integration", "integrationWithLSTM", false, "open LSTM from context menu");
			integrationWithCruiseAssist = ((BaseUnityPlugin)this).Config.Bind<bool>("Integration", "integrationWithCruiseAssist", false, "set CruiseAssist from context menu");
			val.PatchAll(typeof(Patch));
			val.PatchAll(typeof(MyWindowCtl.Patch));
			val.PatchAll(typeof(StarDistance.Patch));
		}

		public static void Log(string str)
		{
			Logger.LogInfo((object)str);
		}

		public static void UniverseExplorationRequired()
		{
			UIMessageBox.Show(Localization.Translate("Upgrades Required"), Localization.Translate("To use this feature, Universe Exploration 4 is required."), "OK", 0);
		}

		public static void LocatePlanet(int planetId, int starId = 0)
		{
			if (planetId <= 0 && starId <= 0)
			{
				return;
			}
			if (GameMain.history.universeObserveLevel >= 4)
			{
				UIRoot.instance.uiGame.ShutPlayerInventory();
				UIRoot.instance.uiGame.ShutAllFunctionWindow();
				UIRoot.instance.uiGame.OpenStarmap();
				int num = ((planetId > 0) ? (planetId / 100) : starId);
				int num2 = ((planetId > 0) ? (planetId % 100) : 0);
				UIStarmap starmap = UIRoot.instance.uiGame.starmap;
				starmap.focusPlanet = null;
				starmap.focusStar = starmap.starUIs[num - 1];
				starmap.OnCursorFunction2Click(0);
				if (num2 > 0 && (Object)(object)starmap.focusStar == (Object)null)
				{
					starmap.focusPlanet = starmap.planetUIs[num2 - 1];
					starmap.OnCursorFunction2Click(0);
					starmap.focusPlanet = starmap.planetUIs[num2 - 1];
					starmap.focusStar = null;
				}
			}
			else
			{
				UniverseExplorationRequired();
			}
		}

		public static void TogglePlanetFinderWindow()
		{
			if (((ManualBehaviour)planetFinder).active)
			{
				((ManualBehaviour)planetFinder)._Close();
			}
			else
			{
				planetFinder.SetUpAndOpen();
			}
		}

		public static void AddRecentPlanet(PlanetData planetData)
		{
			if (recentPlanets.Contains(planetData))
			{
				recentPlanets.Remove(planetData);
			}
			recentPlanets.Insert(0, planetData);
			if (recentPlanets.Count > 99)
			{
				recentPlanets.RemoveAt(recentPlanets.Count - 1);
			}
		}

		public static bool IsFavPlanet(PlanetData planetData)
		{
			string overrideName = planetData.overrideName;
			if (string.IsNullOrEmpty(overrideName))
			{
				return false;
			}
			if (overrideName.Contains("★"))
			{
				return true;
			}
			return false;
		}

		public static void SetFavPlanet(PlanetData planetData, bool flag)
		{
			if (flag)
			{
				if (!IsFavPlanet(planetData))
				{
					string displayName = planetData.displayName;
					displayName += "★";
					planetData.overrideName = displayName;
					GameScenarioLogic gameScenario = GameMain.gameScenario;
					if (gameScenario != null)
					{
						gameScenario.NotifyOnPlanetNameChange();
					}
					planetData.NotifyOnDisplayNameChange();
					GameMain.galaxy.NotifyAstroNameChange();
				}
			}
			else
			{
				if (!IsFavPlanet(planetData))
				{
					return;
				}
				string overrideName = planetData.overrideName;
				overrideName = overrideName.Replace("★", "").Trim();
				if (!string.Equals(overrideName, planetData.overrideName))
				{
					if (string.Equals(overrideName, planetData.name))
					{
						planetData.overrideName = "";
					}
					else
					{
						planetData.overrideName = overrideName;
					}
					GameScenarioLogic gameScenario2 = GameMain.gameScenario;
					if (gameScenario2 != null)
					{
						gameScenario2.NotifyOnPlanetNameChange();
					}
					planetData.NotifyOnDisplayNameChange();
					GameMain.galaxy.NotifyAstroNameChange();
				}
			}
		}

		private void Update()
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			if (GameMain.isRunning && !GameMain.isPaused && !GameMain.instance.isMenuDemo && !VFInput.inputing)
			{
				KeyboardShortcut value = mainWindowHotkey.Value;
				if (((KeyboardShortcut)(ref value)).IsDown())
				{
					TogglePlanetFinderWindow();
				}
				else if (VFInput._closePanelE && ((ManualBehaviour)planetFinder).active)
				{
					((ManualBehaviour)planetFinder)._Close();
				}
			}
		}

		private void FixedUpdate()
		{
			if ((Object)(object)planetFinder != (Object)null && planetFinder.isPointEnter)
			{
				VFInput.inScrollView = true;
			}
		}

		public static void CreateUI()
		{
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_011d: 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_0288: Unknown result type (might be due to invalid IL or missing references)
			//IL_028d: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d7: 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)
			Button button = UIRoot.instance.uiGame.planetGlobe.button2;
			UIButton dfIconButton = UIRoot.instance.uiGame.gameMenu.dfIconButton;
			object obj;
			if (dfIconButton == null)
			{
				obj = null;
			}
			else
			{
				Transform obj2 = ((Component)dfIconButton).transform.Find("icon");
				if (obj2 == null)
				{
					obj = null;
				}
				else
				{
					Image component = ((Component)obj2).GetComponent<Image>();
					obj = ((component != null) ? component.sprite : null);
				}
			}
			Sprite sprite = (Sprite)obj;
			Button val = Object.Instantiate<Button>(button, ((Component)button).transform.parent);
			panelButtonGO = ((val != null) ? ((Component)val).gameObject : null);
			Transform transform = panelButtonGO.transform;
			RectTransform val2 = (RectTransform)(object)((transform is RectTransform) ? transform : null);
			UIButton component2 = panelButtonGO.GetComponent<UIButton>();
			Transform obj3 = panelButtonGO.transform.Find("button-2/icon");
			Image val3 = ((obj3 != null) ? ((Component)obj3).GetComponent<Image>() : null);
			if ((Object)(object)val3 != (Object)null)
			{
				val3.sprite = sprite;
			}
			if ((Object)(object)panelButtonGO != (Object)null && (Object)(object)component2 != (Object)null)
			{
				((Object)panelButtonGO).name = "open-planet-finder";
				((Transform)val2).localScale = new Vector3(0.6f, 0.6f, 0.6f);
				val2.anchoredPosition3D = new Vector3(133f, -88f, 0f);
				((UnityEventBase)val.onClick).RemoveAllListeners();
				component2.onClick += OnShowWindowButtonClick;
				component2.tips.tipTitle = "Planet Finder";
				component2.tips.tipText = "open/close Planet Finder Window";
				component2.tips.corner = 9;
				component2.tips.offset = new Vector2(-20f, -20f);
				Transform transform2 = panelButtonGO.transform;
				val2 = (RectTransform)(object)((transform2 is RectTransform) ? transform2 : null);
				panelButtonGO.SetActive(showButtonInMainPanel.Value);
				showButtonInMainPanel.SettingChanged += delegate
				{
					panelButtonGO.SetActive(showButtonInMainPanel.Value);
				};
			}
			UIButton northButton = UIRoot.instance.uiGame.starmap.northButton;
			Transform val4 = ((northButton != null) ? ((Component)northButton).transform.parent : null);
			if ((Object)(object)val4 != (Object)null)
			{
				starmapButtonGO = Object.Instantiate<GameObject>(panelButtonGO, val4);
				starmapButtonGO.SetActive(showButtonInStarmap.Value);
				component2 = starmapButtonGO.GetComponent<UIButton>();
				component2.onClick += OnShowWindowButtonClick;
				component2.tips.corner = 7;
				component2.tips.offset = new Vector2(25f, -8f);
				Transform transform3 = starmapButtonGO.transform;
				val2 = (RectTransform)(object)((transform3 is RectTransform) ? transform3 : null);
				val2.anchorMin = new Vector2(1f, 0f);
				val2.anchorMax = new Vector2(1f, 0f);
				val2.pivot = new Vector2(1f, 0f);
				val2.anchoredPosition = new Vector2(-16f, 48f);
				showButtonInStarmap.SettingChanged += delegate
				{
					starmapButtonGO.SetActive(showButtonInStarmap.Value);
				};
			}
			UIPlanetDetail planetDetail = UIRoot.instance.uiGame.planetDetail;
			val4 = ((planetDetail != null) ? ((Component)planetDetail).transform : null);
			if ((Object)(object)val4 != (Object)null)
			{
				UIButton obj4 = Util.MakeHiliteTextButton("★", 18f, 18f);
				obj4.onClick += OnStarmapFavButtonClick;
				Util.NormalizeRectWithTopLeft((Component)(object)obj4, 218f, 38f, val4);
				favBtnGO = ((Component)obj4).gameObject;
				((Object)favBtnGO).name = "planetfinder-fav";
				favBtnGO.SetActive(showFavButtonInStarmap.Value);
				showFavButtonInStarmap.SettingChanged += delegate
				{
					favBtnGO.SetActive(showFavButtonInStarmap.Value);
				};
			}
		}

		public static void OnStarmapFavButtonClick(int obj)
		{
			UIPlanetDetail planetDetail = UIRoot.instance.uiGame.planetDetail;
			PlanetData planet = planetDetail.planet;
			SetFavPlanet(planet, !IsFavPlanet(planet));
			favBtnGO.GetComponent<UIButton>().highlighted = IsFavPlanet(planet);
			if (!planetDetail.nameInput.isFocused)
			{
				planetDetail.nameInput.text = planetDetail.planet.displayName;
			}
		}

		public static void OnShowWindowButtonClick(int obj)
		{
			TogglePlanetFinderWindow();
		}
	}
	public class RecyclingListView : MonoBehaviour
	{
		public delegate void ItemDelegate(MonoBehaviour item, int rowIndex);

		[Tooltip("Prefab for all the child view objects in the list")]
		public MonoBehaviour ChildPrefab;

		[Tooltip("The amount of vertical padding to add between items")]
		public float RowPadding = 4f;

		[Tooltip("Minimum height to pre-allocate list items for. Use to prevent allocations on resizing.")]
		public float PreAllocHeight = 100f;

		protected int rowCount;

		public ItemDelegate ItemCallback;

		public ScrollRect scrollRect;

		public MonoBehaviour[] childItems;

		protected int childBufferStart;

		protected int sourceDataRowStart;

		protected bool ignoreScrollChange;

		protected float previousBuildHeight;

		protected const int rowsAboveBelow = 1;

		public float VerticalNormalizedPosition
		{
			get
			{
				return scrollRect.verticalNormalizedPosition;
			}
			set
			{
				scrollRect.verticalNormalizedPosition = value;
			}
		}

		public int RowCount
		{
			get
			{
				return rowCount;
			}
			set
			{
				if (rowCount != value)
				{
					rowCount = value;
					ignoreScrollChange = true;
					UpdateContentHeight();
					ignoreScrollChange = false;
					ReorganiseContent(clearContents: true);
				}
			}
		}

		public virtual void Refresh()
		{
			ReorganiseContent(clearContents: true);
		}

		public virtual void Refresh(int rowStart, int count)
		{
			int num = sourceDataRowStart + childItems.Length;
			for (int i = 0; i < count; i++)
			{
				int num2 = rowStart + i;
				if (num2 >= sourceDataRowStart && num2 < num)
				{
					int num3 = WrapChildIndex(childBufferStart + num2 - sourceDataRowStart);
					if ((Object)(object)childItems[num3] != (Object)null)
					{
						UpdateChild(childItems[num3], num2);
					}
				}
			}
		}

		public virtual void Refresh(MonoBehaviour item)
		{
			for (int i = 0; i < childItems.Length; i++)
			{
				int num = WrapChildIndex(childBufferStart + i);
				if ((Object)(object)childItems[num] != (Object)null && (Object)(object)childItems[num] == (Object)(object)item)
				{
					UpdateChild(childItems[i], sourceDataRowStart + i);
					break;
				}
			}
		}

		public virtual void Clear()
		{
			RowCount = 0;
		}

		public virtual void ScrollToRow(int row)
		{
			scrollRect.verticalNormalizedPosition = GetRowScrollPosition(row);
		}

		public float GetRowScrollPosition(int row)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			float num = ((float)row + 0.5f) * RowHeight();
			float num2 = ViewportHeight();
			float num3 = num2 * 0.5f;
			float num4 = Mathf.Max(0f, num - num3);
			float num5 = num4 + num2;
			float y = scrollRect.content.sizeDelta.y;
			if (num5 > y)
			{
				num4 = Mathf.Max(0f, num4 - (num5 - y));
			}
			return Mathf.InverseLerp(y - num2, 0f, num4);
		}

		public MonoBehaviour GetRowItem(int row)
		{
			if (childItems != null && row >= sourceDataRowStart && row < sourceDataRowStart + childItems.Length && row < rowCount)
			{
				return childItems[WrapChildIndex(childBufferStart + row - sourceDataRowStart)];
			}
			return null;
		}

		protected virtual void Awake()
		{
		}

		protected virtual bool CheckChildItems()
		{
			float num = Mathf.Max(ViewportHeight(), PreAllocHeight);
			bool flag = childItems == null || num > previousBuildHeight;
			if (flag)
			{
				int num2 = Mathf.RoundToInt(0.5f + num / RowHeight());
				num2 += 2;
				if (childItems == null)
				{
					childItems = (MonoBehaviour[])(object)new MonoBehaviour[num2];
				}
				else if (num2 > childItems.Length)
				{
					Array.Resize(ref childItems, num2);
				}
				for (int i = 0; i < childItems.Length; i++)
				{
					if ((Object)(object)childItems[i] == (Object)null)
					{
						childItems[i] = Object.Instantiate<MonoBehaviour>(ChildPrefab);
					}
					((Transform)((Component)childItems[i]).GetComponent<RectTransform>()).SetParent((Transform)(object)scrollRect.content, false);
					((Component)childItems[i]).gameObject.SetActive(false);
				}
				previousBuildHeight = num;
			}
			return flag;
		}

		protected virtual void OnEnable()
		{
			ScrollRect obj = scrollRect;
			if (obj != null)
			{
				((UnityEvent<Vector2>)(object)obj.onValueChanged).AddListener((UnityAction<Vector2>)OnScrollChanged);
			}
			ignoreScrollChange = false;
		}

		protected virtual void OnDisable()
		{
			ScrollRect obj = scrollRect;
			if (obj != null)
			{
				((UnityEvent<Vector2>)(object)obj.onValueChanged).RemoveListener((UnityAction<Vector2>)OnScrollChanged);
			}
		}

		protected virtual void OnScrollChanged(Vector2 normalisedPos)
		{
			if (!ignoreScrollChange)
			{
				ReorganiseContent(clearContents: false);
			}
		}

		protected virtual void ReorganiseContent(bool clearContents)
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			if (clearContents)
			{
				scrollRect.StopMovement();
				scrollRect.verticalNormalizedPosition = 1f;
			}
			bool num = CheckChildItems() || clearContents;
			float y = ((Transform)scrollRect.content).localPosition.y;
			Transform transform = ((Component)scrollRect).transform;
			Rect rect = ((RectTransform)((transform is RectTransform) ? transform : null)).rect;
			int num2 = (int)((y - ((Rect)(ref rect)).height / 2f) / RowHeight()) - 1;
			int num3 = num2 - sourceDataRowStart;
			if (num || Mathf.Abs(num3) >= childItems.Length)
			{
				sourceDataRowStart = num2;
				childBufferStart = 0;
				int num4 = num2;
				MonoBehaviour[] array = childItems;
				foreach (MonoBehaviour child in array)
				{
					UpdateChild(child, num4++);
				}
			}
			else
			{
				if (num3 == 0)
				{
					return;
				}
				int num5 = (childBufferStart + num3) % childItems.Length;
				if (num3 < 0)
				{
					for (int j = 1; j <= -num3; j++)
					{
						int num6 = WrapChildIndex(childBufferStart - j);
						int rowIdx = sourceDataRowStart - j;
						UpdateChild(childItems[num6], rowIdx);
					}
				}
				else
				{
					int num7 = childBufferStart + childItems.Length - 1;
					int num8 = sourceDataRowStart + childItems.Length - 1;
					for (int k = 1; k <= num3; k++)
					{
						int num9 = WrapChildIndex(num7 + k);
						int rowIdx2 = num8 + k;
						UpdateChild(childItems[num9], rowIdx2);
					}
				}
				sourceDataRowStart = num2;
				childBufferStart = num5;
			}
		}

		private int WrapChildIndex(int idx)
		{
			while (idx < 0)
			{
				idx += childItems.Length;
			}
			return idx % childItems.Length;
		}

		private float RowHeight()
		{
			//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)
			float rowPadding = RowPadding;
			Rect rect = ((Component)ChildPrefab).GetComponent<RectTransform>().rect;
			return rowPadding + ((Rect)(ref rect)).height;
		}

		private float ViewportHeight()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			Transform transform = ((Component)scrollRect).transform;
			Rect rect = ((RectTransform)((transform is RectTransform) ? transform : null)).rect;
			return ((Rect)(ref rect)).height * 1.5f;
		}

		protected virtual void UpdateChild(MonoBehaviour child, int rowIdx)
		{
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: 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_0053: 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_0082: Unknown result type (might be due to invalid IL or missing references)
			if (rowIdx < 0 || rowIdx >= rowCount)
			{
				((Component)child).gameObject.SetActive(false);
			}
			else if (ItemCallback != null)
			{
				Rect rect = ((Component)ChildPrefab).GetComponent<RectTransform>().rect;
				Vector2 pivot = ((Component)ChildPrefab).GetComponent<RectTransform>().pivot;
				float num = RowHeight() * (float)rowIdx + (1f - pivot.y) * ((Rect)(ref rect)).height;
				float num2 = 0f + pivot.x * ((Rect)(ref rect)).width;
				((Component)child).GetComponent<RectTransform>().anchoredPosition = new Vector2(num2, 0f - num);
				ItemCallback(child, rowIdx);
				((Component)child).gameObject.SetActive(true);
			}
		}

		protected virtual void UpdateContentHeight()
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: 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_004e: 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)
			Rect rect = ((Component)ChildPrefab).GetComponent<RectTransform>().rect;
			float num = ((Rect)(ref rect)).height * (float)rowCount + (float)(rowCount - 1) * RowPadding;
			Vector2 sizeDelta = scrollRect.content.sizeDelta;
			scrollRect.content.sizeDelta = new Vector2(sizeDelta.x, num);
		}

		protected virtual void DisableAllChildren()
		{
			if (childItems != null)
			{
				for (int i = 0; i < childItems.Length; i++)
				{
					((Component)childItems[i]).gameObject.SetActive(false);
				}
			}
		}
	}
	public class StarDistance
	{
		public static class Patch
		{
			[HarmonyPrefix]
			[HarmonyPatch(typeof(GameMain), "Begin")]
			public static void GameMain_Begin_Prefix()
			{
				if (_distances != null)
				{
					_distances.Clear();
				}
				_distances = new Dictionary<int, Dictionary<int, float>>(GameMain.galaxy.starCount);
				InitDistances();
			}
		}

		public static Dictionary<int, Dictionary<int, float>> _distances;

		public static float DistanceFromHere(int star, int nearStar = 0)
		{
			int num = ((GameMain.localPlanet == null) ? nearStar : GameMain.localPlanet.star.id);
			if (num != 0)
			{
				return Distance(star, num);
			}
			return -1f;
		}

		public static float Distance(int star, int star2)
		{
			if (star == star2)
			{
				return 0f;
			}
			int key;
			int key2;
			if (star > star2)
			{
				key = star2;
				key2 = star;
			}
			else
			{
				key = star;
				key2 = star2;
			}
			_distances.TryGetValue(key, out var value);
			if (value != null)
			{
				value.TryGetValue(key2, out var value2);
				return value2;
			}
			return -1f;
		}

		internal static void InitDistances()
		{
			//IL_004e: 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_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			_distances.Clear();
			if (GameMain.instance.isMenuDemo)
			{
				return;
			}
			GalaxyData galaxy = GameMain.galaxy;
			for (int i = 0; i < galaxy.starCount; i++)
			{
				StarData val = galaxy.stars[i];
				Dictionary<int, float> dictionary = new Dictionary<int, float>(galaxy.starCount - i);
				for (int j = i + 1; j < galaxy.starCount; j++)
				{
					StarData val2 = galaxy.stars[j];
					VectorLF3 val3 = val.uPosition - val2.uPosition;
					double magnitude = ((VectorLF3)(ref val3)).magnitude;
					dictionary.Add(value: (!(magnitude < 2400000.0)) ? ((float)(magnitude / 2400000.0)) : 1f, key: val2.id);
				}
				_distances.Add(val.id, dictionary);
			}
		}
	}
	public class UIConfigWindow : ManualBehaviour, MyWindow
	{
		public RectTransform windowTrans;

		public RectTransform tab1;

		public UIButton tabBtn1;

		public static UIConfigWindow CreateWindow()
		{
			return MyWindowCtl.CreateWindow<UIConfigWindow>("PLFDConfigWindow", "PlanetFinder Config");
		}

		public void TryClose()
		{
			((ManualBehaviour)this)._Close();
		}

		public bool isFunctionWindow()
		{
			return true;
		}

		public void OpenWindow()
		{
			MyWindowCtl.OpenWindow((ManualBehaviour)(object)this);
		}

		public override void _OnCreate()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			windowTrans = MyWindowCtl.GetRectTransform((ManualBehaviour)(object)this);
			windowTrans.sizeDelta = new Vector2(640f, 376f);
			CreateUI();
		}

		internal void CreateUI()
		{
			RectTransform base_ = windowTrans;
			float y_ = 54f;
			float x_ = 36f;
			float tabx_ = 36f;
			int tabIndex_ = 1;
			tab1 = AddTab("General", out tabBtn1);
			((Component)tabBtn1).gameObject.SetActive(false);
			base_ = tab1;
			y_ = 0f;
			x_ = 0f;
			RectTransform rect_2 = MyKeyBinder.CreateKeyBinder(PLFN.mainWindowHotkey, "Main Hotkey");
			AddElement(rect_2, 90f);
			rect_2 = MyCheckBox.CreateCheckBox(PLFN.showButtonInMainPanel, "Show Button In Main Panel");
			AddElement(rect_2, 26f);
			rect_2 = MyCheckBox.CreateCheckBox(PLFN.showButtonInStarmap, "Show Button In Starmap");
			AddElement(rect_2, 26f);
			Text val = CreateText("Window Size");
			Transform transform = ((Component)val).transform;
			AddElement((RectTransform)(object)((transform is RectTransform) ? transform : null), 32f);
			rect_2 = MySlider.CreateSlider(PLFN.mainWindowSize, 4f, 12f, "0", 200f);
			AddElement(rect_2, 26f);
			rect_2 = MyCheckBox.CreateCheckBox(PLFN.showPowerState, "Show Power State In List");
			AddElement(rect_2, 26f);
			rect_2 = MyCheckBox.CreateCheckBox(PLFN.showPrefix, "Show [GAS] [TL] Prefix");
			AddElement(rect_2, 26f);
			x_ = 290f;
			y_ = 0f;
			rect_2 = MyCheckBox.CreateCheckBox(PLFN.showFavButtonInStarmap, "Show Fav Button In Starmap");
			AddElement(rect_2, 26f);
			if (PLFN.aDSPStarMapMemoIntg.canGetSignalIconId)
			{
				rect_2 = MyCheckBox.CreateCheckBox(PLFN.integrationWithDSPStarMapMemo, "Integration With DSPStarMapMemo");
				AddElement(rect_2, 22f);
				x_ += 32f;
				val = CreateText("Display Icons / Search Memo");
				val.fontSize = 14;
				AddElement(((Graphic)val).rectTransform, 24f);
				x_ -= 32f;
			}
			if (PLFN.aLSTMIntg.canOpenPlanetId)
			{
				rect_2 = MyCheckBox.CreateCheckBox(PLFN.integrationWithLSTM, "Integration With LSTM");
				AddElement(rect_2, 22f);
				x_ += 32f;
				val = CreateText("Open LSTM From Context Panel");
				val.fontSize = 14;
				AddElement(((Graphic)val).rectTransform, 24f);
				x_ -= 32f;
			}
			if (PLFN.aCruiseAssistIntg.canSelectPlanet)
			{
				rect_2 = MyCheckBox.CreateCheckBox(PLFN.integrationWithCruiseAssist, "Integration With CruiseAssist");
				AddElement(rect_2, 22f);
				x_ += 32f;
				val = CreateText("Set CruiseAssist From Context Panel");
				val.fontSize = 14;
				AddElement(((Graphic)val).rectTransform, 24f);
				x_ -= 32f;
			}
			y_ = 0f;
			x_ = 0f;
			void AddElement(RectTransform rect_, float height)
			{
				if ((Object)(object)rect_ != (Object)null)
				{
					Util.NormalizeRectWithTopLeft((Component)(object)rect_, x_, y_, (Transform)(object)base_);
				}
				y_ += height;
			}
			RectTransform AddTab(string label, out UIButton outBtn)
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				//IL_0005: 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_00e2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
				//IL_0108: Unknown result type (might be due to invalid IL or missing references)
				//IL_010d: Unknown result type (might be due to invalid IL or missing references)
				//IL_012e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0133: 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_0159: Unknown result type (might be due to invalid IL or missing references)
				GameObject val3 = new GameObject();
				RectTransform val4 = val3.AddComponent<RectTransform>();
				Util.NormalizeRectWithMargin((Component)(object)val4, 82f, 36f, 0f, 0f, (Transform)(object)windowTrans);
				((Object)val3).name = "tab-" + tabIndex_;
				UIButton val5 = Object.Instantiate<UIButton>(UIRoot.instance.uiGame.dysonEditor.controlPanel.hierarchy.swarmPanel.orbitButtons[0]);
				Util.NormalizeRectWithTopLeft((Component)(object)val5, tabx_, 54f, (Transform)(object)windowTrans).sizeDelta = new Vector2(100f, 24f);
				((Component)((Component)val5).transform.Find("frame")).gameObject.SetActive(false);
				if (val5.transitions.Length >= 3)
				{
					val5.transitions[0].normalColor = new Color(0.1f, 0.1f, 0.1f, 0.68f);
					val5.transitions[0].highlightColorOverride = new Color(0.9906f, 0.5897f, 0.3691f, 0.4f);
					val5.transitions[1].normalColor = new Color(1f, 1f, 1f, 0.6f);
					val5.transitions[1].highlightColorOverride = new Color(0.2f, 0.1f, 0.1f, 0.9f);
				}
				Text component = ((Component)((Component)val5).transform.Find("Text")).GetComponent<Text>();
				component.text = label;
				component.fontSize = 16;
				val5.data = tabIndex_;
				tabIndex_++;
				tabx_ += 100f;
				outBtn = val5;
				return val4;
			}
			Text CreateText(string label_)
			{
				//IL_0038: Unknown result type (might be due to invalid IL or missing references)
				//IL_005e: Unknown result type (might be due to invalid IL or missing references)
				Text val2 = Object.Instantiate<Text>(MyWindowCtl.GetTitleText((ManualBehaviour)(object)this));
				((Object)((Component)val2).gameObject).name = "label";
				val2.text = label_;
				((Graphic)val2).color = new Color(1f, 1f, 1f, 0.38f);
				Transform transform2 = ((Component)val2).transform;
				((RectTransform)((transform2 is RectTransform) ? transform2 : null)).sizeDelta = new Vector2(val2.preferredWidth + 40f, 30f);
				return val2;
			}
		}

		public override void _OnDestroy()
		{
		}

		public override bool _OnInit()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			windowTrans.anchoredPosition = new Vector2(0f, 0f);
			return true;
		}

		public override void _OnFree()
		{
		}

		public override void _OnRegEvent()
		{
		}

		public override void _OnUnregEvent()
		{
		}

		public override void _OnOpen()
		{
		}

		public override void _OnClose()
		{
		}

		public override void _OnUpdate()
		{
			if (VFInput.escape && !VFInput.inputing)
			{
				VFInput.UseEscape();
				((ManualBehaviour)this)._Close();
			}
		}
	}
	public class UIItemSelection : MonoBehaviour
	{
		public static UIButton buttonPrefab;

		public static Sprite emptyImage;

		public UIPlanetFinderWindow planetFinderWindow;

		public RectTransform rectTrans;

		public List<UIButton> buttons;

		public List<string> buttonNames;

		public static int[] additionalMaterials = new int[6] { 1000, 1116, 0, 1120, 1121, 1011 };

		public HashSet<int> items;

		public int lastSelectedItemId;

		public static UIButton CreatePrefab()
		{
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Expected O, but got Unknown
			//IL_00bf: 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_0121: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			UIButton val = null;
			UIButton[] buildingWarnButtons = UIRoot.instance.optionWindow.buildingWarnButtons;
			if (buildingWarnButtons != null && buildingWarnButtons.Length != 0)
			{
				val = Object.Instantiate<UIButton>(buildingWarnButtons[0]);
				val.onClick += null;
				((Object)((Component)val).gameObject).name = "item-button";
				val.tips.tipText = "";
				val.tips.tipTitle = "";
				val.tips.delay = 0.6f;
				val.tips.corner = 8;
				Transform transform = ((Component)val).transform;
				Transform obj = ((transform is RectTransform) ? transform : null);
				((RectTransform)obj).sizeDelta = new Vector2(28f, 28f);
				foreach (Transform item in obj)
				{
					Transform val2 = item;
					((RectTransform)((val2 is RectTransform) ? val2 : null)).sizeDelta = new Vector2(28f, 28f);
					if (((Object)((Component)val2).gameObject).name == "image")
					{
						((Graphic)((Component)val2).GetComponent<Image>()).color = Color.white;
					}
				}
				if (val.transitions.Length > 1)
				{
					val.transitions[1].mouseoverColor = Color.white;
					val.transitions[1].normalColor = Color.white;
				}
			}
			return val;
		}

		public static UIButton CreateSelectButton(UIItemSelection owner)
		{
			if ((Object)(object)buttonPrefab == (Object)null)
			{
				Image iconTagImage = UIRoot.instance.uiGame.beltWindow.iconTagImage;
				emptyImage = ((iconTagImage != null) ? iconTagImage.sprite : null);
				buttonPrefab = CreatePrefab();
			}
			UIButton obj = Object.Instantiate<UIButton>(buttonPrefab);
			obj.onClick += owner.OnSelectButtonClick;
			obj.onRightClick += owner.OnSelectButtonRightClick;
			return obj;
		}

		public static void SetButtonIcon(UIButton btn, Sprite sprite, string name, int obj)
		{
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			Transform obj2 = ((Component)btn).transform.Find("image");
			Image val = ((obj2 != null) ? ((Component)obj2).GetComponent<Image>() : null);
			if ((Object)(object)val != (Object)null)
			{
				val.sprite = sprite;
			}
			btn.data = obj;
			if (name != null)
			{
				btn.tips.tipTitle = name;
				btn.tips.corner = 9;
				btn.tips.offset = new Vector2(-26f, 4f);
			}
		}

		public Sprite GetIconForItemId(int itemId)
		{
			if (itemId == 0)
			{
				return null;
			}
			foreach (UIButton button in buttons)
			{
				if (button.data == itemId)
				{
					Transform obj = ((Component)button).transform.Find("image");
					Image val = ((obj != null) ? ((Component)obj).GetComponent<Image>() : null);
					if ((Object)(object)val != (Object)null)
					{
						return val.sprite;
					}
				}
			}
			return null;
		}

		public string MouseOverButtonName()
		{
			for (int i = 0; i < buttons.Count; i++)
			{
				if (buttons[i]._isPointerEnter)
				{
					return buttonNames[i];
				}
			}
			return null;
		}

		public static UIItemSelection CreateInstance()
		{
			UIItemSelection uIItemSelection = Util.CreateGameObject<UIItemSelection>("item-selection", 500f, 30f);
			uIItemSelection.Init();
			return uIItemSelection;
		}

		private void Init()
		{
			items = new HashSet<int>();
			ref RectTransform reference = ref rectTrans;
			Transform transform = ((Component)this).transform;
			reference = (RectTransform)(object)((transform is RectTransform) ? transform : null);
			float top = 4f;
			float num = 0f;
			buttons = new List<UIButton>(40);
			buttonNames = new List<string>(40);
			for (int i = 1; i < 15; i++)
			{
				VeinProto val = ((ProtoSet<VeinProto>)(object)LDB.veins).Select(i);
				ItemProto val2 = ((ProtoSet<ItemProto>)(object)LDB.items).Select(val.MiningItem);
				if (val != null && val2 != null)
				{
					UIButton val3 = CreateSelectButton(this);
					Util.NormalizeRectWithTopLeft((Component)(object)val3, num, top, (Transform)(object)rectTrans);
					((Selectable)val3.button).interactable = true;
					SetButtonIcon(val3, val.iconSprite, ((Proto)val).name, ((Proto)val).ID);
					buttons.Add(val3);
					buttonNames.Add(((Proto)val).name);
					num += 30f;
				}
			}
			num += 6f;
			int[] array = additionalMaterials;
			foreach (int num2 in array)
			{
				if (num2 == 0)
				{
					num += 6f;
					continue;
				}
				ItemProto val4 = ((ProtoSet<ItemProto>)(object)LDB.items).Select(num2);
				if (val4 != null)
				{
					UIButton val5 = CreateSelectButton(this);
					Util.NormalizeRectWithTopLeft((Component)(object)val5, num, top, (Transform)(object)rectTrans);
					((Selectable)val5.button).interactable = true;
					SetButtonIcon(val5, val4.iconSprite, ((Proto)val4).name, num2);
					buttons.Add(val5);
					buttonNames.Add(((Proto)val4).name);
					num += 30f;
				}
			}
		}

		public void RefreshButtons()
		{
			foreach (UIButton button in buttons)
			{
				button.highlighted = items.Contains(button.data);
			}
		}

		public void ToggleItemSelected(int itemId, bool multiple = false)
		{
			if (items.Contains(itemId))
			{
				if (!multiple)
				{
					items.Clear();
					lastSelectedItemId = 0;
				}
				else
				{
					items.Remove(itemId);
					if (lastSelectedItemId == itemId)
					{
						if (items.Count > 0)
						{
							foreach (int item in items)
							{
								lastSelectedItemId = item;
							}
						}
						else
						{
							lastSelectedItemId = 0;
						}
					}
				}
			}
			else
			{
				if (!multiple)
				{
					items.Clear();
				}
				items.Add(itemId);
				lastSelectedItemId = itemId;
			}
			RefreshButtons();
			planetFinderWindow.SetUpData();
		}

		public void OnSelectButtonClick(int obj)
		{
			if (obj != 0)
			{
				ToggleItemSelected(obj, VFInput.shift);
			}
		}

		public void OnSelectButtonRightClick(int obj)
		{
		}

		public int NextTargetItemId(int targetItemId, bool includesEmpty = false)
		{
			if (items.Count == 0)
			{
				return targetItemId;
			}
			int num = int.MaxValue;
			int num2 = int.MaxValue;
			foreach (int item in items)
			{
				if (targetItemId >= item && num > item)
				{
					num = item;
				}
				if (targetItemId < item && num2 > item)
				{
					num2 = item;
				}
			}
			if (num2 != int.MaxValue)
			{
				return num2;
			}
			if (includesEmpty)
			{
				return 0;
			}
			if (num != int.MaxValue)
			{
				return num;
			}
			return targetItemId;
		}
	}
	public class UIPlanetFinderListItem : MonoBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler, IPointerClickHandler
	{
		public static Sprite circleSprite;

		public static Color valueTextNormalColor;

		public static Color valueTextMiningColor;

		public UIPlanetFinderWindow window;

		public bool firstRefleshed;

		public PlanetListData listData;

		public PlanetData planetData;

		public StarData starData;

		public string distanceStr;

		public Color planetColor;

		private int _itemId;

		[SerializeField]
		public Text nameText;

		[SerializeField]
		public Text valueText;

		[SerializeField]
		public Text valueSketchText;

		[SerializeField]
		public Image labelIcon;

		[SerializeField]
		public Image veinIcon;

		[SerializeField]
		public Sprite iconHide;

		[SerializeField]
		public UIButton iconButton;

		[SerializeField]
		public UIButton locateBtn;

		[SerializeField]
		public GameObject baseObj;

		public StringBuilder sb;

		public static int veinCount = 15;

		public bool disableUIAction;

		public string planetName
		{
			get
			{
				return nameText.text;
			}
			set
			{
				nameText.text = value;
			}
		}

		public int itemId
		{
			get
			{
				return _itemId;
			}
			set
			{
				if (_itemId != value)
				{
					_itemId = value;
					sb = ((_itemId == 7) ? window.sbOil : window.sb);
					veinIcon.sprite = window.itemSelection.GetIconForItemId(_itemId);
					((Behaviour)veinIcon).enabled = (Object)(object)veinIcon.sprite != (Object)null;
				}
			}
		}

		public static UIPlanetFinderListItem CreateListViewPrefab()
		{
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_023c: Unknown result type (might be due to invalid IL or missing references)
			//IL_024c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0251: Unknown result type (might be due to invalid IL or missing references)
			//IL_026f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0274: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_0379: Unknown result type (might be due to invalid IL or missing references)
			//IL_038e: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
			UIPlanetFinderListItem uIPlanetFinderListItem = Util.CreateGameObject<UIPlanetFinderListItem>("list-item", 600f, 24f);
			Image val = Util.CreateGameObject<Image>("list-item", 600f, 24f);
			((Component)val).gameObject.SetActive(true);
			RectTransform val2 = Util.NormalizeRectWithTopLeft((Component)(object)val, 0f, 0f, ((Component)uIPlanetFinderListItem).transform);
			uIPlanetFinderListItem.baseObj = ((Component)val).gameObject;
			((Graphic)val).color = new Color(0.2f, 0.2f, 0.2f, 0.1f);
			Transform transform = ((Component)uIPlanetFinderListItem).transform;
			((RectTransform)((transform is RectTransform) ? transform : null)).sizeDelta = new Vector2(600f, 24f);
			val2.sizeDelta = new Vector2(600f, 24f);
			((Transform)val2).localScale = Vector3.one;
			UIResAmountEntry val3 = Object.Instantiate<UIResAmountEntry>(UIRoot.instance.uiGame.planetDetail.entryPrafab, (Transform)(object)val2);
			((Component)val3).gameObject.SetActive(true);
			float num = 0f;
			float num2 = 22f;
			UIButton val4 = Util.MakeIconButtonB(Util.astroIndicatorIcon, 22f);
			if ((Object)(object)val4 != (Object)null)
			{
				((Object)((Component)val4).gameObject).name = "locate-btn";
				Util.NormalizeRectWithTopLeft((Component)(object)val4, 538f - num, 3f, (Transform)(object)val2);
				val4.tips.tipTitle = Localization.Translate("Locate Planet");
				val4.tips.tipText = Localization.Translate("Show the planet on the starmap.");
				val4.tips.corner = 3;
				val4.tips.offset = new Vector2(18f, -20f);
				uIPlanetFinderListItem.locateBtn = val4;
			}
			uIPlanetFinderListItem.nameText = val3.labelText;
			uIPlanetFinderListItem.nameText.text = "";
			uIPlanetFinderListItem.nameText.fontSize = 16;
			((Graphic)uIPlanetFinderListItem.nameText).rectTransform.anchoredPosition = new Vector2(8f + num2, 0f);
			uIPlanetFinderListItem.valueText = val3.valueText;
			uIPlanetFinderListItem.valueText.text = "";
			((Graphic)uIPlanetFinderListItem.valueText).color = ((Graphic)uIPlanetFinderListItem.nameText).color;
			uIPlanetFinderListItem.valueText.supportRichText = true;
			Util.NormalizeRectWithTopLeft((Component)(object)uIPlanetFinderListItem.valueText, 380f - num - num2, 2f).sizeDelta = new Vector2(100f, 24f);
			valueTextNormalColor = ((Graphic)uIPlanetFinderListItem.valueText).color;
			valueTextMiningColor = new Color(0.1f, 0.7f, 0.8f, valueTextNormalColor.a);
			uIPlanetFinderListItem.valueSketchText = Object.Instantiate<Text>(uIPlanetFinderListItem.valueText, ((Component)uIPlanetFinderListItem.valueText).transform.parent);
			((Object)((Component)uIPlanetFinderListItem.valueSketchText).gameObject).name = "valueSketchText";
			uIPlanetFinderListItem.valueSketchText.alignment = (TextAnchor)3;
			Util.NormalizeRectWithTopLeft((Component)(object)uIPlanetFinderListItem.valueSketchText, 504f - num - num2, 2f).sizeDelta = new Vector2(24f, 24f);
			uIPlanetFinderListItem.veinIcon = val3.iconImage;
			if ((Object)(object)uIPlanetFinderListItem.veinIcon != (Object)null)
			{
				Util.NormalizeRectWithTopLeft((Component)(object)uIPlanetFinderListItem.veinIcon, 482f - num - num2, 2f);
				((Behaviour)uIPlanetFinderListItem.veinIcon).enabled = false;
				uIPlanetFinderListItem.labelIcon = Object.Instantiate<Image>(uIPlanetFinderListItem.veinIcon, (Transform)(object)val2);
				((Object)((Component)uIPlanetFinderListItem.labelIcon).gameObject).name = "labelIcon";
				RectTransform obj = Util.NormalizeRectWithTopLeft((Component)(object)uIPlanetFinderListItem.labelIcon, 16f, 12f);
				obj.pivot = new Vector2(0.5f, 0.5f);
				obj.sizeDelta = new Vector2(24f, 24f);
				((Transform)obj).localScale = new Vector3(0.3f, 0.3f, 1f);
				((Graphic)uIPlanetFinderListItem.labelIcon).material = null;
				Transform obj2 = ((Component)UIRoot.instance.uiGame.stationWindow.storageUIPrefab).transform.Find("storage-icon-empty/white");
				object obj3;
				if (obj2 == null)
				{
					obj3 = null;
				}
				else
				{
					Image component = ((Component)obj2).GetComponent<Image>();
					obj3 = ((component != null) ? component.sprite : null);
				}
				circleSprite = (Sprite)obj3;
				uIPlanetFinderListItem.labelIcon.sprite = circleSprite;
				((Behaviour)uIPlanetFinderListItem.labelIcon).enabled = true;
			}
			uIPlanetFinderListItem.iconHide = val3.iconHide;
			uIPlanetFinderListItem.iconButton = val3.iconButton;
			Object.Destroy((Object)(object)val3);
			Util.NormalizeRectWithTopLeft((Component)(object)uIPlanetFinderListItem, 0f, 0f);
			return uIPlanetFinderListItem;
		}

		private void Start()
		{
			locateBtn.onClick += OnLocateButtonClick;
			((Component)locateBtn).gameObject.SetActive(false);
		}

		public void SetUpDisplayName()
		{
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Invalid comparison between Unknown and I4
			//IL_0067: 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)
			if (starData != null)
			{
				planetName = starData.displayName + distanceStr;
			}
			else
			{
				if (planetData == null)
				{
					return;
				}
				string text = "";
				if (PLFN.showPrefix.Value)
				{
					if ((int)planetData.type == 5)
					{
						text += PLFN.gasGiantPrefix.Value;
					}
					if ((planetData.singularity & 1) != 0)
					{
						text += PLFN.tidalLockedPrefix.Value;
					}
					if (!string.IsNullOrEmpty(text))
					{
						text += " ";
					}
				}
				planetName = text + planetData.displayName + distanceStr;
			}
		}

		public void SetUpPlanetColor()
		{
			//IL_0175: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Invalid comparison between Unknown and I4
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Invalid comparison between Unknown and I4
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Invalid comparison between Unknown and I4
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: 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_0145: 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_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			if (planetData != null)
			{
				ThemeProto val = ((ProtoSet<ThemeProto>)(object)LDB.themes).Select(planetData.theme);
				if (val != null && val.thumbMat != null)
				{
					Color color = val.thumbMat[planetData.style % val.thumbMat.Length].GetColor("_Color");
					if (color.a < 0.5f)
					{
						color.a = 0.5f;
					}
					float num = Mathf.Max(new float[3] { color.r, color.g, color.b });
					if (num > 0.6f)
					{
						color.a = 1.6f - num;
					}
					color.a /= 1.4f;
					planetColor = color;
				}
			}
			else if (starData != null)
			{
				UIVirtualStarmap starmap = UIRoot.instance.galaxySelect.starmap;
				planetColor = starmap.starColors.Evaluate(starData.color);
				if ((int)starData.type == 3)
				{
					planetColor = starmap.neutronStarColor;
				}
				else if ((int)starData.type == 2)
				{
					planetColor = starmap.whiteDwarfColor;
				}
				else if ((int)starData.type == 4)
				{
					planetColor = starmap.blackholeColor;
				}
				planetColor.a = 0.8f;
			}
			else
			{
				planetColor = new Color(1f, 1f, 1f, 0.6f);
			}
		}

		public void Init(in PlanetListData d, UIPlanetFinderWindow window_)
		{
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: 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_00ea: 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)
			listData = d;
			firstRefleshed = false;
			window = window_;
			distanceStr = d.distanceStr;
			itemId = d.itemId;
			planetData = d.planetData;
			starData = d.starData;
			SetUpDisplayName();
			SetUpPlanetColor();
			labelIcon.sprite = null;
			((Graphic)valueText).color = valueTextNormalColor;
			int num = 0;
			if (planetData != null)
			{
				num = planetData.id;
			}
			else if (starData != null)
			{
				num = starData.id;
			}
			if (num > 0 && PLFN.aDSPStarMapMemoIntg.canGetSignalIconId && PLFN.integrationWithDSPStarMapMemo.Value)
			{
				int signalIconId = PLFN.aDSPStarMapMemoIntg.GetSignalIconId(num);
				if (signalIconId != 0)
				{
					labelIcon.sprite = LDB.signals.IconSprite(signalIconId);
					((Transform)((Graphic)labelIcon).rectTransform).localScale = Vector3.one;
					((Graphic)labelIcon).color = Color.white;
				}
			}
			if ((Object)(object)labelIcon.sprite == (Object)null)
			{
				((Graphic)labelIcon).color = planetColor;
				labelIcon.sprite = circleSprite;
				((Transform)((Graphic)labelIcon).rectTransform).localScale = new Vector3(0.3f, 0.3f, 1f);
			}
		}

		private void OnLocateButtonClick(int obj)
		{
			if (planetData != null)
			{
				PLFN.LocatePlanet(planetData.id);
			}
			else if (starData != null)
			{
				PLFN.LocatePlanet(0, starData.id);
			}
		}

		public long TargetItemAmount()
		{
			long result = 0L;
			if (planetData != null)
			{
				return TargetItemAmountForPlanet(listData);
			}
			if (starData != null)
			{
				return TargetItemAmountForStar(listData);
			}
			return result;
		}

		public long TargetItemAmountForStar(PlanetListData ld)
		{
			long num = 0L;
			if (ld.starData != null)
			{
				if (itemId > veinCount)
				{
					return 0L;
				}
				foreach (PlanetListData planet in ld.planetList)
				{
					num += TargetItemAmountForPlanet(planet);
				}
			}
			return num;
		}

		public long TargetItemAmountForPlanet(PlanetListData ld)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Invalid comparison between Unknown and I4
			PlanetData val = ld.planetData;
			long result = 0L;
			if (val != null)
			{
				if ((int)val.type == 5)
				{
					return 0L;
				}
				if (val.waterItemId >= 1000 && val.waterItemId == itemId)
				{
					return 0L;
				}
				if (itemId <= veinCount)
				{
					return ld.ItemCount(itemId);
				}
			}
			return result;
		}

		public int TargetItemAmountSketch()
		{
			if (planetData != null)
			{
				return TargetItemAmountSketchForPlanet(listData);
			}
			if (starData != null)
			{
				return TargetItemAmountSketchForStar(listData);
			}
			return 0;
		}

		public int TargetItemAmountSketchForStar(PlanetListData ld)
		{
			int num = 0;
			if (ld.starData != null)
			{
				if (itemId > veinCount)
				{
					return 0;
				}
				foreach (PlanetListData planet in ld.planetList)
				{
					num += TargetItemAmountSketchForPlanet(planet);
				}
			}
			return num;
		}

		public int TargetItemAmountSketchForPlanet(PlanetListData ld)
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Invalid comparison between Unknown and I4
			PlanetData val = ld.planetData;
			int result = 0;
			if (val != null)
			{
				if ((int)val.type == 5)
				{
					return 0;
				}
				if (val.waterItemId >= 1000 && val.waterItemId == itemId)
				{
					return 0;
				}
				if (itemId <= veinCount)
				{
					return ld.ItemCountSketch(itemId);
				}
			}
			return result;
		}

		public void Update()
		{
			if ((planetData != null || starData != null) && (Time.frameCount % 30 == 0 || window.needsReflesh))
			{
				RefreshValues();
			}
		}

		public void RefreshValues()
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			if (!baseObj.activeSelf)
			{
				return;
			}
			int num = _itemId;
			((Graphic)valueText).color = valueTextNormalColor;
			itemId = window.targetItemId;
			if (itemId != 0)
			{
				if (!GameMain.data.gameDesc.isInfiniteResource)
				{
					long num2 = TargetItemAmount();
					if (num2 > 0)
					{
						if (itemId == 7)
						{
							double num3 = (double)num2 * (double)VeinData.oilSpeedMultiplier;
							StringBuilderUtility.WritePositiveFloat(sb, 0, 8, (float)num3, 2, ' ');
						}
						else if (num2 < 1000000000)
						{
							StringBuilderUtility.WriteCommaULong(sb, 0, 16, (ulong)num2, 1, ' ');
						}
						else
						{
							StringBuilderUtility.WriteKMG(sb, 15, num2, false);
						}
						string text = sb.ToString();
						if (firstRefleshed && num == _itemId)
						{
							if (text != valueText.text)
							{
								valueText.text = text;
								((Graphic)valueText).color = valueTextMiningColor;
							}
						}
						else
						{
							valueText.text = text;
						}
					}
					else
					{
						valueText.text = "";
					}
				}
				int num4 = TargetItemAmountSketch();
				if (num4 > 0)
				{
					valueSketchText.text = "(" + num4 + ")";
				}
				else
				{
					valueSketchText.text = "";
				}
			}
			else if (PLFN.showPowerState.Value && planetData?.factory?.powerSystem != null)
			{
				valueText.text = PowerState(out var networkCount);
				if (networkCount > 1)
				{
					valueSketchText.text = "(" + networkCount + ")";
				}
				else
				{
					valueSketchText.text = "";
				}
			}
			else
			{
				valueText.text = "";
				valueSketchText.text = "";
			}
			firstRefleshed = true;
		}

		public string PowerState(out int networkCount)
		{
			string result = "";
			networkCount = 0;
			if (planetData == null)
			{
				return result;
			}
			long num = 0L;
			long num2 = 0L;
			long num3 = 0L;
			PowerSystem powerSystem = planetData.factory.powerSystem;
			for (int i = 1; i < powerSystem.netCursor; i++)
			{
				PowerNetwork val = powerSystem.netPool[i];
				if (val != null && val.id == i)
				{
					networkCount++;
					num += val.energyCapacity;
					num2 += val.energyRequired;
					if (val.energyExchanged < 0)
					{
						num3 -= val.energyExchanged;
					}
				}
			}
			if (num > 0 || num3 > 0)
			{
				StringBuilderUtility.WriteKMG(window.sbWatt, 8, num2 * 60, false);
				result = window.sbWatt.ToString();
				StringBuilderUtility.WriteKMG(window.sbWatt, 8, num * 60, false);
				result = result + " / " + window.sbWatt.ToString().Trim();
				if (num3 > 0)
				{
					StringBuilderUtility.WriteKMG(window.sbWatt, 8, num3 * 60, false);
					result = result + " + " + window.sbWatt.ToString().Trim();
				}
				double num4 = (double)num2 / (double)(num + num3);
				if (num4 > 0.8999999761581421)
				{
					result = result + " (" + num4.ToString("P1") + ")";
					if (num3 <= 0)
					{
						result = ((!(num4 > 0.9900000095367432)) ? ("<color=#DB883E85>" + result + "</color>") : ("<color=#FF404D99>" + result + "</color>"));
					}
				}
			}
			else
			{
				result = "--";
			}
			return result;
		}

		public void OnPointerClick(PointerEventData eventData)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Invalid comparison between Unknown and I4
			if (!disableUIAction && (int)eventData.button == 1)
			{
				window.ShowMenu(this);
			}
		}

		public void OnPointerEnter(PointerEventData _eventData)
		{
			if (!disableUIAction)
			{
				((Component)locateBtn).gameObject.SetActive(true);
			}
		}

		public void OnPointerExit(PointerEventData _eventData)
		{
			if (!disableUIAction)
			{
				((Component)locateBtn).gameObject.SetActive(false);
			}
		}

		public void LockAppearance()
		{
			Button component = ((Component)this).GetComponent<Button>();
			if ((Object)(object)component != (Object)null)
			{
				((Behaviour)component).enabled = false;
			}
		}

		public void UnlockAppearance()
		{
			Button component = ((Component)this).GetComponent<Button>();
			if ((Object)(object)component != (Object)null)
			{
				((Behaviour)component).enabled = true;
			}
		}
	}
	public enum Scope
	{
		None,
		CurrentStar,
		Planet,
		HasFactory,
		Fav,
		Recent,
		Gas,
		System
	}
	public class PlanetListData
	{
		public int distanceForSort;

		public string distanceStr;

		public PlanetData planetData;

		public StarData starData;

		public List<PlanetListData> planetList;

		public int itemId;

		public long amount;

		public bool shouldShow;

		public VeinGroup[] cachedVeinGroups;

		public static int CalculatedOrLoadedCount(List<PlanetListData> list)
		{
			int num = 0;
			foreach (PlanetListData item in list)
			{
				if (item.IsCalculatedOrLoaded())
				{
					num++;
				}
			}
			return num;
		}

		public bool IsCalculatedOrLoaded()
		{
			if (!planetData.calculated)
			{
				return cachedVeinGroups != null;
			}
			return true;
		}

		public VeinGroup[] VeinGroups()
		{
			if (!planetData.calculated)
			{
				return cachedVeinGroups;
			}
			return planetData.runtimeVeinGroups;
		}

		public bool IsContainItem(int itemId)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Invalid comparison between Unknown and I4
			VeinGroup[] array = VeinGroups();
			if (array == null)
			{
				return false;
			}
			for (int i = 1; i < array.Length; i++)
			{
				if ((int)array[i].type == itemId && array[i].amount > 0)
				{
					return true;
				}
			}
			return false;
		}

		public long ItemCount(int itemId)
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Invalid comparison between Unknown and I4
			long num = 0L;
			VeinGroup[] array = VeinGroups();
			if (array == null)
			{
				return 0L;
			}
			for (int i = 1; i < array.Length; i++)
			{
				if ((int)array[i].type == itemId)
				{
					num += array[i].amount;
				}
			}
			return num;
		}

		public int ItemCountSketch(int itemId)
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Invalid comparison between Unknown and I4
			int num = 0;
			VeinGroup[] array = VeinGroups();
			if (array == null)
			{
				return 0;
			}
			for (int i = 1; i < array.Length; i++)
			{
				if ((int)array[i].type == itemId)
				{
					num += array[i].count;
				}
			}
			return num;
		}
	}
	public class UIPlanetFinderWindow : ManualBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler, MyWindow
	{
		public enum EMenuCommand
		{
			Close,
			OpenStarmap,
			Fav,
			OpenLSTM,
			SetCruiseAssist
		}

		public RectTransform windowTrans;

		public RectTransform contentTrans;

		public bool needsReflesh;

		public Scope scope;

		public List<UIButton> scopeButtons;

		public int targetItemId;

		public UIItemSelection itemSelection;

		public MyListView planetListView;

		public Text countText;

		public InputField searchField;

		public string searchString;

		public UIButton searchFieldClearBtn;

		public StringBuilder sb;

		public StringBuilder sbOil;

		public StringBuilder sbWatt;

		internal bool _eventLock;

		public bool isPointEnter;

		private bool focusPointEnter;

		public List<PlanetListData> _allPlanetList = new List<PlanetListData>(800);

		public List<PlanetListData> _allStarList = new List<PlanetListData>(80);

		public List<PlanetListData> _planetList = new List<PlanetListData>(800);

		private static Thread _planetCalculateThread;

		public bool _stopThread;

		private static UIPlanetFinderWindow _instance;

		public const int veinCount = 15;

		public GameObject popupMenuBase;

		public UIPlanetFinderListItem popupMenuListItem;

		public UIPlanetFinderListItem menuTarget;

		public UIButton favBtn;

		public const float popupMenuTopMargin = 30f;

		private static void PlanetCalculateThreadMain()
		{
			long seedKey = GameMain.data.gameDesc.seedKey64;
			int num = _instance._allPlanetList?.Count ?? 0;
			Thread.Sleep(3000);
			MyWindowCtl.SetTitle((ManualBehaviour)(object)_instance, "Planet Finder");
			for (int i = 0; i < num; i++)
			{
				if (_instance._stopThread || num != _instance._allPlanetList.Count || seedKey != GameMain.data.gameDesc.seedKey64)
				{
					return;
				}
				PlanetListData planetListData = _instance._allPlanetList[i];
				MyWindowCtl.SetTitle((ManualBehaviour)(object)_instance, "Init... (" + PlanetListData.CalculatedOrLoadedCount(_instance._allPlanetList) + "/" + num + ")");
				if (!planetListData.IsCalculatedOrLoaded())
				{
					bool flag = true;
					if (planetListData.planetData.calculating)
					{
						flag = false;
					}
					else
					{
						if (_instance._stopThread)
						{
							return;
						}
						PlanetModelingManager.RequestCalcPlanet(planetListData.planetData);
					}
					do
					{
						Thread.Sleep(100);
						if (_instance._stopThread)
						{
							return;
						}
					}
					while (!planetListData.planetData.calculated);
					VeinGroup[] runtimeVeinGroups = planetListData.planetData.runtimeVeinGroups;
					int num2 = runtimeVeinGroups.Length;
					int num3 = ((num2 < 1) ? 1 : num2);
					planetListData.cachedVeinGroups = (VeinGroup[])(object)new VeinGroup[num3];
					Array.Copy(runtimeVeinGroups, planetListData.cachedVeinGroups, num2);
					((VeinGroup)(ref planetListData.cachedVeinGroups[0])).SetNull();
					if (flag)
					{
						int num4 = GameMain.localStar?.id ?? 0;
						if (planetListData.planetData.id / 100 != num4)
						{
							planetListData.planetData.data.Free();
							planetListData.planetData.data = null;
							planetListData.planetData.modData = null;
							planetListData.planetData.aux = null;
							planetListData.planetData.calculated = false;
						}
					}
				}
				else
				{
					VeinGroup[] runtimeVeinGroups2 = planetListData.planetData.runtimeVeinGroups;
					int num5 = runtimeVeinGroups2.Length;
					int num6 = ((num5 < 1) ? 1 : num5);
					planetListData.cachedVeinGroups = (VeinGroup[])(object)new VeinGroup[num6];
					Array.Copy(runtimeVeinGroups2, planetListData.cachedVeinGroups, num5);
					((VeinGroup)(ref planetListData.cachedVeinGroups[0])).SetNull();
				}
			}
			MyWindowCtl.SetTitle((ManualBehaviour)(object)_instance, "Planet Finder");
			PLFN.Log("loading vein data completed");
		}

		public static UIPlanetFinderWindow CreateInstance()
		{
			if ((Object)(object)_instance != (Object)null)
			{
				return _instance;
			}
			_instance = MyWindowCtl.CreateWindow<UIPlanetFinderWindow>("PlanetFinderWindow", "Planet Finder");
			return _instance;
		}

		public void BeginGame()
		{
			if (DSPGame.IsMenuDemo)
			{
				return;
			}
			_eventLock = true;
			GalaxyData galaxy = GameMain.galaxy;
			_allPlanetList.Clear();
			_allStarList.Clear();
			_planetList.Clear();
			for (int i = 0; i < galaxy.starCount; i++)
			{
				StarData val = galaxy.stars[i];
				PlanetListData planetListData = new PlanetListData
				{
					planetData = null,
					starData = val,
					distanceForSort = 0,
					distanceStr = null,
					itemId = targetItemId,
					shouldShow = false,
					planetList = new List<PlanetListData>()
				};
				_allStarList.Add(planetListData);
				for (int j = 0; j < val.planetCount; j++)
				{
					PlanetData planetData = val.planets[j];
					PlanetListData item = new PlanetListData
					{
						planetData = planetData,
						starData = null,
						distanceForSort = 0,
						distanceStr = null,
						itemId = targetItemId,
						shouldShow = false
					};
					_allPlanetList.Add(item);
					planetListData.planetList.Add(item);
				}
			}
			searchField.text = "";
			searchString = null;
			_stopThread = false;
			_planetCalculateThread = new Thread(PlanetCalculateThreadMain);
			_planetCalculateThread.Start();
			_eventLock = false;
		}

		public void EndGame()
		{
			if (_planetCalculateThread != null)
			{
				_stopThread = true;
				_planetCalculateThread.Abort();
				_planetCalculateThread = null;
				Thread.Sleep(1600);
			}
			MyWindowCtl.SetTitle((ManualBehaviour)(object)this, "Planet Finder");
		}

		public void SetUpAndOpen(int _itemId = 0)
		{
			SetUpData();
			MyWindowCtl.OpenWindow((ManualBehaviour)(object)this);
		}

		public bool isFunctionWindow()
		{
			return false;
		}

		public Vector2 WindowSize()
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			float num = Mathf.Round(PLFN.mainWindowSize.Value);
			if (num < 4f)
			{
				num = 4f;
			}
			if (num > 16f)
			{
				num = 16f;
			}
			return new Vector2(640f, 174f + 28f * num);
		}

		private void PopulateItem(MonoBehaviour item, int rowIndex)
		{
			UIPlanetFinderListItem obj = item as UIPlanetFinderListItem;
			PlanetListData d = _planetList[rowIndex];
			obj.Init(in d, this);
			obj.RefreshValues();
		}

		public override void _OnCreate()
		{
			//IL_0022: 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_0037: Expected O, but got Unknown
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_033e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0348: Expected O, but got Unknown
			//IL_039e: Unknown result type (might be due to invalid IL or missing references)
			//IL_048e: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d4: 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_041d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0422: Unknown result type (might be due to invalid IL or missing references)
			_eventLock = true;
			windowTrans = MyWindowCtl.GetRectTransform((ManualBehaviour)(object)this);
			windowTrans.sizeDelta = WindowSize();
			GameObject val = new GameObject("content");
			contentTrans = val.AddComponent<RectTransform>();
			Util.NormalizeRectWithMargin((Component)(object)contentTrans, 60f, 28f, 20f, 28f, (Transform)(object)windowTrans);
			Image val2 = Util.CreateGameObject<Image>("list-bg", 100f, 100f);
			((Graphic)val2).color = new Color(0f, 0f, 0f, 0.56f);
			Util.NormalizeRectWithMargin((Component)(object)val2, 70f, 0f, 20f, 16f, (Transform)(object)contentTrans);
			planetListView = MyListView.CreateListView((MonoBehaviour)(object)UIPlanetFinderListItem.CreateListViewPrefab(), PopulateItem, "list-view");
			Util.NormalizeRectWithMargin((Component)(object)((Component)planetListView).transform, 0f, 0f, 0f, 0f, ((Component)val2).transform);
			planetListView.m_ScrollRect.scrollSensitivity = 28f;
			float scopex_ = 4f;
			scopeButtons = new List<UIButton>(8);
			scopeButtons.Add(AddScope("Sys", 7));
			scopeButtons.Add(AddScope("All Planet", 2));
			scopeButtons.Add(AddScope("Current Star", 1));
			scopeButtons.Add(AddScope("Has Factory", 3));
			scopeButtons.Add(AddScope("★", 4));
			scopeButtons.Add(AddScope("Recent", 5));
			scope = Scope.Planet;
			foreach (UIButton scopeButton in scopeButtons)
			{
				scopeButton.highlighted = scopeButton.data == (int)scope;
			}
			itemSelection = UIItemSelection.CreateInstance();
			RectTransform val3 = Util.NormalizeRectWithTopLeft((Component)(object)itemSelection, 0f, 28f, (Transform)(object)contentTrans);
			itemSelection.planetFinderWindow = this;
			countText = Util.CreateText("", 14, "result-count");
			Util.NormalizeRectWithBottomLeft((Component)(object)countText, 2f, 0f, (Transform)(object)contentTrans);
			string text = "                ";
			sb = new StringBuilder(text, text.Length + 2);
			text = "         /s";
			sbOil = new StringBuilder(text, text.Length + 2);
			sbWatt = new StringBuilder("         W", 12);
			Sprite sprite = null;
			UIButton[] buildingWarnButtons = UIRoot.instance.optionWindow.buildingWarnButtons;
			if (buildingWarnButtons.Length >= 4)
			{
				Transform obj = ((Component)buildingWarnButtons[3]).transform.Find("image");
				Image val4 = ((obj != null) ? ((Component)obj).GetComponent<Image>() : null);
				if ((Object)(object)val4 != (Object)null)
				{
					sprite = val4.sprite;
				}
			}
			UIButton val5 = Util.MakeIconButtonC(sprite, 32f);
			((UnityEvent)val5.button.onClick).AddListener(new UnityAction(OnConfigButtonClick));
			val3 = Util.NormalizeRectWithTopLeft((Component)(object)val5, 158f, 20f, (Transform)(object)windowTrans);
			((Object)((Component)val5).gameObject).name = "config-button";
			((Component)val5).gameObject.SetActive(true);
			((Graphic)((Component)val5).gameObject.GetComponent<Image>()).color = new Color(1f, 1f, 1f, 0.17f);
			if (val5.transitions.Length != 0)
			{
				val5.transitions[0].mouseoverColor = new Color(1f, 1f, 1f, 0.67f);
				val5.transitions[0].normalColor = new Color(1f, 1f, 1f, 0.17f);
				val5.transitions[0].pressedColor = new Color(1f, 1f, 1f, 0.5f);
			}
			UIStationWindow stationWindow = UIRoot.instance.uiGame.stationWindow;
			searchField = Object.Instantiate<InputField>(stationWindow.nameInput);
			((Object)((Com