Decompiled source of VesselTrails v1.2.0

Shared.dll

Decompiled 3 days ago
using System;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Valoneu")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("Copyright © 2026")]
[assembly: AssemblyDescription("Shared utilities for Dyson Sphere Program mods")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+fff002bf4a0615efcc0df0628343cf424d7a013d")]
[assembly: AssemblyProduct("DysonSphereMods")]
[assembly: AssemblyTitle("Shared")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.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]
	[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 DysonSphereMods.Shared
{
	public static class Log
	{
		private static ManualLogSource _logger;

		public static void Init(ManualLogSource logger)
		{
			_logger = logger;
		}

		public static void Debug(object data)
		{
			ManualLogSource logger = _logger;
			if (logger != null)
			{
				logger.LogDebug(data);
			}
		}

		public static void Info(object data)
		{
			ManualLogSource logger = _logger;
			if (logger != null)
			{
				logger.LogInfo(data);
			}
		}

		public static void Warning(object data)
		{
			ManualLogSource logger = _logger;
			if (logger != null)
			{
				logger.LogWarning(data);
			}
		}

		public static void Error(object data)
		{
			ManualLogSource logger = _logger;
			if (logger != null)
			{
				logger.LogError(data);
			}
		}

		public static void Fatal(object data)
		{
			ManualLogSource logger = _logger;
			if (logger != null)
			{
				logger.LogFatal(data);
			}
		}

		public static void Message(object data)
		{
			ManualLogSource logger = _logger;
			if (logger != null)
			{
				logger.LogMessage(data);
			}
		}

		public static void LogOnce(string msg, ref bool flag, params object[] args)
		{
			if (flag)
			{
				return;
			}
			flag = true;
			try
			{
				string[] array = ((args == null) ? Array.Empty<string>() : args.Select((object arg) => (arg != null) ? ((!(arg is int) && !(arg is string) && !arg.GetType().IsPrimitive) ? JsonUtility.ToJson(arg) : arg.ToString()) : "null").ToArray());
				object[] args2 = array;
				Info(string.Format(msg, args2));
			}
			catch (Exception arg2)
			{
				Warning($"LogOnce failed to format message: {msg}. Exception: {arg2}");
			}
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "Shared";

		public const string PLUGIN_NAME = "DysonSphereMods";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}

VesselTrails.dll

Decompiled 3 days ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using CommonAPI;
using CommonAPI.Systems;
using DysonSphereMods.Shared;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Valoneu")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("Copyright © 2026")]
[assembly: AssemblyDescription("Visualizes logistics vessel routes in the Star Map.")]
[assembly: AssemblyFileVersion("1.2.0.0")]
[assembly: AssemblyInformationalVersion("1.2.0+fff002bf4a0615efcc0df0628343cf424d7a013d")]
[assembly: AssemblyProduct("DysonSphereMods")]
[assembly: AssemblyTitle("VesselTrails")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.2.0.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]
	[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 VesselTrails
{
	[BepInPlugin("com.Valoneu.VesselTrails", "VesselTrails", "1.2.0")]
	[BepInProcess("DSPGAME.exe")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[CommonAPISubmoduleDependency(new string[] { "ProtoRegistry", "CustomKeyBindSystem" })]
	public class VesselTrailsPlugin : BaseUnityPlugin
	{
		public enum ColorMode
		{
			Material,
			Heatmap
		}

		public const string MOD_GUID = "com.Valoneu.VesselTrails";

		public const string MOD_NAME = "VesselTrails";

		public const string MOD_VERSION = "1.2.0";

		public static ConfigEntry<bool> ShowTrails;

		public static ConfigEntry<bool> ShowHoverTooltips;

		public static ConfigEntry<float> TrailOpacity;

		public static ConfigEntry<float> TrailThicknessNormal;

		public static ConfigEntry<float> TrailThicknessStarmap;

		public static ConfigEntry<ColorMode> TrailColorMode;

		public static ConfigEntry<float> HistoryMinutes;

		public static ConfigEntry<float> WindowX;

		public static ConfigEntry<float> WindowY;

		public static ConfigEntry<float> WindowW;

		public static ConfigEntry<float> WindowH;

		private static VesselTrailRenderer _renderer;

		private void Awake()
		{
			//IL_0196: Unknown result type (might be due to invalid IL or missing references)
			ShowTrails = ((BaseUnityPlugin)this).Config.Bind<bool>("Visuals", "ShowTrails", true, "Whether to show vessel trails.");
			ShowHoverTooltips = ((BaseUnityPlugin)this).Config.Bind<bool>("Visuals", "ShowHoverTooltips", true, "Whether to show tooltips when hovering over trails.");
			TrailOpacity = ((BaseUnityPlugin)this).Config.Bind<float>("Visuals", "TrailOpacity", 0.8f, "Overall trail opacity (0.0 to 1.0).");
			TrailThicknessNormal = ((BaseUnityPlugin)this).Config.Bind<float>("Visuals", "TrailThicknessNormal", 1f, "Thickness multiplier for normal view.");
			TrailThicknessStarmap = ((BaseUnityPlugin)this).Config.Bind<float>("Visuals", "TrailThicknessStarmap", 1f, "Thickness multiplier for star map.");
			TrailColorMode = ((BaseUnityPlugin)this).Config.Bind<ColorMode>("Visuals", "ColorMode", ColorMode.Heatmap, "Coloring mode: Material or Heatmap.");
			HistoryMinutes = ((BaseUnityPlugin)this).Config.Bind<float>("General", "HistoryMinutes", 2f, "Path lifetime in minutes.");
			WindowX = ((BaseUnityPlugin)this).Config.Bind<float>("Internal", "WindowX", 50f, "Window X position.");
			WindowY = ((BaseUnityPlugin)this).Config.Bind<float>("Internal", "WindowY", 50f, "Window Y position.");
			WindowW = ((BaseUnityPlugin)this).Config.Bind<float>("Internal", "WindowW", 500f, "Window width.");
			WindowH = ((BaseUnityPlugin)this).Config.Bind<float>("Internal", "WindowH", 600f, "Window height.");
			RegisterKeyBinds();
			Log.Init(((BaseUnityPlugin)this).Logger);
			new Harmony("com.Valoneu.VesselTrails").PatchAll(typeof(VesselTrailsPlugin));
			Log.Info((object)"VesselTrails v1.2.0 loaded!");
		}

		private void RegisterKeyBinds()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			if (!CustomKeyBindSystem.HasKeyBind("ToggleVesselTrailsUI"))
			{
				BuiltinKey val = default(BuiltinKey);
				val.id = 1220;
				val.key = new CombineKey(257, (byte)2, (ECombineKeyAction)0, false);
				val.conflictGroup = 2052;
				val.name = "ToggleVesselTrailsUI";
				val.canOverride = true;
				CustomKeyBindSystem.RegisterKeyBind<PressKeyBind>(val);
			}
			if (!CustomKeyBindSystem.HasKeyBind("ToggleVesselTrailsLines"))
			{
				BuiltinKey val = default(BuiltinKey);
				val.id = 1221;
				val.key = new CombineKey(259, (byte)2, (ECombineKeyAction)0, false);
				val.conflictGroup = 2052;
				val.name = "ToggleVesselTrailsLines";
				val.canOverride = true;
				CustomKeyBindSystem.RegisterKeyBind<PressKeyBind>(val);
			}
			ProtoRegistry.RegisterString("ToggleVesselTrailsUI", "Toggle Vessel Trails UI");
			ProtoRegistry.RegisterString("ToggleVesselTrailsLines", "Toggle Vessel Trails Lines");
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(GameMain), "Begin")]
		public static void GameMain_Begin_Postfix()
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Expected O, but got Unknown
			if ((Object)(object)_renderer == (Object)null)
			{
				GameObject val = new GameObject("VesselTrailRenderer");
				_renderer = val.AddComponent<VesselTrailRenderer>();
				Object.DontDestroyOnLoad((Object)val);
			}
		}
	}
	public class VesselTrailRenderer : MonoBehaviour
	{
		private class RoutePath
		{
			public int StarA;

			public int StarB;

			public Dictionary<int, ItemHistory> ItemHistories = new Dictionary<int, ItemHistory>();

			public float TotalVessels => ItemHistories.Values.Sum((ItemHistory h) => h.AverageVesselCount);

			public void UpdateItem(int itemId, List<int> shipKeys, float historyMinutes)
			{
				if (!ItemHistories.TryGetValue(itemId, out var value))
				{
					value = new ItemHistory
					{
						ItemId = itemId,
						FirstSeenTime = Time.time
					};
					ItemHistories[itemId] = value;
				}
				value.RecordSample(shipKeys, Time.deltaTime, historyMinutes);
			}

			public void CleanUp(float historyMinutes)
			{
				float lifetime = Mathf.Max(0.5f, historyMinutes) * 60f;
				foreach (int item in (from kvp in ItemHistories
					where Time.time - kvp.Value.LastSeenTime > lifetime
					select kvp.Key).ToList())
				{
					ItemHistories.Remove(item);
				}
			}
		}

		private class ItemHistory
		{
			public int ItemId;

			public float FirstSeenTime;

			public float LastSeenTime;

			public float AverageVesselCount;

			private Queue<int> _history = new Queue<int>();

			public List<float> TripStartTimes = new List<float>();

			public HashSet<int> ActiveShipKeys = new HashSet<int>();

			public void RecordSample(List<int> shipKeys, float interval, float historyMinutes)
			{
				int count = shipKeys.Count;
				_history.Enqueue(count);
				float num = ((historyMinutes <= 0f) ? 0.1f : historyMinutes);
				int num2 = Mathf.Max(1, (int)(num * 60f / interval));
				while (_history.Count > num2)
				{
					_history.Dequeue();
				}
				AverageVesselCount = (float)_history.Sum() / (float)_history.Count;
				LastSeenTime = Time.time;
				foreach (int shipKey in shipKeys)
				{
					if (!ActiveShipKeys.Contains(shipKey))
					{
						TripStartTimes.Add(Time.time);
						ActiveShipKeys.Add(shipKey);
					}
				}
				ActiveShipKeys.IntersectWith(shipKeys);
			}

			public int GetTotalTrips(float windowMin)
			{
				float num = windowMin * 60f;
				if (num <= 0f)
				{
					num = 60f;
				}
				float cutoff = Time.time - num;
				TripStartTimes.RemoveAll((float t) => t < cutoff - 120f);
				return TripStartTimes.Count((float t) => t >= cutoff);
			}

			public float GetAlpha(float lifetimeSecs)
			{
				float num = Time.time - FirstSeenTime;
				float num2 = Time.time - LastSeenTime;
				float num3 = Mathf.Clamp01(num / 10f);
				float num4 = Mathf.Clamp01(1f - num2 / lifetimeSecs);
				return num3 * num4;
			}

			public Color GetColor(float min, float max)
			{
				//IL_009a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0077: Unknown result type (might be due to invalid IL or missing references)
				//IL_007c: Unknown result type (might be due to invalid IL or missing references)
				//IL_008e: Unknown result type (might be due to invalid IL or missing references)
				//IL_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)
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				if (VesselTrailsPlugin.TrailColorMode.Value == VesselTrailsPlugin.ColorMode.Heatmap)
				{
					float num = Mathf.Log(max + 1f);
					float num2 = Mathf.Log(min + 1f);
					float num3 = Mathf.Log(AverageVesselCount + 1f);
					float num4 = num - num2;
					float num5 = ((num4 < 0.01f) ? 0f : Mathf.Clamp01((num3 - num2) / num4));
					if (num5 < 0.5f)
					{
						return Color.Lerp(Color.green, Color.yellow, num5 * 2f);
					}
					return Color.Lerp(Color.yellow, Color.red, (num5 - 0.5f) * 2f);
				}
				return GetItemColor(ItemId);
			}
		}

		private static Material _trailMaterial;

		private static Dictionary<(int, int), RoutePath> _routePaths = new Dictionary<(int, int), RoutePath>();

		private static float _globalMaxTraffic = 1f;

		private static float _globalMinTraffic = 0f;

		private bool _showWindow;

		private Vector2 _scrollPos;

		private Vector2 _hoverScrollPos;

		private Rect _windowRect;

		private bool _isResizing;

		private Vector2 _resizeStartMouse;

		private Vector2 _resizeStartSize;

		private RoutePath _hoveredRoute;

		private Vector2 _mousePos;

		private void Start()
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			_windowRect = new Rect(VesselTrailsPlugin.WindowX.Value, VesselTrailsPlugin.WindowY.Value, VesselTrailsPlugin.WindowW.Value, VesselTrailsPlugin.WindowH.Value);
		}

		private static Color GetItemColor(int itemId)
		{
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			return (Color)(itemId switch
			{
				1001 => new Color(0.4f, 0.6f, 0.9f), 
				1002 => new Color(0.9f, 0.5f, 0.2f), 
				1003 => new Color(0.2f, 0.8f, 1f), 
				1120 => new Color(0.1f, 0.9f, 1f), 
				1121 => new Color(0.2f, 0.2f, 1f), 
				1122 => new Color(1f, 0.1f, 0.1f), 
				1210 => new Color(0.1f, 1f, 0.3f), 
				6006 => Color.white, 
				_ => new Color(0.4f, 0.7f, 1f), 
			});
		}

		private void Update()
		{
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			if (CustomKeyBindSystem.GetKeyBind("ToggleVesselTrailsUI").keyValue)
			{
				_showWindow = !_showWindow;
			}
			if (CustomKeyBindSystem.GetKeyBind("ToggleVesselTrailsLines").keyValue)
			{
				VesselTrailsPlugin.ShowTrails.Value = !VesselTrailsPlugin.ShowTrails.Value;
			}
			if (_isResizing)
			{
				if (Input.GetMouseButtonUp(0))
				{
					_isResizing = false;
					SaveWindowConfig();
				}
				else
				{
					Vector2 val = Vector2.op_Implicit(Input.mousePosition) - _resizeStartMouse;
					((Rect)(ref _windowRect)).width = Mathf.Max(300f, _resizeStartSize.x + val.x);
					((Rect)(ref _windowRect)).height = Mathf.Max(200f, _resizeStartSize.y - val.y);
				}
			}
		}

		private void SaveWindowConfig()
		{
			VesselTrailsPlugin.WindowX.Value = ((Rect)(ref _windowRect)).x;
			VesselTrailsPlugin.WindowY.Value = ((Rect)(ref _windowRect)).y;
			VesselTrailsPlugin.WindowW.Value = ((Rect)(ref _windowRect)).width;
			VesselTrailsPlugin.WindowH.Value = ((Rect)(ref _windowRect)).height;
		}

		private void LateUpdate()
		{
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_025b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0260: Unknown result type (might be due to invalid IL or missing references)
			//IL_0265: Unknown result type (might be due to invalid IL or missing references)
			//IL_0283: 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_0276: Unknown result type (might be due to invalid IL or missing references)
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0292: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0373: Unknown result type (might be due to invalid IL or missing references)
			//IL_0378: Unknown result type (might be due to invalid IL or missing references)
			//IL_0388: Unknown result type (might be due to invalid IL or missing references)
			//IL_038d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0390: Unknown result type (might be due to invalid IL or missing references)
			//IL_0392: Unknown result type (might be due to invalid IL or missing references)
			//IL_0394: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a2: 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)
			//IL_03a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b5: 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_03d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f4: 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_0402: Unknown result type (might be due to invalid IL or missing references)
			//IL_0404: Unknown result type (might be due to invalid IL or missing references)
			//IL_0413: Unknown result type (might be due to invalid IL or missing references)
			//IL_0417: Unknown result type (might be due to invalid IL or missing references)
			//IL_0419: Unknown result type (might be due to invalid IL or missing references)
			//IL_041e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0423: Unknown result type (might be due to invalid IL or missing references)
			//IL_042c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0431: Unknown result type (might be due to invalid IL or missing references)
			//IL_0444: Unknown result type (might be due to invalid IL or missing references)
			//IL_0449: Unknown result type (might be due to invalid IL or missing references)
			//IL_0452: Unknown result type (might be due to invalid IL or missing references)
			//IL_0457: Unknown result type (might be due to invalid IL or missing references)
			//IL_045c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0460: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_05cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_05dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_05fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0603: Unknown result type (might be due to invalid IL or missing references)
			//IL_0608: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0503: Unknown result type (might be due to invalid IL or missing references)
			//IL_0508: Unknown result type (might be due to invalid IL or missing references)
			//IL_051b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0520: Unknown result type (might be due to invalid IL or missing references)
			//IL_0524: Unknown result type (might be due to invalid IL or missing references)
			//IL_0529: Unknown result type (might be due to invalid IL or missing references)
			//IL_052e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0533: Unknown result type (might be due to invalid IL or missing references)
			if (GameMain.data == null || GameMain.data.galacticTransport == null)
			{
				return;
			}
			GalacticTransport galacticTransport = GameMain.data.galacticTransport;
			UIStarmap val = UIRoot.instance?.uiGame?.starmap;
			bool flag = (Object)(object)val != (Object)null && ((ManualBehaviour)val).active;
			Dictionary<(int, int, int), List<int>> dictionary = new Dictionary<(int, int, int), List<int>>();
			for (int i = 1; i < galacticTransport.stationCursor; i++)
			{
				StationComponent val2 = galacticTransport.stationPool[i];
				if (val2 == null || val2.id <= 0 || val2.workShipDatas == null)
				{
					continue;
				}
				for (int j = 0; j < val2.workShipDatas.Length; j++)
				{
					ShipData val3 = val2.workShipDatas[j];
					if (val3.otherGId <= 0)
					{
						continue;
					}
					int num = val3.planetA / 100;
					int num2 = val3.planetB / 100;
					if (num != num2 && num > 0 && num2 > 0)
					{
						(int, int, int) key = ((num < num2) ? (num, num2, val3.itemId) : (num2, num, val3.itemId));
						if (!dictionary.TryGetValue(key, out var value))
						{
							value = (dictionary[key] = new List<int>());
						}
						int item = (val2.gid << 16) | (j & 0xFFFF);
						value.Add(item);
					}
				}
			}
			float value2 = VesselTrailsPlugin.HistoryMinutes.Value;
			foreach (KeyValuePair<(int, int, int), List<int>> item2 in dictionary)
			{
				(int, int) key2 = (item2.Key.Item1, item2.Key.Item2);
				if (!_routePaths.TryGetValue(key2, out var value3))
				{
					value3 = new RoutePath
					{
						StarA = item2.Key.Item1,
						StarB = item2.Key.Item2
					};
					_routePaths[key2] = value3;
				}
				value3.UpdateItem(item2.Key.Item3, item2.Value, value2);
			}
			_globalMaxTraffic = 0f;
			_globalMinTraffic = float.MaxValue;
			Camera val4 = (flag ? val.screenCamera : Camera.main);
			_hoveredRoute = null;
			float num3 = 0.05f;
			_mousePos = Vector2.op_Implicit(Input.mousePosition);
			Ray ray = (Ray)(((Object)(object)val4 != (Object)null) ? val4.ScreenPointToRay(Vector2.op_Implicit(_mousePos)) : default(Ray));
			List<(int, int)> list2 = new List<(int, int)>();
			int num4 = -2097102335;
			RaycastHit val8 = default(RaycastHit);
			foreach (KeyValuePair<(int, int), RoutePath> routePath in _routePaths)
			{
				routePath.Value.CleanUp(value2);
				if (routePath.Value.ItemHistories.Count == 0)
				{
					list2.Add(routePath.Key);
					continue;
				}
				foreach (ItemHistory value4 in routePath.Value.ItemHistories.Values)
				{
					_globalMaxTraffic = Mathf.Max(_globalMaxTraffic, value4.AverageVesselCount);
					_globalMinTraffic = Mathf.Min(_globalMinTraffic, value4.AverageVesselCount);
				}
				if (!((Object)(object)val4 != (Object)null))
				{
					continue;
				}
				Vector3 starVPos = GetStarVPos(routePath.Value.StarA, flag);
				Vector3 starVPos2 = GetStarVPos(routePath.Value.StarB, flag);
				float num5 = DistanceRayToSegment(ray, starVPos, starVPos2);
				float num6 = Vector3.Distance(((Component)val4).transform.position, (starVPos + starVPos2) * 0.5f);
				float num7 = num5 / num6;
				if (!(num7 < num3))
				{
					continue;
				}
				Vector3 val5 = starVPos2 - starVPos;
				float num8 = Mathf.Clamp01(Vector3.Dot(((Ray)(ref ray)).origin + ((Ray)(ref ray)).direction * num6 - starVPos, val5) / Vector3.Dot(val5, val5));
				Vector3 val6 = starVPos + num8 * val5;
				float num9 = Vector3.Distance(((Component)val4).transform.position, val6);
				bool flag2 = false;
				Vector3 position = ((Component)val4).transform.position;
				Vector3 val7 = val6 - ((Component)val4).transform.position;
				if (Physics.Raycast(position, ((Vector3)(ref val7)).normalized, ref val8, num9, num4) && ((RaycastHit)(ref val8)).distance < num9 * 0.99f)
				{
					flag2 = true;
				}
				if (!flag2)
				{
					if (flag)
					{
						if ((Object)(object)val != (Object)null && val.planetUIs != null)
						{
							UIStarmapPlanet[] planetUIs = val.planetUIs;
							foreach (UIStarmapPlanet val9 in planetUIs)
							{
								if ((Object)(object)val9 == (Object)null || !((ManualBehaviour)val9).active || (Object)(object)val9.planetRenderer == (Object)null)
								{
									continue;
								}
								Vector3 position2 = ((Component)val9.planetRenderer).transform.position;
								if (Vector3.Distance(((Component)val4).transform.position, position2) < num9 * 0.99f)
								{
									val7 = Vector3.Cross(((Ray)(ref ray)).direction, position2 - ((Ray)(ref ray)).origin);
									float magnitude = ((Vector3)(ref val7)).magnitude;
									float num10 = val9.planet.realRadius * 0.00025f * 2f;
									if (magnitude < num10)
									{
										flag2 = true;
										break;
									}
								}
							}
						}
					}
					else
					{
						UniverseSimulator universeSimulator = GameMain.universeSimulator;
						if ((Object)(object)universeSimulator != (Object)null && universeSimulator.planetSimulators != null)
						{
							PlanetSimulator[] planetSimulators = universeSimulator.planetSimulators;
							foreach (PlanetSimulator val10 in planetSimulators)
							{
								if ((Object)(object)val10 == (Object)null || val10.planetData == null)
								{
									continue;
								}
								Vector3 position3 = ((Component)val10).transform.position;
								if (Vector3.Distance(((Component)val4).transform.position, position3) < num9 * 0.99f)
								{
									val7 = Vector3.Cross(((Ray)(ref ray)).direction, position3 - ((Ray)(ref ray)).origin);
									float magnitude2 = ((Vector3)(ref val7)).magnitude;
									float num11 = val10.planetData.realRadius * 0.00025f;
									if (magnitude2 < num11 * 2f)
									{
										flag2 = true;
										break;
									}
								}
							}
						}
					}
				}
				if (!flag2)
				{
					num3 = num7;
					_hoveredRoute = routePath.Value;
				}
			}
			foreach (var item3 in list2)
			{
				_routePaths.Remove(item3);
			}
			if (_globalMinTraffic == float.MaxValue)
			{
				_globalMinTraffic = 0f;
			}
		}

		private float DistanceRayToSegment(Ray ray, Vector3 a, Vector3 b)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//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_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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)
			//IL_0034: 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_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = b - a;
			Vector3 val2 = a - ((Ray)(ref ray)).origin;
			float num = Vector3.Dot(val, val);
			float num2 = Vector3.Dot(val, ((Ray)(ref ray)).direction);
			float num3 = Vector3.Dot(((Ray)(ref ray)).direction, ((Ray)(ref ray)).direction);
			float num4 = Vector3.Dot(val, val2);
			float num5 = Vector3.Dot(((Ray)(ref ray)).direction, val2);
			float num6 = num * num3 - num2 * num2;
			float num7 = ((num6 < 0.0001f) ? 0f : Mathf.Clamp01((num2 * num5 - num3 * num4) / num6));
			float num8 = (num2 * num7 + num5) / num3;
			if (num8 < 0f)
			{
				num8 = 0f;
			}
			return Vector3.Distance(a + num7 * val, ((Ray)(ref ray)).origin + num8 * ((Ray)(ref ray)).direction);
		}

		private void OnGUI()
		{
			//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_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Expected O, but got Unknown
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0577: Unknown result type (might be due to invalid IL or missing references)
			//IL_057d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Expected O, but got Unknown
			//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Expected O, but got Unknown
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01eb: Expected O, but got Unknown
			//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03df: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
			Color backgroundColor = GUI.backgroundColor;
			Color contentColor = GUI.contentColor;
			GUI.backgroundColor = new Color(0.12f, 0.15f, 0.2f, 0.95f);
			GUI.contentColor = Color.white;
			if (_showWindow)
			{
				float x = ((Rect)(ref _windowRect)).x;
				float y = ((Rect)(ref _windowRect)).y;
				_windowRect = GUI.Window(9922, _windowRect, new WindowFunction(WindowFunc), "Vessel Trails Logistics");
				if (Mathf.Abs(((Rect)(ref _windowRect)).x - x) > 0.1f || Mathf.Abs(((Rect)(ref _windowRect)).y - y) > 0.1f)
				{
					SaveWindowConfig();
				}
			}
			if (_hoveredRoute != null && VesselTrailsPlugin.ShowHoverTooltips.Value)
			{
				StarData obj = GameMain.galaxy.StarById(_hoveredRoute.StarA);
				string text = ((obj != null) ? obj.displayName : null) ?? $"Star {_hoveredRoute.StarA}";
				StarData obj2 = GameMain.galaxy.StarById(_hoveredRoute.StarB);
				string text2 = ((obj2 != null) ? obj2.displayName : null) ?? $"Star {_hoveredRoute.StarB}";
				float value = VesselTrailsPlugin.HistoryMinutes.Value;
				string text3 = ((value <= 0f) ? "Real-time" : $"Last {value:F1}m");
				GUIStyle val = new GUIStyle(GUI.skin.box);
				val.richText = true;
				val.padding = new RectOffset(10, 10, 10, 10);
				val.normal.background = Texture2D.whiteTexture;
				GUI.backgroundColor = new Color(0.05f, 0.07f, 0.1f, 0.95f);
				GUIStyle val2 = new GUIStyle(GUI.skin.label);
				val2.richText = true;
				val2.fontSize = 13;
				float num = 95f;
				float num2 = 24f;
				float num3 = 350f;
				float num4 = num + (float)_hoveredRoute.ItemHistories.Count * num2 + 10f;
				float num5 = (float)Screen.height * 0.7f;
				float num6 = Mathf.Min(num4, num5);
				float num7 = _mousePos.x + 20f;
				float num8 = (float)Screen.height - _mousePos.y - num6 - 10f;
				if (num8 < 10f)
				{
					num8 = (float)Screen.height - _mousePos.y + 20f;
				}
				if (num7 + num3 > (float)Screen.width)
				{
					num7 = (float)Screen.width - num3 - 10f;
				}
				if (num8 + num6 > (float)Screen.height)
				{
					num8 = (float)Screen.height - num6 - 10f;
				}
				GUILayout.BeginArea(new Rect(num7, num8, num3, num6), val);
				GUILayout.Label("<b>" + text + " <-> " + text2 + "</b>", val2, Array.Empty<GUILayoutOption>());
				GUILayout.Label("<size=11><color=#aaaaaa>" + text3 + "</color></size>", val2, Array.Empty<GUILayoutOption>());
				GUILayout.Space(5f);
				GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
				GUILayout.Label("<size=11><i>Item</i></size>", val2, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(160f) });
				GUILayout.Label("<size=11><i>Total</i></size>", val2, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(50f) });
				GUILayout.Label("<size=11><i>/min</i></size>", val2, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(50f) });
				GUILayout.Label("<size=11><i>Load</i></size>", val2, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(50f) });
				GUILayout.EndHorizontal();
				if (num4 > num5)
				{
					_hoverScrollPos = GUILayout.BeginScrollView(_hoverScrollPos, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(num5 - num) });
				}
				foreach (ItemHistory item in _hoveredRoute.ItemHistories.Values.OrderByDescending((ItemHistory h) => h.AverageVesselCount))
				{
					ItemProto obj3 = ((ProtoSet<ItemProto>)(object)LDB.items).Select(item.ItemId);
					string obj4 = ((obj3 != null) ? ((Proto)obj3).name : null) ?? $"Item {item.ItemId}";
					int totalTrips = item.GetTotalTrips(value);
					float num9 = (float)totalTrips / Mathf.Max(1f, value);
					GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
					GUILayout.Label(obj4, val2, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(160f) });
					GUILayout.Label($"{totalTrips}", val2, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(50f) });
					GUILayout.Label($"{num9:F1}", val2, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(50f) });
					GUILayout.Label($"{item.AverageVesselCount:F1}", val2, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(50f) });
					GUILayout.EndHorizontal();
				}
				if (num4 > num5)
				{
					GUILayout.EndScrollView();
				}
				GUILayout.EndArea();
			}
			GUI.backgroundColor = backgroundColor;
			GUI.contentColor = contentColor;
		}

		private void WindowFunc(int id)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Expected O, but got Unknown
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0403: Unknown result type (might be due to invalid IL or missing references)
			//IL_040a: Expected O, but got Unknown
			//IL_0421: Unknown result type (might be due to invalid IL or missing references)
			//IL_042b: Expected O, but got Unknown
			//IL_069f: Unknown result type (might be due to invalid IL or missing references)
			//IL_06f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_070a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0718: Unknown result type (might be due to invalid IL or missing references)
			//IL_072c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0731: Unknown result type (might be due to invalid IL or missing references)
			//IL_0736: Unknown result type (might be due to invalid IL or missing references)
			//IL_0752: Unknown result type (might be due to invalid IL or missing references)
			//IL_0757: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a4: Unknown result type (might be due to invalid IL or missing references)
			GUIStyle val = new GUIStyle(GUI.skin.label);
			val.richText = true;
			GUIStyle val2 = new GUIStyle(val);
			val2.normal.textColor = new Color(0.4f, 0.7f, 1f);
			val2.fontStyle = (FontStyle)1;
			GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
			GUILayout.Label("SETTINGS", val2, Array.Empty<GUILayoutOption>());
			VesselTrailsPlugin.ShowTrails.Value = GUILayout.Toggle(VesselTrailsPlugin.ShowTrails.Value, "Show Trails", Array.Empty<GUILayoutOption>());
			VesselTrailsPlugin.ShowHoverTooltips.Value = GUILayout.Toggle(VesselTrailsPlugin.ShowHoverTooltips.Value, "Show Hover Tooltips", Array.Empty<GUILayoutOption>());
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			float num = GUILayout.HorizontalSlider(VesselTrailsPlugin.TrailOpacity.Value, 0f, 1f, Array.Empty<GUILayoutOption>());
			VesselTrailsPlugin.TrailOpacity.Value = Mathf.Round(num * 10f) / 10f;
			GUILayout.Label($"Opacity: {VesselTrailsPlugin.TrailOpacity.Value:F1}", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(110f) });
			GUILayout.EndHorizontal();
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			float num2 = GUILayout.HorizontalSlider(VesselTrailsPlugin.TrailThicknessNormal.Value, 0.1f, 25f, Array.Empty<GUILayoutOption>());
			VesselTrailsPlugin.TrailThicknessNormal.Value = Mathf.Round(num2 * 10f) / 10f;
			GUILayout.Label($"Thick (Cam): {VesselTrailsPlugin.TrailThicknessNormal.Value:F1}", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(110f) });
			GUILayout.EndHorizontal();
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			float num3 = GUILayout.HorizontalSlider(VesselTrailsPlugin.TrailThicknessStarmap.Value, 0.1f, 25f, Array.Empty<GUILayoutOption>());
			VesselTrailsPlugin.TrailThicknessStarmap.Value = Mathf.Round(num3 * 10f) / 10f;
			GUILayout.Label($"Thick (Map): {VesselTrailsPlugin.TrailThicknessStarmap.Value:F1}", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(110f) });
			GUILayout.EndHorizontal();
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			float num4 = GUILayout.HorizontalSlider(VesselTrailsPlugin.HistoryMinutes.Value, 0f, 60f, Array.Empty<GUILayoutOption>());
			VesselTrailsPlugin.HistoryMinutes.Value = Mathf.Round(num4);
			GUILayout.Label($"History (min): {VesselTrailsPlugin.HistoryMinutes.Value:F0}", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(110f) });
			GUILayout.EndHorizontal();
			if (GUILayout.Button($"Color Mode: {VesselTrailsPlugin.TrailColorMode.Value}", Array.Empty<GUILayoutOption>()))
			{
				VesselTrailsPlugin.TrailColorMode.Value = ((VesselTrailsPlugin.TrailColorMode.Value != VesselTrailsPlugin.ColorMode.Heatmap) ? VesselTrailsPlugin.ColorMode.Heatmap : VesselTrailsPlugin.ColorMode.Material);
			}
			GUILayout.Space(15f);
			float value = VesselTrailsPlugin.HistoryMinutes.Value;
			string text = ((value <= 0f) ? "REAL-TIME" : $"LAST {value:F1}m");
			GUILayout.Label("ACTIVE ROUTES (" + text + ")", val2, Array.Empty<GUILayoutOption>());
			GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
			GUILayout.Label("Route / Item", val, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(((Rect)(ref _windowRect)).width - 240f) });
			GUILayout.Label("Total", val, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(50f) });
			GUILayout.Label("/min", val, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(50f) });
			GUILayout.Label("Load", val, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(50f) });
			GUILayout.EndHorizontal();
			_scrollPos = GUILayout.BeginScrollView(_scrollPos, Array.Empty<GUILayoutOption>());
			List<RoutePath> list = _routePaths.Values.OrderByDescending((RoutePath r) => r.TotalVessels).ToList();
			GUIStyle val3 = new GUIStyle(GUI.skin.box);
			val3.normal.background = Texture2D.whiteTexture;
			val3.padding = new RectOffset(5, 5, 5, 5);
			foreach (RoutePath item in list)
			{
				StarData obj = GameMain.galaxy.StarById(item.StarA);
				string text2 = ((obj != null) ? obj.displayName : null) ?? "Unknown";
				StarData obj2 = GameMain.galaxy.StarById(item.StarB);
				string text3 = ((obj2 != null) ? obj2.displayName : null) ?? "Unknown";
				GUI.backgroundColor = new Color(0.2f, 0.3f, 0.4f, 0.2f);
				GUILayout.BeginVertical(val3, Array.Empty<GUILayoutOption>());
				GUILayout.Label("<b>" + text2 + " -> " + text3 + "</b>", val, Array.Empty<GUILayoutOption>());
				foreach (ItemHistory item2 in item.ItemHistories.Values.OrderByDescending((ItemHistory h) => h.AverageVesselCount).ToList())
				{
					ItemProto obj3 = ((ProtoSet<ItemProto>)(object)LDB.items).Select(item2.ItemId);
					string text4 = ((obj3 != null) ? ((Proto)obj3).name : null) ?? "Unknown";
					int totalTrips = item2.GetTotalTrips(value);
					float num5 = (float)totalTrips / Mathf.Max(1f, value);
					GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
					GUILayout.Label(" <color=#aaaaaa>• " + text4 + "</color>", val, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(((Rect)(ref _windowRect)).width - 240f) });
					GUILayout.Label($"{totalTrips}", val, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(50f) });
					GUILayout.Label($"{num5:F1}", val, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(50f) });
					GUILayout.Label($"{item2.AverageVesselCount:F1}", val, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(50f) });
					GUILayout.EndHorizontal();
				}
				GUILayout.EndVertical();
			}
			GUILayout.EndScrollView();
			GUI.backgroundColor = new Color(0.8f, 0.4f, 0.1f, 0.8f);
			if (GUILayout.Button("CLOSE", Array.Empty<GUILayoutOption>()))
			{
				_showWindow = false;
			}
			GUILayout.EndVertical();
			Rect val4 = default(Rect);
			((Rect)(ref val4))..ctor(((Rect)(ref _windowRect)).width - 20f, ((Rect)(ref _windowRect)).height - 20f, 20f, 20f);
			GUI.Box(val4, "///");
			if ((int)Event.current.type == 0 && ((Rect)(ref val4)).Contains(Event.current.mousePosition))
			{
				_isResizing = true;
				_resizeStartMouse = Vector2.op_Implicit(Input.mousePosition);
				_resizeStartSize = new Vector2(((Rect)(ref _windowRect)).width, ((Rect)(ref _windowRect)).height);
				Event.current.Use();
			}
			GUI.DragWindow();
		}

		private Vector3 GetStarVPos(int starId, bool isStarmap)
		{
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			if (isStarmap)
			{
				UIStarmap val = UIRoot.instance?.uiGame?.starmap;
				if ((Object)(object)val != (Object)null && val.starUIs != null && starId > 0 && starId <= val.starUIs.Length)
				{
					UIStarmapStar val2 = val.starUIs[starId - 1];
					if ((Object)(object)val2 != (Object)null && (Object)(object)val2.starObject != (Object)null)
					{
						return val2.starObject.vpos;
					}
				}
			}
			else
			{
				UniverseSimulator universeSimulator = GameMain.universeSimulator;
				if ((Object)(object)universeSimulator != (Object)null && universeSimulator.starSimulators != null && starId > 0 && starId <= universeSimulator.starSimulators.Length)
				{
					StarSimulator val3 = universeSimulator.starSimulators[starId - 1];
					if ((Object)(object)val3 != (Object)null)
					{
						return ((Component)val3).transform.position;
					}
				}
			}
			return Vector3.zero;
		}

		private void OnRenderObject()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Invalid comparison between Unknown and I4
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: 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_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: 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_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Expected O, but got Unknown
			//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_0207: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_020b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0215: Unknown result type (might be due to invalid IL or missing references)
			//IL_021a: Unknown result type (might be due to invalid IL or missing references)
			//IL_021b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0220: Unknown result type (might be due to invalid IL or missing references)
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Unknown result type (might be due to invalid IL or missing references)
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0231: Unknown result type (might be due to invalid IL or missing references)
			//IL_0233: Unknown result type (might be due to invalid IL or missing references)
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			//IL_023f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0241: Unknown result type (might be due to invalid IL or missing references)
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: 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_025e: Unknown result type (might be due to invalid IL or missing references)
			//IL_025f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0263: Unknown result type (might be due to invalid IL or missing references)
			//IL_0265: Unknown result type (might be due to invalid IL or missing references)
			//IL_0267: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0271: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0303: Unknown result type (might be due to invalid IL or missing references)
			//IL_0325: Unknown result type (might be due to invalid IL or missing references)
			//IL_0327: Unknown result type (might be due to invalid IL or missing references)
			//IL_0328: Unknown result type (might be due to invalid IL or missing references)
			//IL_032d: Unknown result type (might be due to invalid IL or missing references)
			//IL_032f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0331: Unknown result type (might be due to invalid IL or missing references)
			//IL_0332: Unknown result type (might be due to invalid IL or missing references)
			//IL_0337: Unknown result type (might be due to invalid IL or missing references)
			//IL_02da: Unknown result type (might be due to invalid IL or missing references)
			//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0380: Unknown result type (might be due to invalid IL or missing references)
			//IL_0385: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f1: 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_03f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0403: Unknown result type (might be due to invalid IL or missing references)
			//IL_0408: Unknown result type (might be due to invalid IL or missing references)
			//IL_040c: Unknown result type (might be due to invalid IL or missing references)
			//IL_03de: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0501: Unknown result type (might be due to invalid IL or missing references)
			//IL_0506: Unknown result type (might be due to invalid IL or missing references)
			//IL_0519: Unknown result type (might be due to invalid IL or missing references)
			//IL_051e: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_04eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0529: Unknown result type (might be due to invalid IL or missing references)
			//IL_0531: Unknown result type (might be due to invalid IL or missing references)
			//IL_0533: Unknown result type (might be due to invalid IL or missing references)
			//IL_0535: Unknown result type (might be due to invalid IL or missing references)
			//IL_0539: Unknown result type (might be due to invalid IL or missing references)
			//IL_053e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0542: Unknown result type (might be due to invalid IL or missing references)
			if (!VesselTrailsPlugin.ShowTrails.Value || _routePaths.Count == 0 || GameMain.data == null)
			{
				return;
			}
			Camera current = Camera.current;
			if ((Object)(object)current == (Object)null || (int)current.cameraType != 1)
			{
				return;
			}
			UIStarmap val = UIRoot.instance?.uiGame?.starmap;
			bool flag = (Object)(object)val != (Object)null && ((ManualBehaviour)val).active;
			if (flag)
			{
				if ((Object)(object)current != (Object)(object)val.screenCamera)
				{
					return;
				}
			}
			else if ((Object)(object)current != (Object)(object)Camera.main)
			{
				return;
			}
			if ((Object)(object)_trailMaterial == (Object)null)
			{
				_trailMaterial = new Material(Shader.Find("Hidden/Internal-Colored"));
				_trailMaterial.SetInt("_SrcBlend", 5);
				_trailMaterial.SetInt("_DstBlend", 10);
				_trailMaterial.SetInt("_ZWrite", 0);
				_trailMaterial.SetInt("_ZTest", 4);
				_trailMaterial.SetInt("_Cull", 0);
				_trailMaterial.renderQueue = 3100;
			}
			Vector3 position = ((Component)current).transform.position;
			GL.PushMatrix();
			GL.LoadProjectionMatrix(current.projectionMatrix);
			GL.modelview = current.worldToCameraMatrix * Matrix4x4.Translate(position);
			_trailMaterial.SetPass(0);
			float value = VesselTrailsPlugin.TrailOpacity.Value;
			float lifetimeSecs = Mathf.Max(1f, VesselTrailsPlugin.HistoryMinutes.Value * 60f);
			float num = (flag ? VesselTrailsPlugin.TrailThicknessStarmap.Value : VesselTrailsPlugin.TrailThicknessNormal.Value);
			GL.Begin(7);
			foreach (RoutePath value2 in _routePaths.Values)
			{
				Vector3 starVPos = GetStarVPos(value2.StarA, flag);
				Vector3 starVPos2 = GetStarVPos(value2.StarB, flag);
				if (starVPos == Vector3.zero || starVPos2 == Vector3.zero)
				{
					continue;
				}
				Vector3 val2 = starVPos2 - starVPos;
				Vector3 normalized = ((Vector3)(ref val2)).normalized;
				Vector3 val3 = (starVPos + starVPos2) * 0.5f - position;
				float magnitude = ((Vector3)(ref val3)).magnitude;
				float num2 = Mathf.Clamp01(Vector3.Dot(position - starVPos, starVPos2 - starVPos) / Vector3.Dot(starVPos2 - starVPos, starVPos2 - starVPos));
				float num3 = Vector3.Distance(position, starVPos + num2 * (starVPos2 - starVPos));
				float num4 = Mathf.Min(magnitude, num3);
				float num5 = (flag ? 4E-05f : 5E-05f);
				float num6 = num4 * num5 * num;
				num6 = Mathf.Max(num6, flag ? 0.005f : 0.05f);
				val2 = Vector3.Cross(normalized, Vector3.up);
				Vector3 normalized2 = ((Vector3)(ref val2)).normalized;
				if (((Vector3)(ref normalized2)).sqrMagnitude < 0.0001f)
				{
					val2 = Vector3.Cross(normalized, Vector3.right);
					normalized2 = ((Vector3)(ref val2)).normalized;
				}
				val2 = Vector3.Cross(normalized, normalized2);
				Vector3 normalized3 = ((Vector3)(ref val2)).normalized;
				List<ItemHistory> list = value2.ItemHistories.Values.ToList();
				bool num7 = VesselTrailsPlugin.TrailColorMode.Value == VesselTrailsPlugin.ColorMode.Material;
				Vector3 val4 = starVPos - position;
				Vector3 val5 = starVPos2 - position;
				if (num7)
				{
					int count = list.Count;
					for (int i = 0; i < count; i++)
					{
						ItemHistory itemHistory = list[i];
						float num8 = value * itemHistory.GetAlpha(lifetimeSecs);
						if (!(num8 <= 0.001f))
						{
							Color color = itemHistory.GetColor(_globalMinTraffic, _globalMaxTraffic);
							color.a = num8;
							float num9 = (float)i / (float)count * MathF.PI * 2f;
							Vector3 val6 = (normalized3 * Mathf.Cos(num9) + normalized2 * Mathf.Sin(num9)) * num6 * 1.2f;
							if (count == 1)
							{
								val6 = Vector3.zero;
							}
							GL.Color(color);
							DrawPrism(val4 + val6, val5 + val6, normalized3 * num6, normalized2 * num6);
						}
					}
					continue;
				}
				float num10 = 0f;
				foreach (ItemHistory item in list)
				{
					num10 = Mathf.Max(num10, item.GetAlpha(lifetimeSecs));
				}
				float num11 = value * num10;
				if (!(num11 <= 0.001f))
				{
					float num12 = Mathf.Log(_globalMaxTraffic + 1f);
					float num13 = Mathf.Log(_globalMinTraffic + 1f);
					float num14 = Mathf.Log(value2.TotalVessels + 1f);
					float num15 = num12 - num13;
					float num16 = ((num15 < 0.01f) ? 0f : Mathf.Clamp01((num14 - num13) / num15));
					Color val7 = ((!(num16 < 0.5f)) ? Color.Lerp(Color.yellow, Color.red, (num16 - 0.5f) * 2f) : Color.Lerp(Color.green, Color.yellow, num16 * 2f));
					val7.a = num11;
					GL.Color(val7);
					DrawPrism(val4, val5, normalized3 * num6, normalized2 * num6);
				}
			}
			GL.End();
			GL.PopMatrix();
		}

		private void DrawPrism(Vector3 posA, Vector3 posB, Vector3 w, Vector3 h)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: 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_004c: 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_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: 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)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: 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_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: 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_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: 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_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: 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_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: 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_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			GL.Vertex(posA + h - w);
			GL.Vertex(posA + h + w);
			GL.Vertex(posB + h + w);
			GL.Vertex(posB + h - w);
			GL.Vertex(posA - h - w);
			GL.Vertex(posA - h + w);
			GL.Vertex(posB - h + w);
			GL.Vertex(posB - h - w);
			GL.Vertex(posA - h - w);
			GL.Vertex(posA + h - w);
			GL.Vertex(posB + h - w);
			GL.Vertex(posB - h - w);
			GL.Vertex(posA - h + w);
			GL.Vertex(posA + h + w);
			GL.Vertex(posB + h + w);
			GL.Vertex(posB - h + w);
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "com.Valoneu.VesselTrails";

		public const string PLUGIN_NAME = "VesselTrails";

		public const string PLUGIN_VERSION = "1.2.0";
	}
}