mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Allow adding new frequencies
This commit is contained in:
parent
d1d5b2e557
commit
f8209d010f
@ -19,13 +19,16 @@ namespace NewHorizons.Builder.Props
|
|||||||
|
|
||||||
private static Dictionary<SignalName, string> _customSignalNames;
|
private static Dictionary<SignalName, string> _customSignalNames;
|
||||||
private static Stack<SignalName> _availableSignalNames;
|
private static Stack<SignalName> _availableSignalNames;
|
||||||
|
|
||||||
public static Dictionary<SignalFrequency, string> SignalFrequencyOverrides;
|
|
||||||
|
|
||||||
private static int _nextCustomSignalName;
|
private static int _nextCustomSignalName;
|
||||||
|
|
||||||
public static void Reset()
|
private static Dictionary<SignalFrequency, string> _customFrequencyNames;
|
||||||
|
private static int _nextCustomFrequencyName;
|
||||||
|
|
||||||
|
public static int NumberOfFrequencies;
|
||||||
|
|
||||||
|
public static void Init()
|
||||||
{
|
{
|
||||||
|
Logger.Log($"Initializing SignalBuilder");
|
||||||
_customSignalNames = new Dictionary<SignalName, string>();
|
_customSignalNames = new Dictionary<SignalName, string>();
|
||||||
_availableSignalNames = new Stack<SignalName> (new SignalName[]
|
_availableSignalNames = new Stack<SignalName> (new SignalName[]
|
||||||
{
|
{
|
||||||
@ -64,12 +67,48 @@ namespace NewHorizons.Builder.Props
|
|||||||
SignalName.WhiteHole_BH_ForgeReceiver,
|
SignalName.WhiteHole_BH_ForgeReceiver,
|
||||||
SignalName.WhiteHole_GD_Receiver,
|
SignalName.WhiteHole_GD_Receiver,
|
||||||
});
|
});
|
||||||
SignalFrequencyOverrides = new Dictionary<SignalFrequency, string>() {
|
_customFrequencyNames = new Dictionary<SignalFrequency, string>() {
|
||||||
{ SignalFrequency.Statue, "Nomai Statue" },
|
{ SignalFrequency.Statue, "Nomai Statue" },
|
||||||
{ SignalFrequency.Default, "???" },
|
{ SignalFrequency.Default, "???" },
|
||||||
{ SignalFrequency.WarpCore, "Anti-Graviton Flux" }
|
{ SignalFrequency.WarpCore, "Anti-Graviton Flux" }
|
||||||
};
|
};
|
||||||
_nextCustomSignalName = 200;
|
_nextCustomSignalName = 200;
|
||||||
|
_nextCustomFrequencyName = 256;
|
||||||
|
NumberOfFrequencies = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SignalFrequency AddFrequency(string str)
|
||||||
|
{
|
||||||
|
Logger.Log($"Registering new frequency name [{str}]");
|
||||||
|
|
||||||
|
if (NumberOfFrequencies == 31)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"Can't store any more frequencies, skipping [{str}]");
|
||||||
|
return SignalFrequency.Default;
|
||||||
|
}
|
||||||
|
|
||||||
|
var freq = CollectionUtilities.KeyByValue(_customFrequencyNames, str);
|
||||||
|
if (freq != default)
|
||||||
|
{
|
||||||
|
return freq;
|
||||||
|
}
|
||||||
|
|
||||||
|
freq = (SignalFrequency)_nextCustomFrequencyName;
|
||||||
|
_nextCustomFrequencyName *= 2;
|
||||||
|
_customFrequencyNames.Add(freq, str);
|
||||||
|
|
||||||
|
NumberOfFrequencies++;
|
||||||
|
|
||||||
|
// This stuff happens after the signalscope is Awake so we have to change the number of frequencies now
|
||||||
|
GameObject.FindObjectOfType<Signalscope>()._strongestSignals = new AudioSignal[NumberOfFrequencies+1];
|
||||||
|
|
||||||
|
return freq;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GetCustomFrequencyName(SignalFrequency frequencyName)
|
||||||
|
{
|
||||||
|
_customFrequencyNames.TryGetValue(frequencyName, out string name);
|
||||||
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SignalName AddSignalName(string str)
|
public static SignalName AddSignalName(string str)
|
||||||
@ -87,7 +126,7 @@ namespace NewHorizons.Builder.Props
|
|||||||
public static string GetCustomSignalName(SignalName signalName)
|
public static string GetCustomSignalName(SignalName signalName)
|
||||||
{
|
{
|
||||||
_customSignalNames.TryGetValue(signalName, out string name);
|
_customSignalNames.TryGetValue(signalName, out string name);
|
||||||
return TranslationHandler.GetTranslation(name, TranslationHandler.TextType.UI).ToUpper();
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Make(GameObject body, Sector sector, SignalModule module, IModBehaviour mod)
|
public static void Make(GameObject body, Sector sector, SignalModule module, IModBehaviour mod)
|
||||||
@ -123,7 +162,6 @@ namespace NewHorizons.Builder.Props
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
clip = AudioUtility.LoadAudio(mod.ModHelper.Manifest.ModFolderPath + "/" + info.AudioFilePath);
|
clip = AudioUtility.LoadAudio(mod.ModHelper.Manifest.ModFolderPath + "/" + info.AudioFilePath);
|
||||||
//clip = mod.Assets.GetAudio(info.AudioFilePath);
|
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
@ -138,12 +176,10 @@ namespace NewHorizons.Builder.Props
|
|||||||
}
|
}
|
||||||
|
|
||||||
audioSignal.SetSector(sector);
|
audioSignal.SetSector(sector);
|
||||||
|
|
||||||
|
if(name == SignalName.Default) audioSignal._preventIdentification = true;
|
||||||
|
|
||||||
audioSignal._frequency = frequency;
|
audioSignal._frequency = frequency;
|
||||||
if (name == SignalName.Default)
|
|
||||||
{
|
|
||||||
name = AddSignalName(info.Name);
|
|
||||||
if(name == SignalName.Default) audioSignal._preventIdentification = true;
|
|
||||||
}
|
|
||||||
audioSignal._name = name;
|
audioSignal._name = name;
|
||||||
audioSignal._sourceRadius = info.SourceRadius;
|
audioSignal._sourceRadius = info.SourceRadius;
|
||||||
audioSignal._revealFactID = info.Reveals;
|
audioSignal._revealFactID = info.Reveals;
|
||||||
@ -186,7 +222,7 @@ namespace NewHorizons.Builder.Props
|
|||||||
audioSignalDetectionTrigger._trigger = owTriggerVolume;
|
audioSignalDetectionTrigger._trigger = owTriggerVolume;
|
||||||
|
|
||||||
signalGO.SetActive(true);
|
signalGO.SetActive(true);
|
||||||
signalDetectionGO.SetActive(true);
|
signalDetectionGO.SetActive(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SignalFrequency StringToFrequency(string str)
|
private static SignalFrequency StringToFrequency(string str)
|
||||||
@ -195,7 +231,11 @@ namespace NewHorizons.Builder.Props
|
|||||||
{
|
{
|
||||||
if (str.Equals(freq.ToString())) return freq;
|
if (str.Equals(freq.ToString())) return freq;
|
||||||
}
|
}
|
||||||
return SignalFrequency.Default;
|
var customName = CollectionUtilities.KeyByValue(_customFrequencyNames, str);
|
||||||
|
Logger.Log($"[{str}] [{customName}] FUCK");
|
||||||
|
if (customName == default) customName = AddFrequency(str);
|
||||||
|
|
||||||
|
return customName;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SignalName StringToSignalName(string str)
|
private static SignalName StringToSignalName(string str)
|
||||||
@ -204,7 +244,10 @@ namespace NewHorizons.Builder.Props
|
|||||||
{
|
{
|
||||||
if (str.Equals(name.ToString())) return name;
|
if (str.Equals(name.ToString())) return name;
|
||||||
}
|
}
|
||||||
return SignalName.Default;
|
var customName = CollectionUtilities.KeyByValue(_customSignalNames, str);
|
||||||
|
if (customName == default) customName = AddSignalName(str);
|
||||||
|
|
||||||
|
return customName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -254,7 +254,7 @@ namespace NewHorizons
|
|||||||
Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => Locator.GetPlayerBody().gameObject.AddComponent<DebugRaycaster>());
|
Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => Locator.GetPlayerBody().gameObject.AddComponent<DebugRaycaster>());
|
||||||
|
|
||||||
// Some builders need to be reset each time
|
// Some builders need to be reset each time
|
||||||
SignalBuilder.Reset();
|
SignalBuilder.Init();
|
||||||
|
|
||||||
// We do our own AstroObject tracking
|
// We do our own AstroObject tracking
|
||||||
AstroObjectLocator.RefreshList();
|
AstroObjectLocator.RefreshList();
|
||||||
@ -531,7 +531,8 @@ namespace NewHorizons
|
|||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
existingPlanet = GameObject.Find(body.Config.Name.Replace(" ", "") + "_Body");
|
if (body?.Config?.Name == null) Logger.LogError($"How is there no name for {body}");
|
||||||
|
else existingPlanet = GameObject.Find(body.Config.Name.Replace(" ", "") + "_Body");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (existingPlanet != null)
|
if (existingPlanet != null)
|
||||||
|
|||||||
@ -125,14 +125,54 @@ namespace NewHorizons.Tools
|
|||||||
if (customSignalName == null) return true;
|
if (customSignalName == null) return true;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
__result = customSignalName;
|
__result = TranslationHandler.GetTranslation(customSignalName, TranslationHandler.TextType.UI).ToUpper();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool OnAudioSignalFrequencyToIndex(SignalFrequency __0, ref int __result)
|
||||||
|
{
|
||||||
|
switch(__0)
|
||||||
|
{
|
||||||
|
case (SignalFrequency.Default):
|
||||||
|
__result = 0;
|
||||||
|
break;
|
||||||
|
case (SignalFrequency.Traveler):
|
||||||
|
__result = 1;
|
||||||
|
break;
|
||||||
|
case (SignalFrequency.Quantum):
|
||||||
|
__result = 2;
|
||||||
|
break;
|
||||||
|
case (SignalFrequency.EscapePod):
|
||||||
|
__result = 3;
|
||||||
|
break;
|
||||||
|
case (SignalFrequency.WarpCore):
|
||||||
|
__result = 4;
|
||||||
|
break;
|
||||||
|
case (SignalFrequency.HideAndSeek):
|
||||||
|
__result = 5;
|
||||||
|
break;
|
||||||
|
case (SignalFrequency.Radio):
|
||||||
|
__result = 6;
|
||||||
|
break;
|
||||||
|
case (SignalFrequency.Statue):
|
||||||
|
__result = 7;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Frequencies are in powers of 2
|
||||||
|
__result = (int)(Mathf.Log((float)__0) / Mathf.Log(2f));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static bool OnAudioSignalIndexToFrequency(int __0, ref SignalFrequency __result) {
|
public static bool OnAudioSignalIndexToFrequency(int __0, ref SignalFrequency __result) {
|
||||||
switch (__0)
|
switch (__0)
|
||||||
{
|
{
|
||||||
|
case 0:
|
||||||
|
__result = SignalFrequency.Default;
|
||||||
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
__result = SignalFrequency.Traveler;
|
__result = SignalFrequency.Traveler;
|
||||||
break;
|
break;
|
||||||
@ -155,60 +195,16 @@ namespace NewHorizons.Tools
|
|||||||
__result = SignalFrequency.Statue;
|
__result = SignalFrequency.Statue;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
__result = SignalFrequency.Default;
|
__result = (SignalFrequency)(Math.Pow(2, __0));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool OnAudioSignalFrequencyToIndex(SignalFrequency __0, ref int __result)
|
|
||||||
{
|
|
||||||
var frequency = __0;
|
|
||||||
if (frequency <= SignalFrequency.EscapePod)
|
|
||||||
{
|
|
||||||
if(frequency == SignalFrequency.Default)
|
|
||||||
{
|
|
||||||
__result = 0;
|
|
||||||
}
|
|
||||||
else if (frequency == SignalFrequency.Traveler)
|
|
||||||
{
|
|
||||||
__result = 1;
|
|
||||||
}
|
|
||||||
else if (frequency == SignalFrequency.Quantum)
|
|
||||||
{
|
|
||||||
__result = 2;
|
|
||||||
}
|
|
||||||
else if (frequency == SignalFrequency.EscapePod)
|
|
||||||
{
|
|
||||||
__result = 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (frequency == SignalFrequency.WarpCore)
|
|
||||||
{
|
|
||||||
__result = 4;
|
|
||||||
}
|
|
||||||
else if (frequency == SignalFrequency.HideAndSeek)
|
|
||||||
{
|
|
||||||
__result = 5;
|
|
||||||
}
|
|
||||||
else if (frequency == SignalFrequency.Radio)
|
|
||||||
{
|
|
||||||
__result = 6;
|
|
||||||
}
|
|
||||||
else if (frequency == SignalFrequency.Statue)
|
|
||||||
{
|
|
||||||
__result = 7;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool OnAudioSignalFrequencyToString(SignalFrequency __0, ref string __result)
|
public static bool OnAudioSignalFrequencyToString(SignalFrequency __0, ref string __result)
|
||||||
{
|
{
|
||||||
SignalBuilder.SignalFrequencyOverrides.TryGetValue(__0, out string customName);
|
var customName = SignalBuilder.GetCustomFrequencyName(__0);
|
||||||
if (customName != null)
|
if (customName != null && customName != "")
|
||||||
{
|
{
|
||||||
if (NewHorizonsData.KnowsFrequency(customName)) __result = TranslationHandler.GetTranslation(customName, TranslationHandler.TextType.UI).ToUpper();
|
if (NewHorizonsData.KnowsFrequency(customName)) __result = TranslationHandler.GetTranslation(customName, TranslationHandler.TextType.UI).ToUpper();
|
||||||
else __result = UITextLibrary.GetString(UITextType.SignalFreqUnidentified);
|
else __result = UITextLibrary.GetString(UITextType.SignalFreqUnidentified);
|
||||||
@ -239,25 +235,28 @@ namespace NewHorizons.Tools
|
|||||||
public static bool OnSignalscopeSwitchFrequencyFilter(Signalscope __instance, int __0)
|
public static bool OnSignalscopeSwitchFrequencyFilter(Signalscope __instance, int __0)
|
||||||
{
|
{
|
||||||
var increment = __0;
|
var increment = __0;
|
||||||
var count = Enum.GetValues(typeof(SignalFrequency)).Length;
|
var count = SignalBuilder.NumberOfFrequencies;
|
||||||
__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);
|
SignalFrequency signalFrequency = AudioSignal.IndexToFrequency(__instance._frequencyFilterIndex);
|
||||||
|
|
||||||
if (!PlayerData.KnowsFrequency(signalFrequency) && (!__instance._isUnknownFreqNearby || __instance._unknownFrequency != signalFrequency))
|
if (!PlayerData.KnowsFrequency(signalFrequency) && (!__instance._isUnknownFreqNearby || __instance._unknownFrequency != signalFrequency))
|
||||||
{
|
{
|
||||||
__instance.SwitchFrequencyFilter(increment);
|
__instance.SwitchFrequencyFilter(increment);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endregion
|
|
||||||
|
#endregion f
|
||||||
|
|
||||||
#region PlayerData
|
#region PlayerData
|
||||||
public static bool OnPlayerDataKnowsFrequency(SignalFrequency __0, ref bool __result)
|
public static bool OnPlayerDataKnowsFrequency(SignalFrequency __0, ref bool __result)
|
||||||
{
|
{
|
||||||
SignalBuilder.SignalFrequencyOverrides.TryGetValue(__0, out string freqString);
|
var freqString = SignalBuilder.GetCustomFrequencyName(__0);
|
||||||
if (freqString != null)
|
|
||||||
{
|
if (freqString != null && freqString != "")
|
||||||
|
{
|
||||||
__result = NewHorizonsData.KnowsFrequency(freqString);
|
__result = NewHorizonsData.KnowsFrequency(freqString);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -266,8 +265,8 @@ namespace NewHorizons.Tools
|
|||||||
|
|
||||||
public static bool OnPlayerDataLearnFrequency(SignalFrequency __0)
|
public static bool OnPlayerDataLearnFrequency(SignalFrequency __0)
|
||||||
{
|
{
|
||||||
SignalBuilder.SignalFrequencyOverrides.TryGetValue(__0, out string freqString);
|
var freqString = SignalBuilder.GetCustomFrequencyName(__0);
|
||||||
if (freqString != null)
|
if (freqString != null && freqString != "")
|
||||||
{
|
{
|
||||||
NewHorizonsData.LearnFrequency(freqString);
|
NewHorizonsData.LearnFrequency(freqString);
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
"author": "xen, Idiot, & Book",
|
"author": "xen, Idiot, & Book",
|
||||||
"name": "New Horizons",
|
"name": "New Horizons",
|
||||||
"uniqueName": "xen.NewHorizons",
|
"uniqueName": "xen.NewHorizons",
|
||||||
"version": "0.9.1",
|
"version": "0.9.2",
|
||||||
"owmlVersion": "2.1.0",
|
"owmlVersion": "2.1.0",
|
||||||
"dependencies": [ "PacificEngine.OW_CommonResources" ],
|
"dependencies": [ "PacificEngine.OW_CommonResources" ],
|
||||||
"conflicts": [ "Raicuparta.QuantumSpaceBuddies", "Vesper.OuterWildsMMO", "Vesper.AutoResume" ]
|
"conflicts": [ "Raicuparta.QuantumSpaceBuddies", "Vesper.OuterWildsMMO", "Vesper.AutoResume" ]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user