diff --git a/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs b/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs index ae3aff08..9a102f9f 100644 --- a/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs +++ b/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs @@ -10,16 +10,25 @@ namespace NewHorizons.Builder.Orbital private static Material _dottedLineMaterial; private static Material _lineMaterial; - public static OrbitLine Make(GameObject planetGO, NHAstroObject astroObject, bool isMoon, PlanetConfig config) + public static GameObject Make(GameObject planetGO, bool isMoon, PlanetConfig config) + { + var orbitGO = new GameObject("Orbit"); + orbitGO.transform.parent = planetGO.transform; + orbitGO.transform.localPosition = Vector3.zero; + + Delay.FireOnNextUpdate(() => PostMake(orbitGO, planetGO, isMoon, config)); + return orbitGO; + } + + private static void PostMake(GameObject orbitGO, GameObject planetGO, bool isMoon, PlanetConfig config) { if (_dottedLineMaterial == null) _dottedLineMaterial = SearchUtilities.FindResourceOfTypeAndName("Effects_SPA_OrbitLine_Dotted_mat"); if (_lineMaterial == null) _lineMaterial = SearchUtilities.FindResourceOfTypeAndName("Effects_SPA_OrbitLine_mat"); - if (_dottedLineMaterial == null || _lineMaterial == null) return null; + // Might've been otherwise destroyed when updating + if (orbitGO == null) return; - var orbitGO = new GameObject("Orbit"); - orbitGO.transform.parent = planetGO.transform; - orbitGO.transform.localPosition = Vector3.zero; + var astroObject = planetGO.GetComponent(); var lineRenderer = orbitGO.AddComponent(); @@ -47,7 +56,6 @@ namespace NewHorizons.Builder.Orbital else { orbitLine = orbitGO.AddComponent(); - (orbitLine as NHOrbitLine).SetFromParameters(astroObject); } @@ -94,8 +102,6 @@ namespace NewHorizons.Builder.Orbital orbitGO.SetActive(false); }; } - - return orbitLine; } } } diff --git a/NewHorizons/Handlers/PlanetCreationHandler.cs b/NewHorizons/Handlers/PlanetCreationHandler.cs index 42fd5533..599b212d 100644 --- a/NewHorizons/Handlers/PlanetCreationHandler.cs +++ b/NewHorizons/Handlers/PlanetCreationHandler.cs @@ -506,7 +506,7 @@ namespace NewHorizons.Handlers if (body.Config.Orbit.showOrbitLine && !body.Config.Orbit.isStatic) { - Delay.FireOnNextUpdate(() => OrbitlineBuilder.Make(body.Object, ao, body.Config.Orbit.isMoon, body.Config)); + OrbitlineBuilder.Make(body.Object, body.Config.Orbit.isMoon, body.Config); } DetectorBuilder.Make(go, owRigidBody, primaryBody, ao, body.Config); @@ -673,7 +673,7 @@ namespace NewHorizons.Handlers SunOverrideBuilder.Make(go, sector, body.Config.Atmosphere, body.Config.Water, surfaceSize); } } - + if (body.Config.Atmosphere.fogSize != 0) { fog = FogBuilder.Make(go, sector, body.Config.Atmosphere, body.Mod); @@ -813,11 +813,18 @@ namespace NewHorizons.Handlers if (referenceFrame != null) referenceFrame._attachedAstroObject = newAO; // QM and stuff don't have orbit lines - var orbitLine = go.GetComponentInChildren()?.gameObject; - if (orbitLine != null) UnityEngine.Object.Destroy(orbitLine); + // Using the name since NH only creates the OrbitLine components next frame + var orbitLine = go.transform.Find("Orbit")?.gameObject; + if (orbitLine != null) + { + UnityEngine.Object.Destroy(orbitLine); + } var isMoon = newAO.GetAstroObjectType() is AstroObject.Type.Moon or AstroObject.Type.Satellite or AstroObject.Type.SpaceStation; - if (body.Config.Orbit.showOrbitLine) OrbitlineBuilder.Make(go, newAO, isMoon, body.Config); + if (body.Config.Orbit.showOrbitLine) + { + OrbitlineBuilder.Make(go, isMoon, body.Config); + } DetectorBuilder.SetDetector(primary, newAO, go.GetComponentInChildren());