mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Only show relevant frequencies (#585)
<!-- A new module or something else important --> ## Major features - <!-- A new parameter added to a module, or API feature --> ## Minor features - <!-- Some improvement that requires no action on the part of add-on creators i.e., improved star graphics --> ## Improvements - Only signal frequencies in use by the current system will be shown. (resolves #572) <!-- Be sure to reference the existing issue if it exists --> ## Bug fixes -
This commit is contained in:
commit
286a8a3a4b
@ -1,14 +1,13 @@
|
|||||||
using NewHorizons.External.Modules;
|
using HarmonyLib;
|
||||||
|
using NewHorizons.External.Modules.Props.Audio;
|
||||||
using NewHorizons.Utility;
|
using NewHorizons.Utility;
|
||||||
using NewHorizons.Utility.Files;
|
|
||||||
using NewHorizons.Utility.OWML;
|
using NewHorizons.Utility.OWML;
|
||||||
using NewHorizons.Utility.OuterWilds;
|
|
||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using OWML.Utils;
|
using OWML.Utils;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
|
||||||
using NewHorizons.External.Modules.Props.Audio;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.SceneManagement;
|
||||||
|
|
||||||
namespace NewHorizons.Builder.Props.Audio
|
namespace NewHorizons.Builder.Props.Audio
|
||||||
{
|
{
|
||||||
@ -20,8 +19,8 @@ namespace NewHorizons.Builder.Props.Audio
|
|||||||
|
|
||||||
public static int NumberOfFrequencies;
|
public static int NumberOfFrequencies;
|
||||||
|
|
||||||
private static List<AudioSignal> _qmSignals;
|
private static HashSet<AudioSignal> _qmSignals;
|
||||||
private static List<AudioSignal> _cloakedSignals;
|
private static HashSet<AudioSignal> _cloakedSignals;
|
||||||
|
|
||||||
public static bool Initialized;
|
public static bool Initialized;
|
||||||
|
|
||||||
@ -36,22 +35,46 @@ namespace NewHorizons.Builder.Props.Audio
|
|||||||
};
|
};
|
||||||
NumberOfFrequencies = EnumUtils.GetValues<SignalFrequency>().Length;
|
NumberOfFrequencies = EnumUtils.GetValues<SignalFrequency>().Length;
|
||||||
|
|
||||||
_qmSignals = new List<AudioSignal>() { SearchUtilities.Find("QuantumMoon_Body/Signal_Quantum").GetComponent<AudioSignal>() };
|
_qmSignals = new (){ SearchUtilities.Find("QuantumMoon_Body/Signal_Quantum").GetComponent<AudioSignal>() };
|
||||||
_cloakedSignals = new List<AudioSignal>();
|
_cloakedSignals = new();
|
||||||
|
|
||||||
Initialized = true;
|
Initialized = true;
|
||||||
|
|
||||||
|
SceneManager.sceneUnloaded += OnSceneUnloaded;
|
||||||
|
Main.Instance.OnStarSystemLoaded.AddListener(OnStarSystemLoaded);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsCloaked(this AudioSignal signal)
|
private static HashSet<SignalFrequency> _frequenciesInUse = new();
|
||||||
|
|
||||||
|
private static void OnSceneUnloaded(Scene _)
|
||||||
{
|
{
|
||||||
return _cloakedSignals.Contains(signal);
|
_frequenciesInUse.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsOnQuantumMoon(this AudioSignal signal)
|
private static void OnStarSystemLoaded(string starSystem)
|
||||||
{
|
{
|
||||||
return _qmSignals.Contains(signal);
|
// If its the base game solar system or eye we get all the main frequencies
|
||||||
|
if (starSystem == "SolarSystem" || starSystem == "EyeOfTheUniverse")
|
||||||
|
{
|
||||||
|
_frequenciesInUse.Add(SignalFrequency.Quantum);
|
||||||
|
_frequenciesInUse.Add(SignalFrequency.EscapePod);
|
||||||
|
_frequenciesInUse.Add(SignalFrequency.Radio);
|
||||||
|
_frequenciesInUse.Add(SignalFrequency.HideAndSeek);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Always show the traveler frequency. The signalscope defaults to this on spawn, and is the only frequency known by default
|
||||||
|
// We don't want a scenario where the player knows no frequencies
|
||||||
|
_frequenciesInUse.Add(SignalFrequency.Traveler);
|
||||||
|
|
||||||
|
NHLogger.LogVerbose($"Frequencies in use in {starSystem}: {_frequenciesInUse.Join(x => x.ToString())}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsFrequencyInUse(SignalFrequency freq) => _frequenciesInUse.Contains(freq);
|
||||||
|
|
||||||
|
public static bool IsCloaked(this AudioSignal signal) => _cloakedSignals.Contains(signal);
|
||||||
|
|
||||||
|
public static bool IsOnQuantumMoon(this AudioSignal signal) => _qmSignals.Contains(signal);
|
||||||
|
|
||||||
public static SignalFrequency AddFrequency(string str)
|
public static SignalFrequency AddFrequency(string str)
|
||||||
{
|
{
|
||||||
if (_customFrequencyNames == null) Init();
|
if (_customFrequencyNames == null) Init();
|
||||||
@ -153,6 +176,8 @@ namespace NewHorizons.Builder.Props.Audio
|
|||||||
if (planetGO.GetComponent<AstroObject>()?.GetAstroObjectName() == AstroObject.Name.QuantumMoon) _qmSignals.Add(audioSignal);
|
if (planetGO.GetComponent<AstroObject>()?.GetAstroObjectName() == AstroObject.Name.QuantumMoon) _qmSignals.Add(audioSignal);
|
||||||
if (info.insideCloak) _cloakedSignals.Add(audioSignal);
|
if (info.insideCloak) _cloakedSignals.Add(audioSignal);
|
||||||
|
|
||||||
|
_frequenciesInUse.Add(frequency);
|
||||||
|
|
||||||
return signalGO;
|
return signalGO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -21,9 +21,11 @@ namespace NewHorizons.Patches.SignalPatches
|
|||||||
__instance._frequencyFilterIndex += increment;
|
__instance._frequencyFilterIndex += increment;
|
||||||
__instance._frequencyFilterIndex = __instance._frequencyFilterIndex >= count ? 0 : __instance._frequencyFilterIndex;
|
__instance._frequencyFilterIndex = __instance._frequencyFilterIndex >= count ? 0 : __instance._frequencyFilterIndex;
|
||||||
__instance._frequencyFilterIndex = __instance._frequencyFilterIndex < 0 ? count - 1 : __instance._frequencyFilterIndex;
|
__instance._frequencyFilterIndex = __instance._frequencyFilterIndex < 0 ? count - 1 : __instance._frequencyFilterIndex;
|
||||||
SignalFrequency signalFrequency = AudioSignal.IndexToFrequency(__instance._frequencyFilterIndex);
|
var signalFrequency = AudioSignal.IndexToFrequency(__instance._frequencyFilterIndex);
|
||||||
|
|
||||||
if (!PlayerData.KnowsFrequency(signalFrequency) && (!__instance._isUnknownFreqNearby || __instance._unknownFrequency != signalFrequency))
|
// Skip over this frequency
|
||||||
|
var isUnknown = !PlayerData.KnowsFrequency(signalFrequency) && !(__instance._isUnknownFreqNearby && __instance._unknownFrequency == signalFrequency);
|
||||||
|
if (isUnknown || !SignalBuilder.IsFrequencyInUse(signalFrequency))
|
||||||
{
|
{
|
||||||
__instance.SwitchFrequencyFilter(increment);
|
__instance.SwitchFrequencyFilter(increment);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user