Fix an NPE error

This commit is contained in:
JoJo 2021-12-29 14:42:15 -08:00
parent 1fb0c009e5
commit ce0db4c79e
2 changed files with 36 additions and 11 deletions

View File

@ -15,7 +15,7 @@ namespace NewHorizons.Builder.General
{ {
public static class HeavenlyBodyBuilder public static class HeavenlyBodyBuilder
{ {
private static readonly Dictionary<string, HeavenlyBody> bodyName = new Dictionary<string, HeavenlyBody>(); private static readonly Dictionary<string, HeavenlyBody> _bodyMap = new Dictionary<string, HeavenlyBody>();
public static void Make(GameObject body, IPlanetConfig config, float SOI, GravityVolume bodyGravity, InitialMotion initialMotion) 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) private static HeavenlyBody AddHeavenlyBody(string name)
{ {
var hb = new HeavenlyBody(name); var hb = new HeavenlyBody(name);
bodyName.Add(name, hb); _bodyMap.Add(name, hb);
var astroLookup = Position.AstroLookup; var astroLookup = Position.AstroLookup;
astroLookup.Add(hb, () => AstroObjectLocator.GetAstroObject(name));
Position.AstroLookup = astroLookup;
var bodyLookup = Position.BodyLookup; 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; Position.BodyLookup = bodyLookup;
return hb; return hb;
@ -55,17 +56,40 @@ namespace NewHorizons.Builder.General
private static HeavenlyBody GetBody(string name) 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)); var hb = Position.find(AstroObjectLocator.GetAstroObject(name));
if (hb != null) if (hb != null)
{ {
bodyName.Add(name, hb); _bodyMap.Add(name, hb);
} }
return 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();
}
} }
} }

View File

@ -69,8 +69,9 @@ namespace NewHorizons
void OnSceneLoaded(Scene scene, LoadSceneMode mode) void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{ {
Logger.Log($"Scene Loaded: {scene} {mode}"); Logger.Log($"Scene Loaded: {scene.name} {mode}");
if (scene.name != "SolarSystem") return; HeavenlyBodyBuilder.OnDestroy();
if (scene.name != "SolarSystem") { return; }
Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => Locator.GetPlayerBody().gameObject.AddComponent<DebugRaycaster>()); Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => Locator.GetPlayerBody().gameObject.AddComponent<DebugRaycaster>());