diff --git a/NewHorizons/Components/CloakSectorController.cs b/NewHorizons/Components/CloakSectorController.cs index 72a83aea..8d0ed0bb 100644 --- a/NewHorizons/Components/CloakSectorController.cs +++ b/NewHorizons/Components/CloakSectorController.cs @@ -20,9 +20,17 @@ namespace NewHorizons.Components // Lets just clear these off idc _cloak.OnPlayerEnter = new OWEvent(); _cloak.OnPlayerExit = new OWEvent(); + _cloak.OnProbeEnter = new OWEvent(); + _cloak.OnProbeExit = new OWEvent(); + _cloak.OnShipEnter = new OWEvent(); + _cloak.OnShipExit = new OWEvent(); _cloak.OnPlayerEnter += OnPlayerEnter; _cloak.OnPlayerExit += OnPlayerExit; + _cloak.OnProbeEnter += OnProbeEnter; + _cloak.OnProbeExit += OnProbeExit; + _cloak.OnShipEnter += OnShipEnter; + _cloak.OnShipExit += OnShipExit; _isInitialized = true; } @@ -49,6 +57,8 @@ namespace NewHorizons.Components { renderer.forceRenderingOff = false; } + + GlobalMessenger.FireEvent("PlayerEnterCloakField"); } public void OnPlayerExit() @@ -59,6 +69,28 @@ namespace NewHorizons.Components { renderer.forceRenderingOff = true; } + + GlobalMessenger.FireEvent("PlayerExitCloakField"); + } + + public void OnProbeEnter() + { + GlobalMessenger.FireEvent("ProbeEnterCloakField"); + } + + public void OnProbeExit() + { + GlobalMessenger.FireEvent("ProbeExitCloakField"); + } + + public void OnShipEnter() + { + GlobalMessenger.FireEvent("ShipEnterCloakField"); + } + + public void OnShipExit() + { + GlobalMessenger.FireEvent("ShipExitCloakField"); } public void EnableCloak() diff --git a/NewHorizons/Patches/HUDPatches.cs b/NewHorizons/Patches/HUDPatches.cs new file mode 100644 index 00000000..4ef50dd8 --- /dev/null +++ b/NewHorizons/Patches/HUDPatches.cs @@ -0,0 +1,56 @@ +using HarmonyLib; + +namespace NewHorizons.Patches +{ + [HarmonyPatch] + public static class HUDPatches + { + [HarmonyPostfix] + [HarmonyPatch(typeof(HUDMarker), nameof(HUDMarker.Awake))] + public static void HUDMarker_Awake(HUDMarker __instance) + { + GlobalMessenger.AddListener("PlayerEnterCloakField", __instance.OnPlayerEnterCloakField); + GlobalMessenger.AddListener("PlayerExitCloakField", __instance.OnPlayerExitCloakField); + } + + [HarmonyPostfix] + [HarmonyPatch(typeof(HUDMarker), nameof(HUDMarker.OnDestroy))] + public static void HUDMarker_OnDestroy(HUDMarker __instance) + { + GlobalMessenger.RemoveListener("PlayerEnterCloakField", __instance.OnPlayerEnterCloakField); + GlobalMessenger.RemoveListener("PlayerExitCloakField", __instance.OnPlayerExitCloakField); + } + + [HarmonyPostfix] + [HarmonyPatch(typeof(ProbeHUDMarker), nameof(ProbeHUDMarker.Awake))] + public static void ProbeHUDMarker_Awake(ProbeHUDMarker __instance) + { + GlobalMessenger.AddListener("ProbeEnterCloakField", __instance.RefreshOwnVisibility); + GlobalMessenger.AddListener("ProbeExitCloakField", __instance.RefreshOwnVisibility); + } + + [HarmonyPostfix] + [HarmonyPatch(typeof(ProbeHUDMarker), nameof(ProbeHUDMarker.OnDestroy))] + public static void ProbeHUDMarker_OnDestroy(ProbeHUDMarker __instance) + { + GlobalMessenger.RemoveListener("ProbeEnterCloakField", __instance.RefreshOwnVisibility); + GlobalMessenger.RemoveListener("ProbeExitCloakField", __instance.RefreshOwnVisibility); + } + + [HarmonyPostfix] + [HarmonyPatch(typeof(ShipHUDMarker), nameof(ShipHUDMarker.Awake))] + public static void ShipHUDMarker_Awake(ShipHUDMarker __instance) + { + GlobalMessenger.AddListener("ShipEnterCloakField", __instance.RefreshOwnVisibility); + GlobalMessenger.AddListener("ShipExitCloakField", __instance.RefreshOwnVisibility); + } + + [HarmonyPostfix] + [HarmonyPatch(typeof(ShipHUDMarker), nameof(ShipHUDMarker.OnDestroy))] + public static void ShipHUDMarker_OnDestroy(ShipHUDMarker __instance) + { + GlobalMessenger.RemoveListener("ShipEnterCloakField", __instance.RefreshOwnVisibility); + GlobalMessenger.RemoveListener("ShipExitCloakField", __instance.RefreshOwnVisibility); + } + } +}