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 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);
|
||||
audioSignal._frequency = frequency;
|
||||
if (name == SignalName.Default)
|
||||
{
|
||||
name = AddSignalName(info.Name);
|
||||
|
||||
if(name == SignalName.Default) audioSignal._preventIdentification = true;
|
||||
}
|
||||
|
||||
audioSignal._frequency = frequency;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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" ]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user