Track signals that are actually present in the scene

This commit is contained in:
Nick 2023-04-22 17:20:05 -04:00
parent c46c3f56ff
commit 877d965677
2 changed files with 34 additions and 1 deletions

View File

@ -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<SignalName>();
Initialized = true;
SceneManager.sceneUnloaded += OnSceneUnloaded;
SceneManager.sceneLoaded += OnSceneLoaded;
}
private static HashSet<SignalFrequency> _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<AstroObject>()?.GetAstroObjectName() == AstroObject.Name.QuantumMoon) _qmSignals.Add(name);
if (info.insideCloak) _cloakedSignals.Add(name);
_frequenciesInUse.Add(frequency);
return signalGO;
}

View File

@ -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);
}