diff --git a/NewHorizons/Builder/Body/CloakBuilder.cs b/NewHorizons/Builder/Body/CloakBuilder.cs index ec6d96a5..a505f97c 100644 --- a/NewHorizons/Builder/Body/CloakBuilder.cs +++ b/NewHorizons/Builder/Body/CloakBuilder.cs @@ -1,4 +1,5 @@ -using NewHorizons.Utility; +using NewHorizons.Components; +using NewHorizons.Utility; using System; using System.Collections.Generic; using System.Linq; @@ -10,22 +11,19 @@ namespace NewHorizons.Builder.Body { static class CloakBuilder { - public static void Make(GameObject body, OWRigidbody rigidbody, float radius) + public static void Make(GameObject body, Sector sector, float radius) { var cloak = SearchUtilities.Find("RingWorld_Body/CloakingField_IP"); var newCloak = GameObject.Instantiate(cloak, body.transform); newCloak.transform.localPosition = Vector3.zero; + newCloak.SetActive(true); - // Get all the mesh renders - var renderers = new List(); - - foreach(var renderer in body.GetComponentsInChildren()) - { - renderers.SafeAdd(renderer); - renderer.enabled = false; - } + var cloakSectorController = newCloak.AddComponent(); + cloakSectorController.Init(newCloak.GetComponent(), sector); + // To cloak from the start + cloakSectorController.OnPlayerExit(); } } } diff --git a/NewHorizons/Components/CloakSectorController.cs b/NewHorizons/Components/CloakSectorController.cs new file mode 100644 index 00000000..31984ad6 --- /dev/null +++ b/NewHorizons/Components/CloakSectorController.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace NewHorizons.Components +{ + public class CloakSectorController : MonoBehaviour + { + private CloakFieldController _cloak; + private Sector _sector; + + private bool _isInitialized; + + public void Init(CloakFieldController cloak, Sector sector) + { + _cloak = cloak; + _sector = sector; + + _cloak.OnPlayerEnter += OnPlayerEnter; + _cloak.OnPlayerExit += OnPlayerExit; + + _isInitialized = true; + } + + void OnDestroy() + { + if(_isInitialized) + { + _cloak.OnPlayerEnter -= OnPlayerEnter; + _cloak.OnPlayerExit -= OnPlayerExit; + } + } + + public void OnPlayerEnter() + { + foreach(Transform child in _sector.transform) + { + child.gameObject.SetActive(true); + } + } + + public void OnPlayerExit() + { + foreach (Transform child in _sector.transform) + { + child.gameObject.SetActive(false); + } + } + } +} diff --git a/NewHorizons/Handlers/PlanetCreationHandler.cs b/NewHorizons/Handlers/PlanetCreationHandler.cs index 371654fb..a6f0b738 100644 --- a/NewHorizons/Handlers/PlanetCreationHandler.cs +++ b/NewHorizons/Handlers/PlanetCreationHandler.cs @@ -353,7 +353,7 @@ namespace NewHorizons.Handlers // Has to go last probably if (body.Config.Base.CloakRadius != 0f) - CloakBuilder.Make(go, rb, body.Config.Base.CloakRadius); + CloakBuilder.Make(go, sector, body.Config.Base.CloakRadius); return go; }