From e9bc02b54d1fb643118482cf37948cac1aa757e7 Mon Sep 17 00:00:00 2001 From: Nick Date: Thu, 21 Jul 2022 22:12:27 -0400 Subject: [PATCH] Fix funny NRE --- .../Builder/Body/BrambleDimensionBuilder.cs | 4 +-- .../Builder/Props/BrambleNodeBuilder.cs | 34 ++++++++++--------- NewHorizons/Main.cs | 4 ++- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/NewHorizons/Builder/Body/BrambleDimensionBuilder.cs b/NewHorizons/Builder/Body/BrambleDimensionBuilder.cs index a96988dd..baa78898 100644 --- a/NewHorizons/Builder/Body/BrambleDimensionBuilder.cs +++ b/NewHorizons/Builder/Body/BrambleDimensionBuilder.cs @@ -188,14 +188,14 @@ namespace NewHorizons.Builder.Body public static void PairExit(string exitName, OuterFogWarpVolume warpController) { - if (!BrambleNodeBuilder.NamedNodes.ContainsKey(exitName)) + if (!BrambleNodeBuilder.namedNodes.ContainsKey(exitName)) { if (!_unpairedDimensions.ContainsKey(exitName)) _unpairedDimensions[exitName] = new(); _unpairedDimensions[exitName].Add(warpController); return; } - warpController._linkedInnerWarpVolume = BrambleNodeBuilder.NamedNodes[exitName]; + warpController._linkedInnerWarpVolume = BrambleNodeBuilder.namedNodes[exitName]; } public static void FinishPairingDimensionsForExitNode(string nodeName) diff --git a/NewHorizons/Builder/Props/BrambleNodeBuilder.cs b/NewHorizons/Builder/Props/BrambleNodeBuilder.cs index 53c98257..d41e42c1 100644 --- a/NewHorizons/Builder/Props/BrambleNodeBuilder.cs +++ b/NewHorizons/Builder/Props/BrambleNodeBuilder.cs @@ -21,21 +21,21 @@ namespace NewHorizons.Builder.Props // keys are all dimension names that have been referenced by at least one node but do not (yet) exist // values are all nodes' warp controllers that link to a given dimension // unpairedNodes[name of dimension that doesn't exist yet] => List{warp controller for node that links to that dimension, ...} - private static Dictionary> _unpairedNodes = new(); - private static Dictionary> _propagatedSignals = null; + private static readonly Dictionary> _unpairedNodes = new(); + private static readonly Dictionary> _propagatedSignals = new(); - public static Dictionary NamedNodes { get; private set; } - public static Dictionary BuiltBrambleNodes { get; private set; } + public static readonly Dictionary namedNodes = new(); + public static readonly Dictionary builtBrambleNodes = new(); private static string _brambleSeedPrefabPath = "DB_PioneerDimension_Body/Sector_PioneerDimension/Interactables_PioneerDimension/SeedWarp_ToPioneer (1)"; private static string _brambleNodePrefabPath = "DB_HubDimension_Body/Sector_HubDimension/Interactables_HubDimension/InnerWarp_ToCluster"; public static void Init() { - _unpairedNodes = new(); - _propagatedSignals = null; - NamedNodes = new(); - BuiltBrambleNodes = new(); + _unpairedNodes.Clear(); + _propagatedSignals.Clear(); + namedNodes.Clear(); + builtBrambleNodes.Clear(); PropagateSignals(); } @@ -117,7 +117,6 @@ namespace NewHorizons.Builder.Props // This dictionary lists all the signals a given node should have, depending on the dimension it links to // ie, if a node links to "dimension1", then that node should spawn all of the signals in the list propagatedSignals["dimension1"] - _propagatedSignals = new Dictionary>(); foreach (var dimension in allDimensions) { _propagatedSignals[dimension.name] = new(); @@ -274,18 +273,21 @@ namespace NewHorizons.Builder.Props // Cleanup for dimension exits if (config.name != null) { - NamedNodes[config.name] = innerFogWarpVolume; + namedNodes[config.name] = innerFogWarpVolume; BrambleDimensionBuilder.FinishPairingDimensionsForExitNode(config.name); } // Make signals - foreach (var signalConfig in _propagatedSignals[config.linksTo]) + if (_propagatedSignals.TryGetValue(config.linksTo, out var connectedSignals)) { - var signalGO = SignalBuilder.Make(go, sector, signalConfig, mod); - signalGO.GetComponent()._identificationDistance = 0; - signalGO.GetComponent()._sourceRadius = 1; - signalGO.transform.position = brambleNode.transform.position; - signalGO.transform.parent = brambleNode.transform; + foreach (var signalConfig in connectedSignals) + { + var signalGO = SignalBuilder.Make(go, sector, signalConfig, mod); + signalGO.GetComponent()._identificationDistance = 0; + signalGO.GetComponent()._sourceRadius = 1; + signalGO.transform.position = brambleNode.transform.position; + signalGO.transform.parent = brambleNode.transform; + } } // Done! diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index 0aeb8004..e77ddbf7 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -270,13 +270,15 @@ namespace NewHorizons NewHorizonsData.Load(); SignalBuilder.Init(); BrambleDimensionBuilder.Init(); - BrambleNodeBuilder.Init(); AstroObjectLocator.Init(); StreamingHandler.Init(); AudioTypeHandler.Init(); PlanetCreationHandler.Init(BodyDict[CurrentStarSystem]); + // Relies on the list of bodies from PlanetCreationHandler so it must run after + BrambleNodeBuilder.Init(); + VesselWarpHandler.LoadVessel(); SystemCreationHandler.LoadSystem(SystemDict[CurrentStarSystem]); LoadTranslations(ModHelper.Manifest.ModFolderPath + "Assets/", this);