From 26c78e59d30361f4b2359765c52aacad93dfb42d Mon Sep 17 00:00:00 2001 From: Noah Pilarski Date: Wed, 31 Aug 2022 15:58:41 -0400 Subject: [PATCH] Add interference volume --- .../Builder/Volumes/VolumesBuildManager.cs | 7 ++++ NewHorizons/Components/InterferenceVolume.cs | 37 +++++++++++++++++++ NewHorizons/External/Modules/VolumesModule.cs | 5 +++ NewHorizons/Handlers/InterferenceHandler.cs | 23 ++++++++++++ NewHorizons/Patches/HUDPatches.cs | 3 +- 5 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 NewHorizons/Components/InterferenceVolume.cs create mode 100644 NewHorizons/Handlers/InterferenceHandler.cs diff --git a/NewHorizons/Builder/Volumes/VolumesBuildManager.cs b/NewHorizons/Builder/Volumes/VolumesBuildManager.cs index f4878c80..bc88df33 100644 --- a/NewHorizons/Builder/Volumes/VolumesBuildManager.cs +++ b/NewHorizons/Builder/Volumes/VolumesBuildManager.cs @@ -57,6 +57,13 @@ namespace NewHorizons.Builder.Volumes VolumeBuilder.Make(go, sector, mapRestrictionVolume); } } + if (config.Volumes.interferenceVolumes != null) + { + foreach (var interferenceVolume in config.Volumes.interferenceVolumes) + { + VolumeBuilder.Make(go, sector, interferenceVolume); + } + } } } } diff --git a/NewHorizons/Components/InterferenceVolume.cs b/NewHorizons/Components/InterferenceVolume.cs new file mode 100644 index 00000000..7daa0238 --- /dev/null +++ b/NewHorizons/Components/InterferenceVolume.cs @@ -0,0 +1,37 @@ +using NewHorizons.Handlers; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace NewHorizons.Components +{ + public class InterferenceVolume : BaseVolume + { + public override void OnTriggerVolumeEntry(GameObject hitObj) + { + if (hitObj.CompareTag("PlayerDetector")) + { + InterferenceHandler.OnPlayerEnterInterferenceVolume(); + } + else if (hitObj.CompareTag("ProbeDetector")) + { + InterferenceHandler.OnProbeEnterInterferenceVolume(); + } + } + + public override void OnTriggerVolumeExit(GameObject hitObj) + { + if (hitObj.CompareTag("PlayerDetector")) + { + InterferenceHandler.OnPlayerExitInterferenceVolume(); + } + else if (hitObj.CompareTag("ProbeDetector")) + { + InterferenceHandler.OnProbeExitInterferenceVolume(); + } + } + } +} diff --git a/NewHorizons/External/Modules/VolumesModule.cs b/NewHorizons/External/Modules/VolumesModule.cs index 0dd9e0fb..7bbf651c 100644 --- a/NewHorizons/External/Modules/VolumesModule.cs +++ b/NewHorizons/External/Modules/VolumesModule.cs @@ -24,6 +24,11 @@ namespace NewHorizons.External.Modules /// public HazardVolumeInfo[] hazardVolumes; + /// + /// Add interference volumes to this planet + /// + public VolumeInfo[] interferenceVolumes; + /// /// Add map restriction volumes to this planet /// diff --git a/NewHorizons/Handlers/InterferenceHandler.cs b/NewHorizons/Handlers/InterferenceHandler.cs new file mode 100644 index 00000000..cc0d5a90 --- /dev/null +++ b/NewHorizons/Handlers/InterferenceHandler.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NewHorizons.Handlers +{ + public static class InterferenceHandler + { + public static bool _playerInterference; + public static bool _probeInterference; + + public static bool PlayerHasInterference() => _playerInterference; + public static bool ProbeHasInterference() => _probeInterference; + + public static void OnPlayerEnterInterferenceVolume() => _playerInterference = true; + public static void OnPlayerExitInterferenceVolume() => _playerInterference = false; + + public static void OnProbeEnterInterferenceVolume() => _probeInterference = true; + public static void OnProbeExitInterferenceVolume() => _probeInterference = false; + } +} diff --git a/NewHorizons/Patches/HUDPatches.cs b/NewHorizons/Patches/HUDPatches.cs index bbb0061a..adcde38e 100644 --- a/NewHorizons/Patches/HUDPatches.cs +++ b/NewHorizons/Patches/HUDPatches.cs @@ -1,4 +1,5 @@ using HarmonyLib; +using NewHorizons.Handlers; namespace NewHorizons.Patches { @@ -57,7 +58,7 @@ namespace NewHorizons.Patches [HarmonyPatch(typeof(ProbeCamera), nameof(ProbeCamera.HasInterference))] public static void ProbeCamera_HasInterference(ProbeCamera __instance, ref bool __result) { - __result = __result || Components.CloakSectorController.isPlayerInside != Components.CloakSectorController.isProbeInside; + __result = __result || (__instance._id != ProbeCamera.ID.PreLaunch && (Components.CloakSectorController.isPlayerInside != Components.CloakSectorController.isProbeInside || InterferenceHandler.PlayerHasInterference() != InterferenceHandler.ProbeHasInterference())); } } }