Allow adding new frequencies

This commit is contained in:
Nick J. Connors 2022-02-25 16:13:04 -05:00
parent d1d5b2e557
commit f8209d010f
4 changed files with 116 additions and 73 deletions

View File

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

View File

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

View File

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

View File

@ -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" ]