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 Stack<SignalName> _availableSignalNames;
public static Dictionary<SignalFrequency, string> SignalFrequencyOverrides;
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>();
_availableSignalNames = new Stack<SignalName> (new SignalName[]
{
@ -64,12 +67,48 @@ namespace NewHorizons.Builder.Props
SignalName.WhiteHole_BH_ForgeReceiver,
SignalName.WhiteHole_GD_Receiver,
});
SignalFrequencyOverrides = new Dictionary<SignalFrequency, string>() {
_customFrequencyNames = new Dictionary<SignalFrequency, string>() {
{ 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<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)
@ -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;
@ -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;
}
}
}

View File

@ -254,7 +254,7 @@ namespace NewHorizons
Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => Locator.GetPlayerBody().gameObject.AddComponent<DebugRaycaster>());
// 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)

View File

@ -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,24 +235,27 @@ 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;

View File

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