diff --git a/NewHorizons/Builder/Props/Audio/SignalBuilder.cs b/NewHorizons/Builder/Props/Audio/SignalBuilder.cs index 2c366fd0..7a998be5 100644 --- a/NewHorizons/Builder/Props/Audio/SignalBuilder.cs +++ b/NewHorizons/Builder/Props/Audio/SignalBuilder.cs @@ -8,6 +8,7 @@ using OWML.Utils; using System.Collections.Generic; using UnityEngine; using NewHorizons.External.Modules.Props.Audio; +using UnityEngine.SceneManagement; namespace NewHorizons.Builder.Props.Audio { @@ -39,8 +40,36 @@ namespace NewHorizons.Builder.Props.Audio _cloakedSignals = new List(); Initialized = true; + + SceneManager.sceneUnloaded += OnSceneUnloaded; + SceneManager.sceneLoaded += OnSceneLoaded; } + private static HashSet _frequenciesInUse = new(); + + private static void OnSceneUnloaded(Scene _) + { + _frequenciesInUse.Clear(); + } + + private static void OnSceneLoaded(Scene scene, LoadSceneMode _) + { + // If its the base game solar system or eye we get all the main frequencies + if (scene.name == LoadManager.SceneToName(OWScene.EyeOfTheUniverse) || + (scene.name == LoadManager.SceneToName(OWScene.SolarSystem) && Main.Instance.CurrentStarSystem == "SolarSystem")) + { + _frequenciesInUse.Add(SignalFrequency.Quantum); + _frequenciesInUse.Add(SignalFrequency.EscapePod); + _frequenciesInUse.Add(SignalFrequency.Radio); + _frequenciesInUse.Add(SignalFrequency.HideAndSeek); + } + + // By default lets always have travelers + _frequenciesInUse.Add(SignalFrequency.Traveler); + } + + public static bool IsFrequencyInUse(SignalFrequency freq) => _frequenciesInUse.Contains(freq); + public static bool IsCloaked(this SignalName signalName) { return _cloakedSignals.Contains(signalName); @@ -152,6 +181,8 @@ namespace NewHorizons.Builder.Props.Audio if (planetGO.GetComponent()?.GetAstroObjectName() == AstroObject.Name.QuantumMoon) _qmSignals.Add(name); if (info.insideCloak) _cloakedSignals.Add(name); + _frequenciesInUse.Add(frequency); + return signalGO; } diff --git a/NewHorizons/Patches/SignalPatches/SignalscopePatches.cs b/NewHorizons/Patches/SignalPatches/SignalscopePatches.cs index a348152e..1f79880d 100644 --- a/NewHorizons/Patches/SignalPatches/SignalscopePatches.cs +++ b/NewHorizons/Patches/SignalPatches/SignalscopePatches.cs @@ -23,7 +23,9 @@ namespace NewHorizons.Patches.SignalPatches __instance._frequencyFilterIndex = __instance._frequencyFilterIndex < 0 ? count - 1 : __instance._frequencyFilterIndex; SignalFrequency signalFrequency = AudioSignal.IndexToFrequency(__instance._frequencyFilterIndex); - if (!PlayerData.KnowsFrequency(signalFrequency) && (!__instance._isUnknownFreqNearby || __instance._unknownFrequency != signalFrequency)) + // Cases where this frequency isnt used + if (!PlayerData.KnowsFrequency(signalFrequency) && SignalBuilder.IsFrequencyInUse(signalFrequency) && + (!__instance._isUnknownFreqNearby || __instance._unknownFrequency != signalFrequency)) { __instance.SwitchFrequencyFilter(increment); }