diff --git a/NewHorizons/Builder/General/AstroObjectBuilder.cs b/NewHorizons/Builder/General/AstroObjectBuilder.cs index dfa81e3c..8278d056 100644 --- a/NewHorizons/Builder/General/AstroObjectBuilder.cs +++ b/NewHorizons/Builder/General/AstroObjectBuilder.cs @@ -1,3 +1,4 @@ +using NewHorizons.Components; using NewHorizons.Components.Orbital; using NewHorizons.External.Configs; using NewHorizons.Utility.OWML; @@ -60,24 +61,13 @@ namespace NewHorizons.Builder.General Delay.RunWhen( () => Locator._centerOfTheUniverse != null, - () => { - Locator._centerOfTheUniverse._staticReferenceFrame = astroObject.GetComponent(); - } - ); + () => Locator._centerOfTheUniverse._staticReferenceFrame = astroObject.GetComponent() + ); - NeverDeactivateCenterOfTheUniverse(astroObject.gameObject); + PreserveActiveCenterOfTheUniverse.Apply(astroObject.gameObject); } return astroObject; } - - private static void NeverDeactivateCenterOfTheUniverse(GameObject centerOfTheUniverse) - { - NHLogger.LogVerbose("Center of the universe cannot be inactive."); - centerOfTheUniverse.SetActive(true); - Delay.RunWhen(() => !centerOfTheUniverse.activeInHierarchy, () => { - NeverDeactivateCenterOfTheUniverse(centerOfTheUniverse); - }); - } } } diff --git a/NewHorizons/Components/PreserveActiveCenterOfTheUniverse.cs b/NewHorizons/Components/PreserveActiveCenterOfTheUniverse.cs new file mode 100644 index 00000000..0e8cd3c0 --- /dev/null +++ b/NewHorizons/Components/PreserveActiveCenterOfTheUniverse.cs @@ -0,0 +1,26 @@ +using NewHorizons.Utility.OWML; +using UnityEngine; + +namespace NewHorizons.Components +{ + // Prevents the center of the universe being deactivated + public class PreserveActiveCenterOfTheUniverse : MonoBehaviour + { + private GameObject _centerOfTheUniverse; + + public static void Apply(GameObject center) + { + var go = new GameObject(nameof(PreserveActiveCenterOfTheUniverse)); + go.AddComponent()._centerOfTheUniverse = center; + } + + public void Update() + { + if (!_centerOfTheUniverse.activeInHierarchy) + { + NHLogger.LogWarning("Center of the universe cannot be inactive."); + _centerOfTheUniverse.SetActive(true); + } + } + } +}