mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Track signals that are actually present in the scene
This commit is contained in:
parent
c46c3f56ff
commit
877d965677
@ -8,6 +8,7 @@ using OWML.Utils;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using NewHorizons.External.Modules.Props.Audio;
|
using NewHorizons.External.Modules.Props.Audio;
|
||||||
|
using UnityEngine.SceneManagement;
|
||||||
|
|
||||||
namespace NewHorizons.Builder.Props.Audio
|
namespace NewHorizons.Builder.Props.Audio
|
||||||
{
|
{
|
||||||
@ -39,8 +40,36 @@ namespace NewHorizons.Builder.Props.Audio
|
|||||||
_cloakedSignals = new List<SignalName>();
|
_cloakedSignals = new List<SignalName>();
|
||||||
|
|
||||||
Initialized = true;
|
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)
|
public static bool IsCloaked(this SignalName signalName)
|
||||||
{
|
{
|
||||||
return _cloakedSignals.Contains(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 (planetGO.GetComponent<AstroObject>()?.GetAstroObjectName() == AstroObject.Name.QuantumMoon) _qmSignals.Add(name);
|
||||||
if (info.insideCloak) _cloakedSignals.Add(name);
|
if (info.insideCloak) _cloakedSignals.Add(name);
|
||||||
|
|
||||||
|
_frequenciesInUse.Add(frequency);
|
||||||
|
|
||||||
return signalGO;
|
return signalGO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -23,7 +23,9 @@ namespace NewHorizons.Patches.SignalPatches
|
|||||||
__instance._frequencyFilterIndex = __instance._frequencyFilterIndex < 0 ? count - 1 : __instance._frequencyFilterIndex;
|
__instance._frequencyFilterIndex = __instance._frequencyFilterIndex < 0 ? count - 1 : __instance._frequencyFilterIndex;
|
||||||
SignalFrequency signalFrequency = AudioSignal.IndexToFrequency(__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);
|
__instance.SwitchFrequencyFilter(increment);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user