diff --git a/NewHorizons/Builder/Props/SignalBuilder.cs b/NewHorizons/Builder/Props/SignalBuilder.cs index 5cedf448..b496b672 100644 --- a/NewHorizons/Builder/Props/SignalBuilder.cs +++ b/NewHorizons/Builder/Props/SignalBuilder.cs @@ -19,13 +19,16 @@ namespace NewHorizons.Builder.Props private static Dictionary _customSignalNames; private static Stack _availableSignalNames; - - public static Dictionary SignalFrequencyOverrides; - private static int _nextCustomSignalName; - public static void Reset() + private static Dictionary _customFrequencyNames; + private static int _nextCustomFrequencyName; + + public static int NumberOfFrequencies; + + public static void Init() { + Logger.Log($"Initializing SignalBuilder"); _customSignalNames = new Dictionary(); _availableSignalNames = new Stack (new SignalName[] { @@ -64,12 +67,48 @@ namespace NewHorizons.Builder.Props SignalName.WhiteHole_BH_ForgeReceiver, SignalName.WhiteHole_GD_Receiver, }); - SignalFrequencyOverrides = new Dictionary() { + _customFrequencyNames = new Dictionary() { { SignalFrequency.Statue, "Nomai Statue" }, { SignalFrequency.Default, "???" }, { SignalFrequency.WarpCore, "Anti-Graviton Flux" } }; _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()._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) @@ -87,7 +126,7 @@ namespace NewHorizons.Builder.Props public static string GetCustomSignalName(SignalName signalName) { _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) @@ -123,7 +162,6 @@ namespace NewHorizons.Builder.Props try { clip = AudioUtility.LoadAudio(mod.ModHelper.Manifest.ModFolderPath + "/" + info.AudioFilePath); - //clip = mod.Assets.GetAudio(info.AudioFilePath); } catch(Exception e) { @@ -138,12 +176,10 @@ namespace NewHorizons.Builder.Props } audioSignal.SetSector(sector); + + if(name == SignalName.Default) audioSignal._preventIdentification = true; + audioSignal._frequency = frequency; - if (name == SignalName.Default) - { - name = AddSignalName(info.Name); - if(name == SignalName.Default) audioSignal._preventIdentification = true; - } audioSignal._name = name; audioSignal._sourceRadius = info.SourceRadius; audioSignal._revealFactID = info.Reveals; @@ -186,7 +222,7 @@ namespace NewHorizons.Builder.Props audioSignalDetectionTrigger._trigger = owTriggerVolume; signalGO.SetActive(true); - signalDetectionGO.SetActive(true); + signalDetectionGO.SetActive(true); } private static SignalFrequency StringToFrequency(string str) @@ -195,7 +231,11 @@ namespace NewHorizons.Builder.Props { 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) @@ -204,7 +244,10 @@ namespace NewHorizons.Builder.Props { if (str.Equals(name.ToString())) return name; } - return SignalName.Default; + var customName = CollectionUtilities.KeyByValue(_customSignalNames, str); + if (customName == default) customName = AddSignalName(str); + + return customName; } } } diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index 94a54188..14e5a067 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -254,7 +254,7 @@ namespace NewHorizons Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => Locator.GetPlayerBody().gameObject.AddComponent()); // Some builders need to be reset each time - SignalBuilder.Reset(); + SignalBuilder.Init(); // We do our own AstroObject tracking AstroObjectLocator.RefreshList(); @@ -531,7 +531,8 @@ namespace NewHorizons } 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) diff --git a/NewHorizons/Tools/Patches.cs b/NewHorizons/Tools/Patches.cs index acebf293..48e285f4 100644 --- a/NewHorizons/Tools/Patches.cs +++ b/NewHorizons/Tools/Patches.cs @@ -125,14 +125,54 @@ namespace NewHorizons.Tools if (customSignalName == null) return true; else { - __result = customSignalName; + __result = TranslationHandler.GetTranslation(customSignalName, TranslationHandler.TextType.UI).ToUpper(); 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) { switch (__0) { + case 0: + __result = SignalFrequency.Default; + break; case 1: __result = SignalFrequency.Traveler; break; @@ -155,60 +195,16 @@ namespace NewHorizons.Tools __result = SignalFrequency.Statue; break; default: - __result = SignalFrequency.Default; + __result = (SignalFrequency)(Math.Pow(2, __0)); break; } 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) { - SignalBuilder.SignalFrequencyOverrides.TryGetValue(__0, out string customName); - if (customName != null) + var customName = SignalBuilder.GetCustomFrequencyName(__0); + if (customName != null && customName != "") { if (NewHorizonsData.KnowsFrequency(customName)) __result = TranslationHandler.GetTranslation(customName, TranslationHandler.TextType.UI).ToUpper(); else __result = UITextLibrary.GetString(UITextType.SignalFreqUnidentified); @@ -239,25 +235,28 @@ namespace NewHorizons.Tools public static bool OnSignalscopeSwitchFrequencyFilter(Signalscope __instance, int __0) { var increment = __0; - var count = Enum.GetValues(typeof(SignalFrequency)).Length; + var count = SignalBuilder.NumberOfFrequencies; __instance._frequencyFilterIndex += increment; __instance._frequencyFilterIndex = ((__instance._frequencyFilterIndex >= count) ? 0 : __instance._frequencyFilterIndex); __instance._frequencyFilterIndex = ((__instance._frequencyFilterIndex < 0) ? count - 1 : __instance._frequencyFilterIndex); SignalFrequency signalFrequency = AudioSignal.IndexToFrequency(__instance._frequencyFilterIndex); + if (!PlayerData.KnowsFrequency(signalFrequency) && (!__instance._isUnknownFreqNearby || __instance._unknownFrequency != signalFrequency)) { __instance.SwitchFrequencyFilter(increment); } return false; } - #endregion + + #endregion f #region PlayerData public static bool OnPlayerDataKnowsFrequency(SignalFrequency __0, ref bool __result) { - SignalBuilder.SignalFrequencyOverrides.TryGetValue(__0, out string freqString); - if (freqString != null) - { + var freqString = SignalBuilder.GetCustomFrequencyName(__0); + + if (freqString != null && freqString != "") + { __result = NewHorizonsData.KnowsFrequency(freqString); return false; } @@ -266,8 +265,8 @@ namespace NewHorizons.Tools public static bool OnPlayerDataLearnFrequency(SignalFrequency __0) { - SignalBuilder.SignalFrequencyOverrides.TryGetValue(__0, out string freqString); - if (freqString != null) + var freqString = SignalBuilder.GetCustomFrequencyName(__0); + if (freqString != null && freqString != "") { NewHorizonsData.LearnFrequency(freqString); return false; diff --git a/NewHorizons/manifest.json b/NewHorizons/manifest.json index 848de54b..e26ae9d1 100644 --- a/NewHorizons/manifest.json +++ b/NewHorizons/manifest.json @@ -3,7 +3,7 @@ "author": "xen, Idiot, & Book", "name": "New Horizons", "uniqueName": "xen.NewHorizons", - "version": "0.9.1", + "version": "0.9.2", "owmlVersion": "2.1.0", "dependencies": [ "PacificEngine.OW_CommonResources" ], "conflicts": [ "Raicuparta.QuantumSpaceBuddies", "Vesper.OuterWildsMMO", "Vesper.AutoResume" ]