Decompiled source of ItemMarker v1.0.0

BepInEx/plugins/Hikaria.ItemMarker/Hikaria.ItemMarker.dll

Decompiled a week ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using AIGraph;
using Agents;
using BepInEx.Unity.IL2CPP.Utils.Collections;
using GameData;
using Gear;
using Hikaria.Core;
using Hikaria.Core.Interfaces;
using Hikaria.ItemMarker.Features;
using Hikaria.ItemMarker.Handlers;
using Hikaria.ItemMarker.Handlers.Markers;
using Hikaria.ItemMarker.Managers;
using Il2CppInterop.Runtime;
using Il2CppInterop.Runtime.Attributes;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem;
using LevelGeneration;
using Player;
using SNetwork;
using TMPro;
using TheArchive.Core;
using TheArchive.Core.Attributes;
using TheArchive.Core.Attributes.Feature.Settings;
using TheArchive.Core.FeaturesAPI;
using TheArchive.Core.Localization;
using TheArchive.Core.Models;
using TheArchive.Core.ModulesAPI;
using TheArchive.Interfaces;
using TheArchive.Loader;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("Hikaria.ItemMarker")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+f763f1f8d120edd709825d19c90e45a40dcbb5bb")]
[assembly: AssemblyProduct("Hikaria.ItemMarker")]
[assembly: AssemblyTitle("Hikaria.ItemMarker")]
[assembly: AssemblyVersion("1.0.0.0")]
public enum ItemMarkerVisibleUpdateModeType
{
	World,
	CourseNode,
	Zone,
	Dimension,
	Manual,
	Dev
}
namespace Hikaria.ItemMarker
{
	[ArchiveDependency(/*Could not decode attribute arguments.*/)]
	[ArchiveModule("Hikaria.ItemMarker", "ItemMarker", "1.0.0")]
	public class EntryPoint : IArchiveModule
	{
		public bool ApplyHarmonyPatches => false;

		public bool UsesLegacyPatches => false;

		public ArchiveLegacyPatcher Patcher { get; set; }

		public string ModuleGroup => FeatureGroup.op_Implicit(FeatureGroups.GetOrCreateModuleGroup("Item Marker", new Dictionary<Language, string>
		{
			{
				(Language)0,
				"Item Marker"
			},
			{
				(Language)1,
				"物品标记"
			}
		}));

		public void Init()
		{
			Logs.LogMessage("OK");
		}

		public void OnExit()
		{
		}

		public void OnLateUpdate()
		{
		}

		public void OnSceneWasLoaded(int buildIndex, string sceneName)
		{
		}
	}
	internal static class Logs
	{
		private static IArchiveLogger _logger;

		private static IArchiveLogger Logger => _logger ?? (_logger = LoaderWrapper.CreateLoggerInstance("Hikaria.ItemMarker", ConsoleColor.White));

		public static void LogDebug(object data)
		{
			Logger.Debug(data.ToString());
		}

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

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

		public static void LogMessage(object data)
		{
			Logger.Msg(ConsoleColor.White, data.ToString());
		}

		public static void LogWarning(object data)
		{
			Logger.Warning(data.ToString());
		}

		public static void LogNotice(object data)
		{
			Logger.Notice(data.ToString());
		}

		public static void LogSuccess(object data)
		{
			Logger.Success(data.ToString());
		}

		public static void LogException(Exception ex)
		{
			Logger.Exception(ex);
		}
	}
	public static class PluginInfo
	{
		public const string GUID = "Hikaria.ItemMarker";

		public const string NAME = "ItemMarker";

		public const string VERSION = "1.0.0";
	}
}
namespace Hikaria.ItemMarker.Managers
{
	public static class IconManager
	{
		private static Dictionary<string, Sprite> _customItemIconSprites = new Dictionary<string, Sprite>();

		private static Dictionary<string, Texture2D> _customItemIconTextures = new Dictionary<string, Texture2D>();

		public static bool TryGetCustomIcon(string fileName, out Sprite sprite)
		{
			return _customItemIconSprites.TryGetValue(fileName, out sprite);
		}

		internal static void Init()
		{
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Expected O, but got Unknown
			//IL_00b0: 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)
			string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Assets/icons");
			if (!Directory.Exists(path))
			{
				Directory.CreateDirectory(path);
			}
			string[] files = Directory.GetFiles(path, "*.png");
			foreach (string path2 in files)
			{
				string fileName = Path.GetFileName(path2);
				string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(path2);
				byte[] array = File.ReadAllBytes(path2);
				Texture2D val = new Texture2D(2, 2);
				if (ImageConversion.LoadImage(val, Il2CppStructArray<byte>.op_Implicit(array)))
				{
					((Object)val).name = fileNameWithoutExtension;
					((Object)val).hideFlags = (HideFlags)61;
					_customItemIconTextures[fileName] = val;
					Sprite val2 = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f), 64f);
					((Object)val2).name = Path.GetFileNameWithoutExtension(path2);
					((Object)val2).hideFlags = (HideFlags)61;
					_customItemIconSprites[fileName] = val2;
				}
			}
		}
	}
	public static class ItemMarkerManager
	{
		private static bool _devMode;

		private static readonly Dictionary<Type, Type> _itemMarkers = new Dictionary<Type, Type>();

		private static readonly HashSet<Type> _typesToInspect = new HashSet<Type>();

		private static readonly Dictionary<int, HashSet<ItemMarkerBase>> _terminalItemMarkers = new Dictionary<int, HashSet<ItemMarkerBase>>();

		private static readonly HashSet<ItemMarkerBase> _allItemMarkers = new HashSet<ItemMarkerBase>();

		private static readonly Dictionary<ItemMarkerVisibleUpdateModeType, HashSet<ItemMarkerBase>> ItemMarkerAutoUpdateModeLookup = new Dictionary<ItemMarkerVisibleUpdateModeType, HashSet<ItemMarkerBase>>
		{
			{
				ItemMarkerVisibleUpdateModeType.World,
				new HashSet<ItemMarkerBase>()
			},
			{
				ItemMarkerVisibleUpdateModeType.CourseNode,
				new HashSet<ItemMarkerBase>()
			},
			{
				ItemMarkerVisibleUpdateModeType.Zone,
				new HashSet<ItemMarkerBase>()
			},
			{
				ItemMarkerVisibleUpdateModeType.Dimension,
				new HashSet<ItemMarkerBase>()
			},
			{
				ItemMarkerVisibleUpdateModeType.Manual,
				new HashSet<ItemMarkerBase>()
			},
			{
				ItemMarkerVisibleUpdateModeType.Dev,
				new HashSet<ItemMarkerBase>()
			}
		};

		public static bool DevMode
		{
			get
			{
				return _devMode;
			}
			set
			{
				if (_devMode == value)
				{
					return;
				}
				_devMode = value;
				if (_devMode)
				{
					foreach (ItemMarkerBase allItemMarker in _allItemMarkers)
					{
						allItemMarker.DoEnterDevMode();
						if (!((Behaviour)allItemMarker).enabled)
						{
							CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(UpdateDevMode(allItemMarker)), (Action)null);
						}
					}
					return;
				}
				foreach (ItemMarkerBase allItemMarker2 in _allItemMarkers)
				{
					allItemMarker2.DoExitDevMode();
				}
			}
		}

		private static IEnumerator UpdateDevMode(ItemMarkerBase marker)
		{
			WaitForSecondsRealtime yielder = new WaitForSecondsRealtime(0.2f);
			while (DevMode)
			{
				marker.DoDevModeUpdate();
				yield return yielder;
			}
		}

		internal static void Init()
		{
			ClassInjector.RegisterTypeInIl2Cpp<ItemMarkerTag>(false);
			ClassInjector.RegisterTypeInIl2Cpp<ItemScanner>(false);
			ClassInjector.RegisterTypeInIl2Cpp<ItemMarkerBase>(false);
			ClassInjector.RegisterTypeInIl2Cpp<ItemInLevel_Marker>(false);
			ClassInjector.RegisterTypeInIl2Cpp<LG_ComputerTerminal_Marker>(false);
			ClassInjector.RegisterTypeInIl2Cpp<LG_PowerGenerator_Marker>(false);
			ClassInjector.RegisterTypeInIl2Cpp<LG_HSU_Marker>(false);
			ClassInjector.RegisterTypeInIl2Cpp<LG_HSUActivator_Marker>(false);
			ClassInjector.RegisterTypeInIl2Cpp<LG_BulkheadDoorController_Marker>(false);
			ClassInjector.RegisterTypeInIl2Cpp<LG_SecurityDoor_Locks_Marker>(false);
			ClassInjector.RegisterTypeInIl2Cpp<LG_DisinfectionStation_Marker>(false);
		}

		internal static void SearchGameObject()
		{
			foreach (Type item in _typesToInspect)
			{
				foreach (Object item2 in (Il2CppArrayBase<Object>)(object)Object.FindObjectsOfType(item))
				{
					Component val = ((Il2CppObjectBase)item2).Cast<Component>();
					if ((Object)(object)val.GetComponent<ItemMarkerBase>() == (Object)null)
					{
						((Il2CppObjectBase)val.gameObject.AddComponent(_itemMarkers[item])).Cast<ItemMarkerBase>().SetupNavMarker(val);
					}
				}
			}
		}

		public static void RegisterItemMarker<C, T>() where C : Component where T : ItemMarkerBase
		{
			Type val = Il2CppType.Of<C>(true);
			_typesToInspect.Add(val);
			ClassInjector.RegisterTypeInIl2Cpp<T>(false);
			_itemMarkers.Add(val, Il2CppType.Of<T>(true));
		}

		internal static void RegisterItemMarker(ItemMarkerBase marker)
		{
			_allItemMarkers.Add(marker);
			if (!((Behaviour)marker).enabled)
			{
				CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(UpdateDevMode(marker)), (Action)null);
			}
		}

		internal static void UnregisterItemMarker(ItemMarkerBase marker)
		{
			_allItemMarkers.Remove(marker);
		}

		internal static void RegisterTerminalItemMarker(int instanceId, ItemMarkerBase marker)
		{
			if (!_terminalItemMarkers.TryGetValue(instanceId, out var value))
			{
				value = new HashSet<ItemMarkerBase>();
				_terminalItemMarkers[instanceId] = value;
			}
			value.Add(marker);
		}

		internal static void UnregisterTerminalItemMarker(int instanceId, ItemMarkerBase marker)
		{
			if (!_terminalItemMarkers.TryGetValue(instanceId, out var value))
			{
				value = new HashSet<ItemMarkerBase>();
				_terminalItemMarkers[instanceId] = value;
			}
			value.Remove(marker);
		}

		internal static void OnTerminalPing(int instanceId)
		{
			if (!_terminalItemMarkers.TryGetValue(instanceId, out var value))
			{
				return;
			}
			foreach (ItemMarkerBase item in value)
			{
				item.OnTerminalPing();
			}
		}

		internal static void OnTerminalItemKeyUpdate(int instanceId, string key)
		{
			if (!_terminalItemMarkers.TryGetValue(instanceId, out var value))
			{
				return;
			}
			foreach (ItemMarkerBase item in value)
			{
				item.OnTerminalItemKeyUpdate(key);
			}
		}

		internal static void RegisterItemMarkerAutoUpdate(ItemMarkerBase itemMarker)
		{
			if (ItemMarkerAutoUpdateModeLookup.TryGetValue(itemMarker.VisibleUpdateMode, out var value))
			{
				value.Add(itemMarker);
			}
		}

		internal static void UnregisterItemMarkerAutoUpdate(ItemMarkerBase itemMarker)
		{
			if (ItemMarkerAutoUpdateModeLookup.TryGetValue(itemMarker.VisibleUpdateMode, out var value))
			{
				value.Remove(itemMarker);
			}
		}

		internal static void OnPlayerCourseNodeChanged(AIG_CourseNode newNode)
		{
			if (DevMode)
			{
				foreach (ItemMarkerBase allItemMarker in _allItemMarkers)
				{
					allItemMarker.DoDevModeUpdate();
				}
				return;
			}
			foreach (ItemMarkerBase item in ItemMarkerAutoUpdateModeLookup[ItemMarkerVisibleUpdateModeType.CourseNode])
			{
				item.OnPlayerCourseNodeChanged(newNode);
			}
		}

		internal static void OnPlayerZoneChanged(LG_Zone newZone)
		{
			if (DevMode)
			{
				foreach (ItemMarkerBase allItemMarker in _allItemMarkers)
				{
					allItemMarker.DoDevModeUpdate();
				}
				return;
			}
			foreach (ItemMarkerBase item in ItemMarkerAutoUpdateModeLookup[ItemMarkerVisibleUpdateModeType.Zone])
			{
				item.OnPlayerZoneChanged(newZone);
			}
		}

		internal static void OnPlayerDimensionChanged(Dimension newDim)
		{
			if (DevMode)
			{
				foreach (ItemMarkerBase allItemMarker in _allItemMarkers)
				{
					allItemMarker.DoDevModeUpdate();
				}
				return;
			}
			foreach (ItemMarkerBase item in ItemMarkerAutoUpdateModeLookup[ItemMarkerVisibleUpdateModeType.Dimension])
			{
				item.OnPlayerDimensionChanged(newDim);
			}
		}
	}
}
namespace Hikaria.ItemMarker.Handlers
{
	public class ItemMarkerBase : MonoBehaviour, IOnResetSession, IOnRecallComplete, IOnBufferCommand
	{
		protected struct pBasicState
		{
			public bool IsDiscovered;

			public bool IsVisible;
		}

		protected bool m_markerAlwaysShowTitle;

		protected bool m_markerAlwaysShowDistance;

		protected float m_markerPingFadeOutTime = 12f;

		protected ItemMarkerVisibleUpdateModeType m_markerVisibleUpdateMode;

		protected float m_markerVisibleWorldDistance = 30f;

		protected int m_markerVisibleCourseNodeDistance = 1;

		protected float m_markerAlpha = 0.9f;

		protected float m_markerAlphaADS = 0.4f;

		protected Color m_markerColor = Color.white;

		protected string m_markerTitle = string.Empty;

		protected eNavMarkerStyle m_markerStyle;

		protected float m_markerIconScale = 0.4f;

		protected int m_markerTitleFontSize = 50;

		protected bool m_markerTitleUseTerminalItemKey;

		protected bool m_overridePlayerPing = true;

		protected bool m_markerShowPin;

		protected LG_GenericTerminalItem m_terminalItem;

		protected NavMarker m_marker;

		protected float m_updateTimer;

		protected float m_markerForceVisibleTimer;

		protected readonly Dictionary<eBufferType, pBasicState> m_basicBuffers = new Dictionary<eBufferType, pBasicState>();

		private PlayerAgent m_localPlayer;

		private bool m_isDiscovered;

		public bool IsDiscovered
		{
			get
			{
				return m_isDiscovered;
			}
			set
			{
				m_isDiscovered = value;
				ForceUpdate();
			}
		}

		private bool AimButtonHeld
		{
			get
			{
				//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)
				//IL_002e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0030: Invalid comparison between Unknown and I4
				//IL_0032: Unknown result type (might be due to invalid IL or missing references)
				//IL_0034: Invalid comparison between Unknown and I4
				if ((Object)(object)LocalPlayerAgent == (Object)null || !((Agent)LocalPlayerAgent).Alive)
				{
					return false;
				}
				InventorySlot wieldedSlot = LocalPlayerAgent.Inventory.WieldedSlot;
				if ((int)wieldedSlot < 1 || (int)wieldedSlot > 3)
				{
					return false;
				}
				ItemEquippable wieldedItem = LocalPlayerAgent.Inventory.WieldedItem;
				if (wieldedItem == null)
				{
					return false;
				}
				return wieldedItem.AimButtonHeld;
			}
		}

		public PlayerAgent LocalPlayerAgent
		{
			get
			{
				if ((Object)(object)m_localPlayer == (Object)null)
				{
					m_localPlayer = PlayerManager.GetLocalPlayerAgent();
				}
				return m_localPlayer;
			}
		}

		public virtual bool AllowDiscoverScan => !m_isDiscovered;

		public virtual AIG_CourseNode CourseNode => m_terminalItem.SpawnNode;

		public bool IsVisible => m_marker.IsVisible;

		public bool IsVisibleAndInFocus
		{
			get
			{
				//IL_0013: Unknown result type (might be due to invalid IL or missing references)
				//IL_0019: Invalid comparison between Unknown and I4
				if (m_marker.IsVisible)
				{
					return (int)m_marker.m_currentState == 2;
				}
				return false;
			}
		}

		public eNavMarkerStyle Style => m_markerStyle;

		internal ItemMarkerVisibleUpdateModeType VisibleUpdateMode => m_markerVisibleUpdateMode;

		protected virtual string MarkerTitle => m_markerTitle;

		public virtual void SetupNavMarker(Component comp)
		{
			//IL_0025: 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_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_016f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			if (m_marker == null)
			{
				m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(comp.gameObject);
			}
			m_marker.SetStyle(m_markerStyle);
			m_marker.SetIconScale(m_markerIconScale);
			m_marker.SetPinEnabled(m_markerShowPin);
			m_marker.SetColor(m_markerColor);
			m_marker.SetAlpha(m_markerAlpha);
			m_marker.SetVisible(false);
			((TMP_Text)m_marker.m_title).fontSizeMax = m_markerTitleFontSize;
			((TMP_Text)m_marker.m_title).fontSizeMin = m_markerTitleFontSize;
			if (m_terminalItem == null)
			{
				m_terminalItem = comp.GetComponentInChildren<LG_GenericTerminalItem>();
			}
			if (!string.IsNullOrEmpty(m_markerTitle))
			{
				m_marker.SetTitle(m_markerTitle);
			}
			else if ((Object)(object)m_terminalItem != (Object)null && !string.IsNullOrEmpty(m_terminalItem.TerminalItemKey))
			{
				m_marker.SetTitle(m_terminalItem.TerminalItemKey);
			}
			else
			{
				m_marker.SetTitle(((Object)comp.gameObject).name);
			}
			((TMP_Text)m_marker.m_title).rectTransform.sizeDelta = new Vector2(((TMP_Text)m_marker.m_title).rectTransform.sizeDelta.x * 3f, ((TMP_Text)m_marker.m_title).rectTransform.sizeDelta.y);
			if (m_markerAlwaysShowTitle)
			{
				Il2CppStructArray<NavMarkerOption> stateOptions = m_marker.m_stateOptions;
				((Il2CppArrayBase<NavMarkerOption>)(object)stateOptions)[1] = (NavMarkerOption)(((Il2CppArrayBase<NavMarkerOption>)(object)stateOptions)[1] | 0x10);
			}
			if (m_markerAlwaysShowDistance)
			{
				Il2CppStructArray<NavMarkerOption> stateOptions = m_marker.m_stateOptions;
				((Il2CppArrayBase<NavMarkerOption>)(object)stateOptions)[1] = (NavMarkerOption)(((Il2CppArrayBase<NavMarkerOption>)(object)stateOptions)[1] | 8);
			}
			if (m_overridePlayerPing)
			{
				foreach (Collider componentsInChild in comp.GetComponentsInChildren<Collider>(true))
				{
					if ((Object)(object)((Component)componentsInChild).GetComponent<ItemMarkerTag>() == (Object)null)
					{
						((Component)componentsInChild).gameObject.AddComponent<ItemMarkerTag>().Setup(this);
					}
				}
			}
			((Behaviour)this).enabled = m_markerVisibleUpdateMode == ItemMarkerVisibleUpdateModeType.World;
			if (!((Behaviour)this).enabled)
			{
				CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(UpdateMarkerAlphaCoroutine()), (Action)null);
			}
			GameEventAPI.RegisterListener<ItemMarkerBase>(this);
			ItemMarkerManager.RegisterItemMarkerAutoUpdate(this);
			if ((Object)(object)m_terminalItem != (Object)null)
			{
				ItemMarkerManager.RegisterTerminalItemMarker(((Object)m_terminalItem).GetInstanceID(), this);
			}
			ItemMarkerManager.RegisterItemMarker(this);
		}

		public virtual void OnPlayerPing()
		{
			if (!IsDiscovered)
			{
				IsDiscovered = true;
			}
			AttemptInteract((eNavMarkerInteractionType)0);
			m_marker.Ping(m_markerPingFadeOutTime);
			m_markerForceVisibleTimer = Clock.Time + m_markerPingFadeOutTime;
			if (!((Behaviour)this).enabled)
			{
				CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(HideDelay(m_markerPingFadeOutTime + 0.01f)), (Action)null);
			}
		}

		public virtual void OnTerminalPing()
		{
			AttemptInteract((eNavMarkerInteractionType)0);
			m_marker.Ping(m_markerPingFadeOutTime);
			m_markerForceVisibleTimer = Clock.Time + m_markerPingFadeOutTime;
			if (!((Behaviour)this).enabled)
			{
				CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(HideDelay(m_markerPingFadeOutTime + 0.01f)), (Action)null);
			}
		}

		public virtual void OnPlayerCourseNodeChanged(AIG_CourseNode newNode)
		{
			if (IsDiscovered)
			{
				if (newNode == null || CourseNode == null)
				{
					AttemptInteract((eNavMarkerInteractionType)1);
				}
				else if (AIG_CourseGraph.GetDistanceBetweenToNodes(CourseNode, ((Agent)LocalPlayerAgent).CourseNode) <= m_markerVisibleCourseNodeDistance)
				{
					AttemptInteract((eNavMarkerInteractionType)0);
				}
				else
				{
					AttemptInteract((eNavMarkerInteractionType)1);
				}
			}
		}

		public virtual void OnPlayerZoneChanged(LG_Zone newZone)
		{
			if (IsDiscovered)
			{
				if ((Object)(object)newZone == (Object)null || CourseNode == null)
				{
					AttemptInteract((eNavMarkerInteractionType)1);
				}
				else if (CourseNode.m_zone.ID == newZone.ID)
				{
					AttemptInteract((eNavMarkerInteractionType)0);
				}
				else
				{
					AttemptInteract((eNavMarkerInteractionType)1);
				}
			}
		}

		public virtual void OnPlayerDimensionChanged(Dimension newDim)
		{
			//IL_0027: 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 (IsDiscovered)
			{
				if (newDim == null || CourseNode == null)
				{
					AttemptInteract((eNavMarkerInteractionType)1);
				}
				else if (CourseNode.m_dimension.DimensionIndex == newDim.DimensionIndex)
				{
					AttemptInteract((eNavMarkerInteractionType)0);
				}
				else
				{
					AttemptInteract((eNavMarkerInteractionType)1);
				}
			}
		}

		internal void OnTerminalItemKeyUpdate(string key)
		{
			if (m_markerTitleUseTerminalItemKey)
			{
				m_marker.SetTitle(key);
			}
		}

		public void AttemptInteract(eNavMarkerInteractionType interaction)
		{
			//IL_0000: 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_001f: Invalid comparison between Unknown and I4
			if ((int)interaction == 0)
			{
				if (!m_marker.IsVisible)
				{
					m_marker.SetVisible(true);
				}
			}
			else if ((int)interaction == 1 && m_marker.IsVisible)
			{
				m_marker.SetVisible(false);
			}
		}

		protected virtual void Update()
		{
			if (!((Object)(object)m_marker == (Object)null) && !(m_updateTimer > Clock.Time))
			{
				m_updateTimer = Clock.Time + 0.2f;
				if (ItemMarkerManager.DevMode)
				{
					OnDevUpdate();
				}
				else if (m_markerForceVisibleTimer >= Clock.Time)
				{
					AttemptInteract((eNavMarkerInteractionType)0);
				}
				else if (!IsDiscovered)
				{
					AttemptInteract((eNavMarkerInteractionType)1);
				}
				else if (!((Object)(object)LocalPlayerAgent == (Object)null) && m_markerVisibleUpdateMode == ItemMarkerVisibleUpdateModeType.World)
				{
					OnWorldUpdate();
				}
			}
		}

		protected virtual void OnWorldUpdate()
		{
			//IL_000b: 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)
			if (Vector3.Distance(m_marker.TrackingTrans.position, ((Component)LocalPlayerAgent).transform.position) <= m_markerVisibleWorldDistance)
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
			else
			{
				AttemptInteract((eNavMarkerInteractionType)1);
			}
		}

		protected virtual void OnDestroy()
		{
			if ((Object)(object)m_marker != (Object)null)
			{
				GuiManager.NavMarkerLayer.RemoveMarker(m_marker);
			}
			GameEventAPI.UnregisterListener<ItemMarkerBase>(this);
			ItemMarkerManager.UnregisterItemMarkerAutoUpdate(this);
			if ((Object)(object)m_terminalItem != (Object)null)
			{
				ItemMarkerManager.UnregisterTerminalItemMarker(((Object)m_terminalItem).GetInstanceID(), this);
			}
			ItemMarkerManager.UnregisterItemMarker(this);
		}

		protected virtual void FixedUpdate()
		{
			UpdateMarkerAlpha();
		}

		public void ForceUpdate()
		{
			if ((Object)(object)m_marker == (Object)null)
			{
				return;
			}
			UpdateMarkerTitle();
			if (ItemMarkerManager.DevMode)
			{
				OnDevUpdate();
				return;
			}
			if (m_markerForceVisibleTimer >= Clock.Time)
			{
				AttemptInteract((eNavMarkerInteractionType)0);
				return;
			}
			if (!IsDiscovered)
			{
				AttemptInteract((eNavMarkerInteractionType)1);
				return;
			}
			if ((Object)(object)LocalPlayerAgent == (Object)null)
			{
				AttemptInteract((eNavMarkerInteractionType)1);
				return;
			}
			switch (m_markerVisibleUpdateMode)
			{
			case ItemMarkerVisibleUpdateModeType.World:
				OnWorldUpdate();
				break;
			case ItemMarkerVisibleUpdateModeType.CourseNode:
				OnPlayerCourseNodeChanged(((Agent)LocalPlayerAgent).CourseNode);
				break;
			case ItemMarkerVisibleUpdateModeType.Zone:
				OnPlayerZoneChanged(LocalPlayerAgent.m_lastEnteredZone);
				break;
			case ItemMarkerVisibleUpdateModeType.Dimension:
				OnPlayerDimensionChanged(((Agent)LocalPlayerAgent).Dimension);
				break;
			case ItemMarkerVisibleUpdateModeType.Manual:
				OnManualUpdate();
				break;
			}
		}

		protected virtual void OnManualUpdate()
		{
		}

		internal void DoDevModeUpdate()
		{
			OnDevUpdate();
		}

		internal void DoEnterDevMode()
		{
			OnEnterDevMode();
		}

		internal void DoExitDevMode()
		{
			OnExitDevMode();
		}

		protected virtual void OnEnterDevMode()
		{
			ForceUpdate();
		}

		protected virtual void OnExitDevMode()
		{
			ForceUpdate();
		}

		protected virtual void OnDevUpdate()
		{
		}

		protected IEnumerator HideDelay(float delay)
		{
			yield return (object)new WaitForSecondsRealtime(delay);
			ForceUpdate();
		}

		private IEnumerator UpdateMarkerAlphaCoroutine()
		{
			WaitForFixedUpdate yielder = new WaitForFixedUpdate();
			while (Object.op_Implicit((Object)(object)m_marker))
			{
				UpdateMarkerAlpha();
				yield return yielder;
			}
		}

		public void UpdateMarkerTitle()
		{
			m_marker.SetTitle(MarkerTitle);
		}

		public void UpdateMarkerAlpha()
		{
			if (m_marker.IsVisible)
			{
				if (AimButtonHeld)
				{
					m_marker.SetAlpha(m_markerAlphaADS);
				}
				else
				{
					m_marker.SetAlpha(m_markerAlpha);
				}
			}
		}

		public void OnResetSession()
		{
			ResetBuffer();
		}

		protected virtual void ResetBuffer()
		{
			m_basicBuffers.Clear();
		}

		public void OnRecallComplete(eBufferType bufferType)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			if ((int)GameStateManager.CurrentStateName >= 10)
			{
				RecallBuffer(bufferType);
				ForceUpdate();
			}
		}

		protected virtual void CaptureToBuffer(eBufferType bufferType)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			m_basicBuffers[bufferType] = new pBasicState
			{
				IsDiscovered = m_isDiscovered,
				IsVisible = m_marker.IsVisible
			};
		}

		protected virtual void RecallBuffer(eBufferType bufferType)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			if (m_basicBuffers.TryGetValue(bufferType, out var value))
			{
				m_marker.SetVisible(value.IsVisible);
				m_isDiscovered = value.IsDiscovered;
			}
		}

		public void OnBufferCommand(pBufferCommand command)
		{
			//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_0007: Invalid comparison between Unknown and I4
			//IL_000a: 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)
			if ((int)command.operation == 1)
			{
				CaptureToBuffer(command.type);
			}
		}
	}
	public class ItemMarkerTag : MonoBehaviour
	{
		[HideFromIl2Cpp]
		public ItemMarkerBase ItemMarker { get; private set; }

		[HideFromIl2Cpp]
		public void Setup(ItemMarkerBase itemMarker)
		{
			ItemMarker = itemMarker;
		}
	}
	public class ItemScanner : MonoBehaviour
	{
		private bool m_isLocal;

		private PlayerAgent m_playerAgent;

		private Il2CppStructArray<RaycastHit> m_hits = new Il2CppStructArray<RaycastHit>((RaycastHit[])(object)new RaycastHit[30]);

		private int s_collCount;

		private void Awake()
		{
			m_playerAgent = ((Component)this).GetComponent<PlayerAgent>();
			m_isLocal = ((Agent)m_playerAgent).IsLocallyOwned;
		}

		private void LateUpdate()
		{
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: 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_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			if (m_isLocal)
			{
				s_collCount = Physics.SphereCastNonAlloc(m_playerAgent.FPSCamera.Position, 3f, m_playerAgent.FPSCamera.CameraRayDir, m_hits, 0f, LayerManager.MASK_PLAYER_INTERACT_SPHERE);
			}
			else
			{
				s_collCount = Physics.SphereCastNonAlloc(((Agent)m_playerAgent).EyePosition, 2.5f, ((Component)m_playerAgent).transform.forward, m_hits, 0.5f, LayerManager.MASK_PLAYER_INTERACT_SPHERE);
			}
			if (s_collCount == 0)
			{
				return;
			}
			for (int i = 0; i < s_collCount; i++)
			{
				RaycastHit val = ((Il2CppArrayBase<RaycastHit>)(object)m_hits)[i];
				ItemMarkerTag component = ((Component)((RaycastHit)(ref val)).collider).GetComponent<ItemMarkerTag>();
				if ((Object)(object)component != (Object)null && component.ItemMarker.AllowDiscoverScan)
				{
					component.ItemMarker.IsDiscovered = true;
				}
			}
		}
	}
}
namespace Hikaria.ItemMarker.Handlers.Markers
{
	public class ItemInLevel_Marker : ItemMarkerBase, IOnGameStateChanged
	{
		public struct pItemInLevelMarkerState
		{
			public bool IsPlacedInLevel;
		}

		private class ItemInLevelMarkerDescription
		{
			public uint ItemID { get; set; }

			public string DataBlockName { get; set; } = string.Empty;


			public string PublicName { get; set; } = string.Empty;


			public string Title { get; set; } = string.Empty;


			public bool UsePublicName { get; set; }

			public bool UseTerminalItemKey { get; set; }

			public SColor Color { get; set; } = SColor.op_Implicit(Color.white);


			public ItemMarkerVisibleUpdateModeType VisibleUpdateMode { get; set; }

			public float VisibleWorldDistance { get; set; } = 30f;


			public int VisibleCourseNodeDistance { get; set; } = 1;


			public float Alpha { get; set; } = 0.9f;


			public float AlphaADS { get; set; } = 0.4f;


			public float IconScale { get; set; } = 0.4f;


			public float PingFadeOutTime { get; set; } = 12f;


			public bool AlwaysShowTitle { get; set; }

			public bool AlwaysShowDistance { get; set; }

			public bool UseCustomIcon { get; set; }

			public string CustomIconFileName { get; set; } = string.Empty;

		}

		private ItemInLevel m_item;

		private float m_itemCostOfBullet = 1f;

		private bool m_itemShowUses;

		private int m_itemUsesLeft;

		private InventorySlot m_itemSlot;

		private PlaceNavMarkerOnGO m_navMarkerPlacer;

		private bool m_allowDiscoverScan;

		private bool m_isPlacedInLevel = true;

		private readonly Dictionary<eBufferType, pItemInLevelMarkerState> m_buffers = new Dictionary<eBufferType, pItemInLevelMarkerState>();

		private static CustomSettings<Dictionary<uint, ItemInLevelMarkerDescription>> ItemInLevelMarkerDescriptions = new CustomSettings<Dictionary<uint, ItemInLevelMarkerDescription>>("ItemInLevelMarkerDescriptions", new Dictionary<uint, ItemInLevelMarkerDescription>(), (Action<Dictionary<uint, ItemInLevelMarkerDescription>>)null, (LoadingTime)1, true);

		private static readonly InventorySlot[] ValidItemSlots;

		internal static readonly Dictionary<int, ItemInLevel_Marker> ItemInLevelMarkerLookup;

		private bool IsPlacedInLevel
		{
			get
			{
				return m_isPlacedInLevel;
			}
			set
			{
				//IL_0066: 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)
				m_isPlacedInLevel = value;
				PlaceNavMarkerOnGO navMarkerPlacer = m_navMarkerPlacer;
				if (navMarkerPlacer != null)
				{
					NavMarker marker = navMarkerPlacer.m_marker;
					if (marker != null)
					{
						marker.SetVisible(false);
					}
				}
				if (!value)
				{
					m_markerForceVisibleTimer = 0f;
					if (m_marker.m_pingRoutine != null)
					{
						CoroutineManager.StopCoroutine(m_marker.m_pingRoutine);
						m_marker.Scale(m_marker.m_pingObj, m_marker.m_pinStartScale, m_marker.m_pinStartScale, Color.white, Color.white, 0f, (DelEasingFunction)null);
					}
					AttemptInteract((eNavMarkerInteractionType)1);
				}
				else
				{
					UpdateItemUsesLeft();
					ForceUpdate();
				}
			}
		}

		protected override string MarkerTitle
		{
			get
			{
				//IL_03a9: 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_03af: Unknown result type (might be due to invalid IL or missing references)
				//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
				//IL_03cf: Expected I4, but got Unknown
				//IL_000b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0010: Unknown result type (might be due to invalid IL or missing references)
				//IL_0011: Unknown result type (might be due to invalid IL or missing references)
				//IL_0013: Unknown result type (might be due to invalid IL or missing references)
				//IL_0031: Expected I4, but got Unknown
				//IL_03df: Unknown result type (might be due to invalid IL or missing references)
				//IL_03e4: Unknown result type (might be due to invalid IL or missing references)
				//IL_0041: Unknown result type (might be due to invalid IL or missing references)
				//IL_0046: Unknown result type (might be due to invalid IL or missing references)
				InventorySlot itemSlot;
				if (ItemMarkerManager.DevMode)
				{
					itemSlot = m_itemSlot;
					switch (itemSlot - 4)
					{
					case 4:
						if (!m_item.internalSync.GetCurrentState().placement.hasBeenPickedUp)
						{
							return $"<color=red>{Hikaria.ItemMarker.Features.ItemMarker.Localization.Get(1u)}</color>\n{(base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.Get(2u) + "</color>\n"))}{m_markerTitle}";
						}
						return (base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.Get(2u) + "</color>\n")) + m_markerTitle;
					case 0:
					case 1:
					{
						if (CourseNode != null && (Object)(object)base.LocalPlayerAgent != (Object)null && ((Agent)base.LocalPlayerAgent).CourseNode != null && CourseNode.m_zone.ID != ((Agent)base.LocalPlayerAgent).CourseNode.m_zone.ID)
						{
							DefaultInterpolatedStringHandler defaultInterpolatedStringHandler;
							if (m_itemShowUses)
							{
								defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(22, 4);
								defaultInterpolatedStringHandler.AppendLiteral("<color=red>");
								defaultInterpolatedStringHandler.AppendFormatted(Hikaria.ItemMarker.Features.ItemMarker.Localization.Get(3u));
								defaultInterpolatedStringHandler.AppendLiteral("</color>\n");
								defaultInterpolatedStringHandler.AppendFormatted(base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.Get(2u) + "</color>\n"));
								LG_GenericTerminalItem terminalItem2 = m_terminalItem;
								defaultInterpolatedStringHandler.AppendFormatted(((terminalItem2 != null) ? terminalItem2.TerminalItemKey : null) ?? ((Item)m_item).PublicName);
								defaultInterpolatedStringHandler.AppendLiteral(" ×");
								defaultInterpolatedStringHandler.AppendFormatted(m_itemUsesLeft);
								return defaultInterpolatedStringHandler.ToStringAndClear();
							}
							defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(20, 3);
							defaultInterpolatedStringHandler.AppendLiteral("<color=red>");
							defaultInterpolatedStringHandler.AppendFormatted(Hikaria.ItemMarker.Features.ItemMarker.Localization.Get(3u));
							defaultInterpolatedStringHandler.AppendLiteral("</color>\n");
							defaultInterpolatedStringHandler.AppendFormatted(base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.Get(2u) + "</color>\n"));
							LG_GenericTerminalItem terminalItem3 = m_terminalItem;
							defaultInterpolatedStringHandler.AppendFormatted(((terminalItem3 != null) ? terminalItem3.TerminalItemKey : null) ?? ((Item)m_item).PublicName);
							return defaultInterpolatedStringHandler.ToStringAndClear();
						}
						if (m_itemShowUses)
						{
							DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(2, 3);
							defaultInterpolatedStringHandler.AppendFormatted(base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.Get(2u) + "</color>\n"));
							LG_GenericTerminalItem terminalItem4 = m_terminalItem;
							defaultInterpolatedStringHandler.AppendFormatted(((terminalItem4 != null) ? terminalItem4.TerminalItemKey : null) ?? ((Item)m_item).PublicName);
							defaultInterpolatedStringHandler.AppendLiteral(" ×");
							defaultInterpolatedStringHandler.AppendFormatted(m_itemUsesLeft);
							return defaultInterpolatedStringHandler.ToStringAndClear();
						}
						string obj = (base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.Get(2u) + "</color>\n"));
						LG_GenericTerminalItem terminalItem5 = m_terminalItem;
						return obj + (((terminalItem5 != null) ? terminalItem5.TerminalItemKey : null) ?? ((Item)m_item).PublicName);
					}
					case 3:
					case 5:
					{
						LG_GenericTerminalItem terminalItem = m_terminalItem;
						return ((terminalItem != null) ? terminalItem.TerminalItemKey : null) ?? ((Item)m_item).PublicName;
					}
					default:
						return m_markerTitle;
					}
				}
				itemSlot = m_itemSlot;
				switch (itemSlot - 4)
				{
				case 4:
					if (!m_item.internalSync.GetCurrentState().placement.hasBeenPickedUp)
					{
						return "<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.Get(1u) + "</color>\n" + m_markerTitle;
					}
					return m_markerTitle;
				case 0:
				case 1:
					if (m_itemShowUses)
					{
						return $"{m_markerTitle} ×{m_itemUsesLeft}";
					}
					return m_markerTitle;
				case 3:
				case 5:
				{
					LG_GenericTerminalItem terminalItem6 = m_terminalItem;
					return ((terminalItem6 != null) ? terminalItem6.TerminalItemKey : null) ?? ((Item)m_item).PublicName;
				}
				default:
					return m_markerTitle;
				}
			}
		}

		public override AIG_CourseNode CourseNode => m_item.CourseNode;

		public override bool AllowDiscoverScan
		{
			get
			{
				if (base.AllowDiscoverScan)
				{
					return m_allowDiscoverScan;
				}
				return false;
			}
		}

		public override void SetupNavMarker(Component comp)
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: 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_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: Invalid comparison between Unknown and I4
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Invalid comparison between Unknown and I4
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Invalid comparison between Unknown and I4
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Invalid comparison between Unknown and I4
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Expected O, but got I4
			//IL_0138: 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_02b3: Invalid comparison between Unknown and I4
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_017d: 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_0138->IL0138: Incompatible stack types: O vs I4
			//IL_0133->IL0138: Incompatible stack types: I4 vs O
			//IL_0133->IL0138: Incompatible stack types: O vs I4
			m_item = ((Il2CppObjectBase)comp).Cast<ItemInLevel>();
			ItemDataBlock itemDataBlock = ((Item)m_item).ItemDataBlock;
			if (!ValidItemSlots.Contains(itemDataBlock.inventorySlot))
			{
				Object.Destroy((Object)(object)this);
				return;
			}
			m_item.internalSync.OnSyncStateChange += Action<ePickupItemStatus, pPickupPlacement, PlayerAgent, bool>.op_Implicit((Action<ePickupItemStatus, pPickupPlacement, PlayerAgent, bool>)OnItemStateChange);
			m_navMarkerPlacer = ((Component)m_item).GetComponent<PlaceNavMarkerOnGO>();
			m_itemSlot = itemDataBlock.inventorySlot;
			m_itemShowUses = !itemDataBlock.GUIShowAmmoInfinite && itemDataBlock.GUIShowAmmoTotalRel;
			m_markerShowPin = true;
			AmmoType ammoTypeFromSlot = PlayerAmmoStorage.GetAmmoTypeFromSlot(itemDataBlock.inventorySlot);
			if ((int)ammoTypeFromSlot != 3)
			{
				if ((int)ammoTypeFromSlot == 5)
				{
					m_itemCostOfBullet = 1f;
					if ((float)itemDataBlock.ConsumableAmmoMax == m_itemCostOfBullet)
					{
						m_itemShowUses = false;
					}
				}
				else
				{
					m_itemShowUses = false;
				}
			}
			else
			{
				m_itemCostOfBullet = 20f;
			}
			m_allowDiscoverScan = (Object)(object)m_item.container == (Object)null && (int)m_itemSlot != 7 && (int)m_itemSlot != 9;
			m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(((Component)m_item).gameObject);
			object obj = this;
			iPlayerPingTarget componentInChildren = ((Component)this).GetComponentInChildren<iPlayerPingTarget>();
			int num;
			if (componentInChildren != null)
			{
				obj = componentInChildren.PingTargetStyle;
				num = (int)obj;
			}
			else
			{
				num = 0;
				obj = num;
				num = (int)obj;
			}
			((ItemMarkerBase)num).m_markerStyle = (eNavMarkerStyle)obj;
			m_markerTitle = itemDataBlock.publicName;
			m_terminalItem = ((Component)m_item).GetComponentInChildren<LG_GenericTerminalItem>();
			if (ItemInLevelMarkerDescriptions.Value.TryGetValue(((GameDataBlockBase<ItemDataBlock>)(object)itemDataBlock).persistentID, out var value))
			{
				m_markerColor = SColor.op_Implicit(value.Color);
				m_markerTitle = value.Title;
				if (value.UsePublicName)
				{
					m_markerTitle = ((Item)m_item).PublicName;
				}
				if (value.UseTerminalItemKey)
				{
					m_markerTitleUseTerminalItemKey = true;
					if ((Object)(object)m_terminalItem != (Object)null)
					{
						m_markerTitle = m_terminalItem.TerminalItemKey;
					}
				}
				m_markerVisibleUpdateMode = value.VisibleUpdateMode;
				m_markerVisibleWorldDistance = value.VisibleWorldDistance;
				m_markerVisibleCourseNodeDistance = value.VisibleCourseNodeDistance;
				m_markerAlpha = value.Alpha;
				m_markerAlphaADS = value.AlphaADS;
				m_markerAlwaysShowTitle = value.AlwaysShowTitle;
				m_markerAlwaysShowDistance = value.AlwaysShowDistance;
				m_markerPingFadeOutTime = value.PingFadeOutTime;
				if (value.UseCustomIcon && IconManager.TryGetCustomIcon(value.CustomIconFileName, out var sprite))
				{
					foreach (SpriteRenderer componentsInChild in ((Component)m_marker.m_iconHolder).GetComponentsInChildren<SpriteRenderer>(true))
					{
						componentsInChild.sprite = sprite;
					}
				}
			}
			ItemInLevelMarkerLookup[((Object)m_item).GetInstanceID()] = this;
			base.SetupNavMarker(comp);
			if ((int)m_itemSlot == 8)
			{
				UpdateMarkerTitle();
			}
		}

		protected override void Update()
		{
			if (IsPlacedInLevel)
			{
				base.Update();
			}
		}

		protected override void OnDestroy()
		{
			ItemInLevelMarkerLookup.Remove(((Object)m_item).GetInstanceID());
			base.OnDestroy();
		}

		public void OnItemStateChange(ePickupItemStatus status, pPickupPlacement placement, PlayerAgent playerAgent, bool isRecall)
		{
			//IL_0000: 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_000d: Invalid comparison between Unknown and I4
			if ((int)status == 0)
			{
				IsPlacedInLevel = true;
			}
			else if ((int)status == 1)
			{
				if (!base.IsDiscovered)
				{
					base.IsDiscovered = true;
				}
				IsPlacedInLevel = false;
			}
		}

		public void OnItemCustomDataUpdate(pItemData_Custom custom)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Invalid comparison between Unknown and I4
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			UpdateItemUsesLeft();
			if ((int)m_itemSlot == 8 && custom.byteState > 0)
			{
				AttemptInteract((eNavMarkerInteractionType)1);
			}
		}

		public override void OnPlayerPing()
		{
			if (IsPlacedInLevel)
			{
				base.OnPlayerPing();
			}
		}

		public override void OnTerminalPing()
		{
			if (IsPlacedInLevel)
			{
				base.OnTerminalPing();
			}
		}

		protected override void OnWorldUpdate()
		{
			if (IsPlacedInLevel)
			{
				base.OnWorldUpdate();
			}
		}

		public override void OnPlayerCourseNodeChanged(AIG_CourseNode newNode)
		{
			if (IsPlacedInLevel)
			{
				base.OnPlayerCourseNodeChanged(newNode);
			}
		}

		public override void OnPlayerZoneChanged(LG_Zone newZone)
		{
			if (IsPlacedInLevel)
			{
				base.OnPlayerZoneChanged(newZone);
			}
		}

		public override void OnPlayerDimensionChanged(Dimension newDim)
		{
			if (IsPlacedInLevel)
			{
				base.OnPlayerDimensionChanged(newDim);
			}
		}

		public void OnGameStateChanged(eGameStateName preState, eGameStateName nextState)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Invalid comparison between Unknown and I4
			if ((int)nextState == 10)
			{
				UpdateItemUsesLeft();
			}
		}

		private void UpdateItemUsesLeft()
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			if (m_itemShowUses)
			{
				m_itemUsesLeft = Mathf.FloorToInt(((Item)m_item).GetCustomData().ammo / m_itemCostOfBullet);
				UpdateMarkerTitle();
			}
		}

		protected override void OnEnterDevMode()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			if ((int)m_itemSlot == 8)
			{
				PlaceNavMarkerOnGO navMarkerPlacer = m_navMarkerPlacer;
				if (navMarkerPlacer != null)
				{
					NavMarker marker = navMarkerPlacer.m_marker;
					if (marker != null)
					{
						marker.SetVisible(false);
					}
				}
			}
			base.OnEnterDevMode();
		}

		protected override void OnExitDevMode()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			if ((int)m_itemSlot == 8)
			{
				PlaceNavMarkerOnGO navMarkerPlacer = m_navMarkerPlacer;
				if (navMarkerPlacer != null)
				{
					NavMarker marker = navMarkerPlacer.m_marker;
					if (marker != null)
					{
						marker.SetVisible(false);
					}
				}
			}
			base.OnExitDevMode();
		}

		protected override void OnDevUpdate()
		{
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Expected I4, but got Unknown
			//IL_00fa: 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_0089: Unknown result type (might be due to invalid IL or missing references)
			if (!IsPlacedInLevel)
			{
				AttemptInteract((eNavMarkerInteractionType)1);
				return;
			}
			UpdateMarkerTitle();
			if ((Object)(object)base.LocalPlayerAgent == (Object)null || ((Agent)base.LocalPlayerAgent).CourseNode == null || CourseNode == null)
			{
				return;
			}
			InventorySlot itemSlot = m_itemSlot;
			switch (itemSlot - 4)
			{
			case 4:
			{
				PlaceNavMarkerOnGO navMarkerPlacer = m_navMarkerPlacer;
				if (navMarkerPlacer != null)
				{
					NavMarker marker = navMarkerPlacer.m_marker;
					if (marker != null)
					{
						marker.SetVisible(false);
					}
				}
				if (((Item)m_item).GetCustomData().byteState > 0)
				{
					AttemptInteract((eNavMarkerInteractionType)1);
				}
				else if (!((Il2CppObjectBase)m_item).Cast<CarryItemPickup_Core>().IsInteractable)
				{
					AttemptInteract((eNavMarkerInteractionType)1);
				}
				else
				{
					AttemptInteract((eNavMarkerInteractionType)0);
				}
				break;
			}
			case 0:
			case 1:
				if (CourseNode.m_zone.ID == ((Agent)base.LocalPlayerAgent).CourseNode.m_zone.ID)
				{
					AttemptInteract((eNavMarkerInteractionType)0);
				}
				else if (Vector3.Distance(((Component)m_item).transform.position, ((Component)base.LocalPlayerAgent).transform.position) <= m_markerVisibleWorldDistance)
				{
					AttemptInteract((eNavMarkerInteractionType)0);
				}
				else
				{
					AttemptInteract((eNavMarkerInteractionType)1);
				}
				break;
			case 3:
			case 5:
				if (!((Object)(object)((Il2CppObjectBase)m_item).TryCast<KeyItemPickup_Core>() != (Object)null) && CourseNode.m_zone.ID != ((Agent)base.LocalPlayerAgent).CourseNode.m_zone.ID)
				{
					AttemptInteract((eNavMarkerInteractionType)1);
				}
				else
				{
					AttemptInteract((eNavMarkerInteractionType)0);
				}
				break;
			default:
				AttemptInteract((eNavMarkerInteractionType)1);
				break;
			}
		}

		protected override void CaptureToBuffer(eBufferType bufferType)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			base.CaptureToBuffer(bufferType);
			m_buffers[bufferType] = new pItemInLevelMarkerState
			{
				IsPlacedInLevel = IsPlacedInLevel
			};
		}

		protected override void RecallBuffer(eBufferType bufferType)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			base.RecallBuffer(bufferType);
			if (!m_buffers.TryGetValue(bufferType, out var value))
			{
				IsPlacedInLevel = (int)m_item.internalSync.GetCurrentState().status == 0;
			}
			else
			{
				IsPlacedInLevel = value.IsPlacedInLevel;
			}
		}

		protected override void ResetBuffer()
		{
			base.ResetBuffer();
			m_buffers.Clear();
		}

		protected override void OnManualUpdate()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			if ((int)m_itemSlot == 8)
			{
				PlaceNavMarkerOnGO navMarkerPlacer = m_navMarkerPlacer;
				if (navMarkerPlacer != null)
				{
					NavMarker marker = navMarkerPlacer.m_marker;
					if (marker != null)
					{
						marker.SetVisible(false);
					}
				}
				UpdateMarkerTitle();
				if (((Item)m_item).GetCustomData().byteState > 0)
				{
					AttemptInteract((eNavMarkerInteractionType)1);
					return;
				}
				if (!((Il2CppObjectBase)m_item).Cast<CarryItemPickup_Core>().IsInteractable)
				{
					AttemptInteract((eNavMarkerInteractionType)1);
					return;
				}
			}
			if (!IsPlacedInLevel)
			{
				AttemptInteract((eNavMarkerInteractionType)1);
			}
			else
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
		}

		internal static void OnGameDataInitialized()
		{
			//IL_001d: 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_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Invalid comparison between Unknown and I4
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Invalid comparison between Unknown and I4
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Invalid comparison between Unknown and I4
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Invalid comparison between Unknown and I4
			foreach (ItemDataBlock allBlock in GameDataBlockBase<ItemDataBlock>.GetAllBlocks())
			{
				if (ValidItemSlots.Contains(allBlock.inventorySlot))
				{
					if (!ItemInLevelMarkerDescriptions.Value.TryGetValue(((GameDataBlockBase<ItemDataBlock>)(object)allBlock).persistentID, out var value))
					{
						value = new ItemInLevelMarkerDescription
						{
							ItemID = ((GameDataBlockBase<ItemDataBlock>)(object)allBlock).persistentID,
							DataBlockName = ((GameDataBlockBase<ItemDataBlock>)(object)allBlock).name,
							PublicName = allBlock.publicName,
							Title = allBlock.publicName,
							VisibleUpdateMode = GetDefaultUpdateModeForSlot(allBlock.inventorySlot),
							AlwaysShowTitle = ((int)allBlock.inventorySlot == 8),
							AlwaysShowDistance = ((int)allBlock.inventorySlot == 8),
							UsePublicName = ((int)allBlock.inventorySlot == 8),
							UseTerminalItemKey = ((int)allBlock.inventorySlot == 7 || (int)allBlock.inventorySlot == 9)
						};
						ItemInLevelMarkerDescriptions.Value[((GameDataBlockBase<ItemDataBlock>)(object)allBlock).persistentID] = value;
					}
					else
					{
						value.DataBlockName = ((GameDataBlockBase<ItemDataBlock>)(object)allBlock).name;
						value.ItemID = ((GameDataBlockBase<ItemDataBlock>)(object)allBlock).persistentID;
						value.PublicName = allBlock.publicName;
					}
				}
			}
		}

		private static ItemMarkerVisibleUpdateModeType GetDefaultUpdateModeForSlot(InventorySlot slot)
		{
			//IL_0000: 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_0020: Expected I4, but got Unknown
			switch (slot - 4)
			{
			case 0:
			case 1:
				return ItemMarkerVisibleUpdateModeType.World;
			case 3:
			case 5:
				return ItemMarkerVisibleUpdateModeType.Zone;
			case 4:
				return ItemMarkerVisibleUpdateModeType.Manual;
			default:
				return ItemMarkerVisibleUpdateModeType.World;
			}
		}

		static ItemInLevel_Marker()
		{
			InventorySlot[] array = new InventorySlot[5];
			RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
			ValidItemSlots = (InventorySlot[])(object)array;
			ItemInLevelMarkerLookup = new Dictionary<int, ItemInLevel_Marker>();
		}
	}
	public class LG_BulkheadDoorController_Marker : ItemMarkerBase
	{
		private LG_BulkheadDoorController_Core m_bulkDc;

		public override void SetupNavMarker(Component comp)
		{
			//IL_004e: 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_0062: Unknown result type (might be due to invalid IL or missing references)
			m_bulkDc = ((Il2CppObjectBase)comp).Cast<LG_BulkheadDoorController_Core>();
			m_bulkDc.OnStateChangeCallback += Action<eBulkheadDCStatus, eBulkheadDCStatus>.op_Implicit((Action<eBulkheadDCStatus, eBulkheadDCStatus>)OnStateChangeCallback);
			m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(comp.gameObject);
			m_markerColor = new Color(0.573f, 0.663f, 0.718f);
			m_markerVisibleUpdateMode = ItemMarkerVisibleUpdateModeType.Manual;
			m_markerStyle = (eNavMarkerStyle)30;
			m_terminalItem = ((Il2CppObjectBase)m_bulkDc.m_terminalItem).Cast<LG_GenericTerminalItem>();
			m_markerTitle = m_terminalItem.TerminalItemKey;
			m_markerShowPin = true;
			base.SetupNavMarker(comp);
		}

		private void OnStateChangeCallback(eBulkheadDCStatus oldState, eBulkheadDCStatus newState)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Invalid comparison between Unknown and I4
			if ((int)newState == 3)
			{
				AttemptInteract((eNavMarkerInteractionType)1);
			}
			else
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
		}

		protected override void OnManualUpdate()
		{
			//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_0016: Invalid comparison between Unknown and I4
			if ((int)m_bulkDc.m_stateReplicator.State.status == 3)
			{
				AttemptInteract((eNavMarkerInteractionType)1);
			}
			else
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
		}

		protected override void OnDevUpdate()
		{
			if (m_markerForceVisibleTimer >= Clock.Time)
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
			else
			{
				OnManualUpdate();
			}
		}
	}
	public class LG_ComputerTerminal_Marker : ItemMarkerBase
	{
		private LG_ComputerTerminal m_terminal;

		public override void SetupNavMarker(Component comp)
		{
			//IL_0017: 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_005d: Unknown result type (might be due to invalid IL or missing references)
			m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(comp.gameObject);
			m_markerColor = Color.green;
			m_markerVisibleUpdateMode = ItemMarkerVisibleUpdateModeType.Zone;
			m_terminal = ((Il2CppObjectBase)comp).Cast<LG_ComputerTerminal>();
			m_terminalItem = ((Il2CppObjectBase)m_terminal.m_terminalItem).Cast<LG_GenericTerminalItem>();
			m_markerTitle = m_terminalItem.TerminalItemKey;
			m_markerStyle = (eNavMarkerStyle)6;
			m_markerAlwaysShowTitle = true;
			m_markerAlwaysShowDistance = true;
			m_markerShowPin = true;
			foreach (Collider componentsInChild in comp.GetComponentsInChildren<Collider>(true))
			{
				if ((Object)(object)((Component)componentsInChild).GetComponent<PlayerPingTarget>() == (Object)null)
				{
					((Component)componentsInChild).gameObject.AddComponent<PlayerPingTarget>().m_pingTargetStyle = (eNavMarkerStyle)6;
				}
			}
			base.SetupNavMarker(comp);
		}

		protected override void OnDevUpdate()
		{
			if (m_markerForceVisibleTimer >= Clock.Time)
			{
				AttemptInteract((eNavMarkerInteractionType)0);
				return;
			}
			PlayerAgent localPlayerAgent = base.LocalPlayerAgent;
			object obj;
			if (localPlayerAgent == null)
			{
				obj = null;
			}
			else
			{
				AIG_CourseNode courseNode = ((Agent)localPlayerAgent).CourseNode;
				obj = ((courseNode != null) ? courseNode.m_zone : null);
			}
			LG_Zone val = (LG_Zone)obj;
			if ((Object)(object)val == (Object)null)
			{
				AttemptInteract((eNavMarkerInteractionType)1);
			}
			else if (CourseNode.m_zone.ID == val.ID)
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
			else
			{
				AttemptInteract((eNavMarkerInteractionType)1);
			}
		}
	}
	public class LG_DisinfectionStation_Marker : ItemMarkerBase
	{
		private LG_DisinfectionStation m_station;

		public override void SetupNavMarker(Component comp)
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			m_station = ((Il2CppObjectBase)comp).Cast<LG_DisinfectionStation>();
			m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(comp.gameObject);
			m_markerColor = new Color(0.49f, 0.77f, 0.78f);
			m_markerVisibleUpdateMode = ItemMarkerVisibleUpdateModeType.Manual;
			m_markerStyle = (eNavMarkerStyle)17;
			m_terminalItem = ((Il2CppObjectBase)m_station.m_terminalItem).Cast<LG_GenericTerminalItem>();
			m_markerTitle = m_terminalItem.TerminalItemKey;
			m_markerShowPin = true;
			base.SetupNavMarker(comp);
		}

		protected override void OnManualUpdate()
		{
			if (((Interact_Base)m_station.m_interact).IsActive)
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
			else
			{
				AttemptInteract((eNavMarkerInteractionType)1);
			}
		}

		protected override void OnDevUpdate()
		{
			if (m_markerForceVisibleTimer >= Clock.Time)
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
			else
			{
				OnManualUpdate();
			}
		}
	}
	public class LG_HSUActivator_Marker : ItemMarkerBase
	{
		private LG_HSUActivator_Core m_hsuActivator;

		public override void SetupNavMarker(Component comp)
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			m_hsuActivator = ((Il2CppObjectBase)comp).Cast<LG_HSUActivator_Core>();
			m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(comp.gameObject);
			m_markerColor = new Color(0.467f, 0.098f, 1f);
			m_markerVisibleUpdateMode = ItemMarkerVisibleUpdateModeType.Manual;
			m_markerStyle = (eNavMarkerStyle)16;
			m_terminalItem = ((Il2CppObjectBase)m_hsuActivator.m_terminalItem).Cast<LG_GenericTerminalItem>();
			m_markerTitle = m_terminalItem.TerminalItemKey;
			m_markerShowPin = true;
			base.SetupNavMarker(comp);
		}

		protected override void OnManualUpdate()
		{
			if (((Behaviour)((Il2CppObjectBase)m_hsuActivator.m_insertHSUInteraction).Cast<LG_GenericCarryItemInteractionTarget>()).isActiveAndEnabled)
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
			else
			{
				AttemptInteract((eNavMarkerInteractionType)1);
			}
		}

		protected override void OnDevUpdate()
		{
			if (m_markerForceVisibleTimer >= Clock.Time)
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
			else
			{
				OnManualUpdate();
			}
		}
	}
	public class LG_HSU_Marker : ItemMarkerBase
	{
		private LG_HSU m_hsu;

		public override void SetupNavMarker(Component comp)
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			m_hsu = ((Il2CppObjectBase)comp).Cast<LG_HSU>();
			m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(comp.gameObject);
			m_markerColor = new Color(0.467f, 0.098f, 1f);
			m_markerVisibleUpdateMode = ItemMarkerVisibleUpdateModeType.Manual;
			m_markerStyle = (eNavMarkerStyle)8;
			m_terminalItem = ((Il2CppObjectBase)m_hsu.m_terminalItem).Cast<LG_GenericTerminalItem>();
			m_markerTitle = m_terminalItem.TerminalItemKey;
			m_markerShowPin = true;
			base.SetupNavMarker(comp);
		}

		protected override void OnManualUpdate()
		{
			if (((Interact_Base)m_hsu.m_pickupSampleInteraction).IsActive)
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
			else
			{
				AttemptInteract((eNavMarkerInteractionType)1);
			}
		}

		protected override void OnDevUpdate()
		{
			if (m_markerForceVisibleTimer >= Clock.Time)
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
			else
			{
				OnManualUpdate();
			}
		}
	}
	public class LG_PowerGenerator_Marker : ItemMarkerBase
	{
		private LG_PowerGenerator_Core m_gene;

		public override void SetupNavMarker(Component comp)
		{
			//IL_004e: 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_0062: Unknown result type (might be due to invalid IL or missing references)
			m_gene = ((Il2CppObjectBase)comp).Cast<LG_PowerGenerator_Core>();
			m_gene.OnSyncStatusChanged += Action<ePowerGeneratorStatus>.op_Implicit((Action<ePowerGeneratorStatus>)OnSyncStateChange);
			m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(comp.gameObject);
			m_markerColor = new Color(1f, 0.647f, 0f);
			m_markerVisibleUpdateMode = ItemMarkerVisibleUpdateModeType.Manual;
			m_markerStyle = (eNavMarkerStyle)16;
			m_terminalItem = ((Il2CppObjectBase)m_gene.m_terminalItem).Cast<LG_GenericTerminalItem>();
			m_markerTitle = m_terminalItem.TerminalItemKey;
			m_markerShowPin = true;
			base.SetupNavMarker(comp);
		}

		private void OnSyncStateChange(ePowerGeneratorStatus status)
		{
			if (!base.IsDiscovered)
			{
				AttemptInteract((eNavMarkerInteractionType)1);
			}
			else if (((Behaviour)((Il2CppObjectBase)m_gene.m_powerCellInteraction).Cast<LG_GenericCarryItemInteractionTarget>()).isActiveAndEnabled)
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
			else
			{
				AttemptInteract((eNavMarkerInteractionType)1);
			}
		}

		protected override void OnManualUpdate()
		{
			if (!m_gene.m_graphics.m_gfxSlot.active)
			{
				AttemptInteract((eNavMarkerInteractionType)1);
			}
			else if (((Behaviour)((Il2CppObjectBase)m_gene.m_powerCellInteraction).Cast<LG_GenericCarryItemInteractionTarget>()).isActiveAndEnabled)
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
			else
			{
				AttemptInteract((eNavMarkerInteractionType)1);
			}
		}

		protected override void OnDevUpdate()
		{
			if (m_markerForceVisibleTimer >= Clock.Time)
			{
				AttemptInteract((eNavMarkerInteractionType)0);
			}
			else
			{
				OnManualUpdate();
			}
		}
	}
	public class LG_SecurityDoor_Locks_Marker : ItemMarkerBase
	{
		private LG_SecurityDoor_Locks m_locks;

		private LG_SecurityDoor m_door;

		public override void SetupNavMarker(Component comp)
		{
			//IL_005b: 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_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			m_locks = ((Il2CppObjectBase)comp).Cast<LG_SecurityDoor_Locks>();
			m_door = m_locks.m_door;
			m_marker = GuiManager.NavMarkerLayer.PlaceCustomMarker((NavMarkerOption)18, ((Component)m_locks.m_intOpenDoor).gameObject, string.Empty, 0f, false);
			m_markerColor = new Color(0.467f, 0.098f, 1f);
			m_markerVisibleUpdateMode = ItemMarkerVisibleUpdateModeType.Manual;
			m_terminalItem = ((Il2CppObjectBase)m_door.m_terminalItem).Cast<LG_GenericTerminalItem>();
			m_markerTitle = m_terminalItem.TerminalItemKey;
			m_markerStyle = (eNavMarkerStyle)0;
			m_markerIconScale = 0.275f;
			m_locks.OnApproached += Action.op_Implicit((Action)OnApproached);
			m_door.m_sync.OnDoorStateChange += Action<pDoorState, bool>.op_Implicit((Action<pDoorState, bool>)OnDoorStateChange);
			m_overridePlayerPing = false;
			m_markerShowPin = true;
			base.SetupNavMarker(comp);
			m_marker.SetVisualStates((NavMarkerOption)18, (NavMarkerOption)18, (NavMarkerOption)0, (NavMarkerOption)0);
			((Component)m_marker.m_titleSubObj).transform.localScale = Vector3.one * 1.75f;
			((TMP_Text)m_marker.m_title).fontSizeMax = 50f;
			((TMP_Text)m_marker.m_title).fontSizeMin = 15f;
		}

		private void OnApproached()
		{
			base.IsDiscovered = true;
		}

		private void OnDoorStateChange(pDoorState state, bool isRecall)
		{
			//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_0006: 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_0009: Invalid comparison between Unknown and I4
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Invalid comparison between Unknown and I4
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Invalid comparison between Unknown and I4
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Invalid comparison between Unknown and I4
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Invalid comparison between Unknown and I4
			//IL_0047: 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_0058: 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_0037: Invalid comparison between Unknown and I4
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Invalid comparison between Unknown and I4
			//IL_0105: 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_0116: Unknown result type (might be due to invalid IL or missing references)
			eDoorStatus status = state.status;
			if ((int)status <= 6)
			{
				if ((int)status != 1)
				{
					if ((int)status == 3)
					{
						m_markerColor = ColorExt.Hex("#FF9DE7");
						m_marker.SetColor(m_markerColor);
						m_markerTitle = "<color=orange>::REQ::</color>\n<color=white>" + m_locks.m_gateKeyItemNeeded.PublicName + "</color>";
						m_marker.SetTitle(m_markerTitle);
						AttemptInteract((eNavMarkerInteractionType)0);
						return;
					}
					if ((int)status == 6)
					{
						m_markerColor = ColorExt.Hex("#FFA500");
						m_marker.SetColor(m_markerColor);
						m_markerTitle = "<color=orange>::REQ::</color>\n<color=white>" + m_locks.m_powerGeneratorNeeded.PublicName + "</color>";
						m_marker.SetTitle(m_markerTitle);
						AttemptInteract((eNavMarkerInteractionType)0);
						return;
					}
				}
			}
			else if (status - 9 > 1)
			{
				if ((int)status == 15)
				{
					m_markerColor = ColorExt.Hex("#92A9B7");
					m_marker.SetColor(m_markerColor);
					m_markerTitle = "<color=orange>::REQ::</color>\n<color=white>" + m_locks.LinkedBulkheadDoorController.PublicName + "</color>";
					m_marker.SetTitle(m_markerTitle);
					AttemptInteract((eNavMarkerInteractionType)0);
					return;
				}
				if ((int)status == 16)
				{
				}
			}
			AttemptInteract((eNavMarkerInteractionType)1);
		}

		protected override void OnManualUpdate()
		{
			//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_0018: Invalid comparison between Unknown and I4
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Invalid comparison between Unknown and I4
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Invalid comparison between Unknown and I4
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Invalid comparison between Unknown and I4
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Invalid comparison between Unknown and I4
			//IL_0056: 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_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Invalid comparison between Unknown and I4
			//IL_00b5: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Invalid comparison between Unknown and I4
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: 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)
			eDoorStatus status = m_door.m_sync.GetCurrentSyncState().status;
			if ((int)status <= 6)
			{
				if ((int)status != 1)
				{
					if ((int)status == 3)
					{
						m_markerColor = ColorExt.Hex("#FF9DE7");
						m_marker.SetColor(m_markerColor);
						m_markerTitle = "<color=orange>::REQ::</color>\n<color=white>" + m_locks.m_gateKeyItemNeeded.PublicName + "</color>";
						m_marker.SetTitle(m_markerTitle);
						AttemptInteract((eNavMarkerInteractionType)0);
						return;
					}
					if ((int)status == 6)
					{
						m_markerColor = ColorExt.Hex("#FFA500");
						m_marker.SetColor(m_markerColor);
						m_markerTitle = "<color=orange>::REQ::</color>\n<color=white>" + m_locks.m_powerGeneratorNeeded.PublicName + "</color>";
						m_marker.SetTitle(m_markerTitle);
						AttemptInteract((eNavMarkerInteractionType)0);
						return;
					}
				}
			}
			else if (status - 9 > 1)
			{
				if ((int)status == 15)
				{
					m_markerColor = ColorExt.Hex("#92A9B7");
					m_marker.SetColor(m_markerColor);
					m_markerTitle = "<color=orange>::REQ::</color>\n<color=white>" + m_locks.LinkedBulkheadDoorController.PublicName + "</color>";
					m_marker.SetTitle(m_markerTitle);
					AttemptInteract((eNavMarkerInteractionType)0);
					return;
				}
				if ((int)status == 16)
				{
				}
			}
			AttemptInteract((eNavMarkerInteractionType)1);
		}

		protected override void OnDevUpdate()
		{
			OnManualUpdate();
		}
	}
}
namespace Hikaria.ItemMarker.Features
{
	[EnableFeatureByDefault]
	[DisallowInGameToggle]
	[HideInModSettings]
	[DoNotSaveToConfig]
	public class ItemMarker : Feature
	{
		public class ItemMarkerSettings
		{
			[FSDisplayName("开发者模式")]
			[FSHide]
			public bool DevMode
			{
				get
				{
					return ItemMarkerManager.DevMode;
				}
				set
				{
					ItemMarkerManager.DevMode = value;
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class PlayerAgent__set_CourseNode__Patch
		{
			private static bool nodeChanged;

			private static bool zoneChanged;

			private static bool dimensionChanged;

			private static AIG_CourseNode preNode;

			private static void Prefix(PlayerAgent __instance, AIG_CourseNode value)
			{
				//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
				//IL_011c: Unknown result type (might be due to invalid IL or missing references)
				//IL_012a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0131: Unknown result type (might be due to invalid IL or missing references)
				if (((Agent)__instance).IsLocallyOwned)
				{
					preNode = ((Agent)__instance).CourseNode;
					AIG_CourseNode obj = preNode;
					nodeChanged = ((obj != null) ? new int?(obj.NodeID) : null) != ((value != null) ? new int?(value.NodeID) : null);
					AIG_CourseNode obj2 = preNode;
					zoneChanged = ((obj2 != null) ? new int?(obj2.m_zone.ID) : null) != ((value != null) ? new int?(value.m_zone.ID) : null);
					AIG_CourseNode obj3 = preNode;
					dimensionChanged = ((obj3 != null) ? new eDimensionIndex?(obj3.m_dimension.DimensionIndex) : null) != ((value != null) ? new eDimensionIndex?(value.m_dimension.DimensionIndex) : null);
				}
			}

			private static void Postfix(AIG_CourseNode value)
			{
				if (nodeChanged)
				{
					nodeChanged = false;
					ItemMarkerManager.OnPlayerCourseNodeChanged(value);
				}
				if (zoneChanged)
				{
					zoneChanged = false;
					ItemMarkerManager.OnPlayerZoneChanged((value != null) ? value.m_zone : null);
				}
				if (dimensionChanged)
				{
					dimensionChanged = false;
					ItemMarkerManager.OnPlayerDimensionChanged((value != null) ? value.m_dimension : null);
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class PlayerAgent__Setup__Patch
		{
			private static void Postfix(PlayerAgent __instance)
			{
				if ((Object)(object)((Component)__instance).GetComponent<ItemScanner>() == (Object)null)
				{
					((Component)__instance).gameObject.AddComponent<ItemScanner>();
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_ResourceContainer_Sync__OnStateChange__Patch
		{
			private static void Postfix(LG_ResourceContainer_Sync __instance, pResourceContainerItemState newState)
			{
				//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_0007: Invalid comparison between Unknown and I4
				if ((int)newState.status != 3)
				{
					return;
				}
				foreach (ItemMarkerTag componentsInChild in ((Component)__instance).GetComponentsInChildren<ItemMarkerTag>(true))
				{
					componentsInChild.ItemMarker.IsDiscovered = true;
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class SyncedNavMarkerWrapper__OnStateChange__Patch
		{
			private static bool Prefix(SyncedNavMarkerWrapper __instance, pNavMarkerState oldState, pNavMarkerState newState)
			{
				//IL_000b: 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_0017: Unknown result type (might be due to invalid IL or missing references)
				//IL_0018: Unknown result type (might be due to invalid IL or missing references)
				//IL_001f: Invalid comparison between Unknown and I4
				//IL_0021: Unknown result type (might be due to invalid IL or missing references)
				//IL_0022: Unknown result type (might be due to invalid IL or missing references)
				//IL_0029: Invalid comparison between Unknown and I4
				//IL_002b: Unknown result type (might be due to invalid IL or missing references)
				//IL_002c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0063: 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_0069: Unknown result type (might be due to invalid IL or missing references)
				if (__instance.m_playerIndex == -1)
				{
					return true;
				}
				if ((int)newState.status != 0)
				{
					return true;
				}
				bool flag = false;
				if ((int)newState.style != 10 && (int)newState.style != 11)
				{
					foreach (Collider item in (Il2CppArrayBase<Collider>)(object)Physics.OverlapSphere(newState.worldPos, 0.001f, LayerManager.MASK_PING_TARGET))
					{
						ItemMarkerTag component = ((Component)item).GetComponent<ItemMarkerTag>();
						if (!((Object)(object)component == (Object)null) && component.ItemMarker.Style == newState.style)
						{
							component.ItemMarker.OnPlayerPing();
							flag = true;
						}
					}
				}
				return !flag;
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_GenericTerminalItem__PlayPing__Patch
		{
			private static void Postfix(LG_GenericTerminalItem __instance)
			{
				ItemMarkerManager.OnTerminalPing(((Object)__instance).GetInstanceID());
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class ItemSpawnManager__SpawnItem__Patch
		{
			private static void Postfix(Item __result)
			{
				//IL_004d: 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_005b: 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)
				ItemInLevel val = ((__result != null) ? ((Il2CppObjectBase)__result).TryCast<ItemInLevel>() : null);
				if ((Object)(object)val == (Object)null)
				{
					return;
				}
				if ((Object)(object)((Component)val).GetComponent<ItemInLevel_Marker>() == (Object)null)
				{
					((Component)val).gameObject.AddComponent<ItemInLevel_Marker>().SetupNavMarker((Component)(object)val);
				}
				if (val.CourseNode != null || val.internalSync == null || (int)val.internalSync.GetCurrentState().status != 0)
				{
					return;
				}
				pItemData pItemData = ((Item)val).Get_pItemData();
				AIG_CourseNode courseNode = default(AIG_CourseNode);
				if (((pCourseNode)(ref pItemData.originCourseNode)).TryGet(ref courseNode))
				{
					val.CourseNode = courseNode;
					return;
				}
				iTerminalItem component = ((Component)val).GetComponent<iTerminalItem>();
				if (((component != null) ? component.SpawnNode : null) != null)
				{
					val.CourseNode = component.SpawnNode;
					return;
				}
				Transform parent = ((Component)val).transform.parent;
				object obj;
				if (parent == null)
				{
					obj = null;
				}
				else
				{
					Transform parent2 = parent.parent;
					obj = ((parent2 != null) ? ((Component)parent2).GetComponentInChildren<LG_PickupItem>() : null);
				}
				LG_PickupItem val2 = (LG_PickupItem)obj;
				if ((Object)(object)val2 != (Object)null)
				{
					val.CourseNode = val2.SpawnNode;
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_ResourceContainer_Storage__SetSpawnNode__Patch
		{
			private static void Postfix(LG_ResourceContainer_Storage __instance, GameObject obj, AIG_CourseNode spawnNode)
			{
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_0028: Unknown result type (might be due to invalid IL or missing references)
				foreach (ItemInLevel componentsInChild in obj.GetComponentsInChildren<ItemInLevel>())
				{
					if (componentsInChild.CourseNode == null && (int)componentsInChild.internalSync.GetCurrentState().status == 0)
					{
						componentsInChild.CourseNode = spawnNode;
					}
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class CarryItemPickup_Core__OnCustomDataUpdated__Patch
		{
			private static void Postfix(CarryItemPickup_Core __instance, pItemData_Custom customDataCopy)
			{
				//IL_0016: Unknown result type (might be due to invalid IL or missing references)
				if (ItemInLevel_Marker.ItemInLevelMarkerLookup.TryGetValue(((Object)__instance).GetInstanceID(), out var value))
				{
					value.OnItemCustomDataUpdate(customDataCopy);
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class ResourcePackPickup__OnCustomDataUpdated__Patch
		{
			private static void Postfix(ResourcePackPickup __instance, pItemData_Custom customDataCopy)
			{
				//IL_0016: Unknown result type (might be due to invalid IL or missing references)
				if (ItemInLevel_Marker.ItemInLevelMarkerLookup.TryGetValue(((Object)__instance).GetInstanceID(), out var value))
				{
					value.OnItemCustomDataUpdate(customDataCopy);
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class ConsumablePickup_Core__OnCustomDataUpdated__Patch
		{
			private static void Postfix(ConsumablePickup_Core __instance, pItemData_Custom customDataCopy)
			{
				//IL_0016: Unknown result type (might be due to invalid IL or missing references)
				if (ItemInLevel_Marker.ItemInLevelMarkerLookup.TryGetValue(((Object)__instance).GetInstanceID(), out var value))
				{
					value.OnItemCustomDataUpdate(customDataCopy);
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_ComputerTerminal__Setup__Patch
		{
			private static void Postfix(LG_ComputerTerminal __instance)
			{
				if ((Object)(object)((Component)__instance).GetComponent<LG_ComputerTerminal_Marker>() == (Object)null)
				{
					((Component)__instance).gameObject.AddComponent<LG_ComputerTerminal_Marker>().SetupNavMarker((Component)(object)__instance);
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_GenericTerminalItem__Setup__Patch
		{
			private static void Postfix(LG_GenericTerminalItem __instance, string key)
			{
				ItemMarkerManager.OnTerminalItemKeyUpdate(((Object)__instance).GetInstanceID(), key);
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_WardenObjective_Reactor__OnBuildDone__Patch
		{
			private static void Postfix(LG_WardenObjective_Reactor __instance)
			{
				if (__instance.SpawnNode != null && (Object)(object)__instance.m_terminal != (Object)null && !__instance.SpawnNode.m_zone.TerminalsSpawnedInZone.Contains(__instance.m_terminal))
				{
					__instance.SpawnNode.m_zone.TerminalsSpawnedInZone.Add(__instance.m_terminal);
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_BulkheadDoorController_Core__Setup__Patch
		{
			private static void Postfix(LG_BulkheadDoorController_Core __instance)
			{
				if ((Object)(object)((Component)__instance).GetComponent<LG_BulkheadDoorController_Marker>() == (Object)null)
				{
					((Component)__instance).gameObject.AddComponent<LG_BulkheadDoorController_Marker>().SetupNavMarker((Component)(object)__instance);
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_PowerGenerator_Core__Setup__Patch
		{
			private static void Postfix(LG_PowerGenerator_Core __instance)
			{
				if ((Object)(object)((Component)__instance).GetComponent<LG_PowerGenerator_Marker>() == (Object)null)
				{
					((Component)__instance).gameObject.AddComponent<LG_PowerGenerator_Marker>().SetupNavMarker((Component)(object)__instance);
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_HSU__Setup__Patch
		{
			private static void Postfix(LG_HSU __instance)
			{
				if ((Object)(object)((Component)__instance).GetComponent<LG_HSU_Marker>() == (Object)null)
				{
					((Component)__instance).gameObject.AddComponent<LG_HSU_Marker>().SetupNavMarker((Component)(object)__instance);
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_HSUActivator_Core__SetupAsWardenObjective__Patch
		{
			private static void Postfix(LG_HSUActivator_Core __instance)
			{
				if ((Object)(object)((Component)__instance).GetComponent<LG_HSUActivator_Marker>() == (Object)null)
				{
					((Component)__instance).gameObject.AddComponent<LG_HSUActivator_Marker>().SetupNavMarker((Component)(object)__instance);
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_HSUActivator_Core__SetupFromCustomGeomorph__Patch
		{
			private static void Postfix(LG_HSUActivator_Core __instance)
			{
				if ((Object)(object)((Component)__instance).GetComponent<LG_HSUActivator_Marker>() == (Object)null)
				{
					((Component)__instance).gameObject.AddComponent<LG_HSUActivator_Marker>().SetupNavMarker((Component)(object)__instance);
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_SecurityDoor_Locks__SetupForBulkheadDC__Patch
		{
			private static void Postfix(LG_SecurityDoor_Locks __instance)
			{
				if ((Object)(object)((Component)__instance).GetComponent<LG_SecurityDoor_Locks_Marker>() == (Object)null)
				{
					((Component)__instance).gameObject.AddComponent<LG_SecurityDoor_Locks_Marker>().SetupNavMarker((Component)(object)__instance);
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_SecurityDoor_Locks__SetupForGateKey__Patch
		{
			private static void Postfix(LG_SecurityDoor_Locks __instance)
			{
				if ((Object)(object)((Component)__instance).GetComponent<LG_SecurityDoor_Locks_Marker>() == (Object)null)
				{
					((Component)__instance).gameObject.AddComponent<LG_SecurityDoor_Locks_Marker>().SetupNavMarker((Component)(object)__instance);
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_SecurityDoor_Locks__SetupForPowerGenerator__Patch
		{
			private static void Postfix(LG_SecurityDoor_Locks __instance)
			{
				if ((Object)(object)((Component)__instance).GetComponent<LG_SecurityDoor_Locks_Marker>() == (Object)null)
				{
					((Component)__instance).gameObject.AddComponent<LG_SecurityDoor_Locks_Marker>().SetupNavMarker((Component)(object)__instance);
				}
			}
		}

		[ArchivePatch(/*Could not decode attribute arguments.*/)]
		private class LG_DisinfectionStation__Setup__Patch
		{
			private static void Postfix(LG_DisinfectionStation __instance)
			{
				if ((Object)(object)((Component)__instance).GetComponent<LG_DisinfectionStation_Marker>() == (Object)null)
				{
					((Component)__instance).gameObject.AddComponent<LG_DisinfectionStation_Marker>().SetupNavMarker((Component)(object)__instance);
				}
			}
		}

		public override string Name => "物品标记";

		public static ILocalizationService Localization { get; set; }

		[FeatureConfig]
		public static ItemMarkerSettings Settings { get; set; }

		public override void Init()
		{
			IconManager.Init();
			ItemMarkerManager.Init();
		}

		public override void OnGameStateChanged(int state)
		{
			if (state == 10)
			{
				ItemMarkerManager.SearchGameObject();
			}
		}

		public override void OnGameDataInitialized()
		{
			ItemInLevel_Marker.OnGameDataInitialized();
		}
	}
}