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
{
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)
{
@ -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();
}
}
}

View File

@ -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<DebugRaycaster>());