diff --git a/NewHorizons/Builder/General/HeavenlyBodyBuilder.cs b/NewHorizons/Builder/General/HeavenlyBodyBuilder.cs index adde4797..1636bab9 100644 --- a/NewHorizons/Builder/General/HeavenlyBodyBuilder.cs +++ b/NewHorizons/Builder/General/HeavenlyBodyBuilder.cs @@ -15,7 +15,7 @@ namespace NewHorizons.Builder.General { public static class HeavenlyBodyBuilder { - private static readonly Dictionary bodyName = new Dictionary(); + private static readonly Dictionary _bodyMap = new Dictionary(); public static void Make(GameObject body, IPlanetConfig config, float SOI, GravityVolume bodyGravity, InitialMotion initialMotion) { @@ -40,14 +40,15 @@ namespace NewHorizons.Builder.General private static HeavenlyBody AddHeavenlyBody(string name) { var hb = new HeavenlyBody(name); - bodyName.Add(name, hb); + _bodyMap.Add(name, hb); var astroLookup = Position.AstroLookup; - astroLookup.Add(hb, () => AstroObjectLocator.GetAstroObject(name)); - Position.AstroLookup = astroLookup; - var bodyLookup = Position.BodyLookup; - bodyLookup.Add(hb, () => AstroObjectLocator.GetAstroObject(name)?.GetAttachedOWRigidbody()); + + astroLookup.Add(hb, () => GetAstroObject(name)); + bodyLookup.Add(hb, () => GetOWRigidbody(name)); + + Position.AstroLookup = astroLookup; Position.BodyLookup = bodyLookup; return hb; @@ -55,17 +56,40 @@ namespace NewHorizons.Builder.General private static HeavenlyBody GetBody(string name) { - if (bodyName.ContainsKey(name)) + if (_bodyMap.ContainsKey(name)) { - return bodyName[name]; + return _bodyMap[name]; } var hb = Position.find(AstroObjectLocator.GetAstroObject(name)); if (hb != null) { - bodyName.Add(name, hb); + _bodyMap.Add(name, hb); } return hb; } + + public static void OnDestroy() + { + Planet.defaultMapping = Planet.standardMapping; + } + + private static AstroObject GetAstroObject(string name) + { + var astroBody = AstroObjectLocator.GetAstroObject(name); + if (astroBody == null + || astroBody.gameObject == null) + { + return null; + } + + return astroBody; + } + + private static OWRigidbody GetOWRigidbody(string name) + { + var astroBody = GetAstroObject(name); + return astroBody?.GetOWRigidbody(); + } } } diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index 4368f252..a2c5806d 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -69,8 +69,9 @@ namespace NewHorizons void OnSceneLoaded(Scene scene, LoadSceneMode mode) { - Logger.Log($"Scene Loaded: {scene} {mode}"); - if (scene.name != "SolarSystem") return; + Logger.Log($"Scene Loaded: {scene.name} {mode}"); + HeavenlyBodyBuilder.OnDestroy(); + if (scene.name != "SolarSystem") { return; } Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => Locator.GetPlayerBody().gameObject.AddComponent());