From 05d0dfc185402d84242f9fd1fdaeedfa63483a31 Mon Sep 17 00:00:00 2001 From: Joshua Thome Date: Sat, 5 Oct 2024 22:47:02 -0500 Subject: [PATCH] Use EnterDreamWorld/ExitDreamWorld events instead of polling in update --- .../EchoesOfTheEye/DreamCampfireBuilder.cs | 1 + NewHorizons/Components/EOTE/DreamDimension.cs | 22 ++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/NewHorizons/Builder/Props/EchoesOfTheEye/DreamCampfireBuilder.cs b/NewHorizons/Builder/Props/EchoesOfTheEye/DreamCampfireBuilder.cs index 5005e310..f0eb6618 100644 --- a/NewHorizons/Builder/Props/EchoesOfTheEye/DreamCampfireBuilder.cs +++ b/NewHorizons/Builder/Props/EchoesOfTheEye/DreamCampfireBuilder.cs @@ -49,6 +49,7 @@ namespace NewHorizons.Builder.Props.EchoesOfTheEye var campfire = campfireObj.GetComponentInChildren(); campfire._dreamArrivalLocation = DreamHandler.GetDreamArrivalLocation(info.id); + // The streaming groups on DreamCampfires get set on Start() so we wait until after to change it again Delay.FireInNUpdates(() => { var streaming = campfireObj.GetComponentInChildren(); if (streaming != null) diff --git a/NewHorizons/Components/EOTE/DreamDimension.cs b/NewHorizons/Components/EOTE/DreamDimension.cs index 00c3389b..e244dca8 100644 --- a/NewHorizons/Components/EOTE/DreamDimension.cs +++ b/NewHorizons/Components/EOTE/DreamDimension.cs @@ -34,15 +34,31 @@ namespace NewHorizons.Components.EOTE } } + void Awake() + { + GlobalMessenger.AddListener("EnterDreamWorld", OnEnterDreamWorld); + GlobalMessenger.AddListener("ExitDreamWorld", OnExitDreamWorld); + } + + void OnDestroy() + { + GlobalMessenger.RemoveListener("EnterDreamWorld", OnEnterDreamWorld); + GlobalMessenger.RemoveListener("ExitDreamWorld", OnExitDreamWorld); + } + void UpdateState() { foreach (var obj in toggledObjects) obj.SetActive(active); } - public void Update() + void OnEnterDreamWorld() { - if (!initialized) return; - SetActive(PlayerState.InDreamWorld()); + SetActive(true); + } + + void OnExitDreamWorld() + { + SetActive(false); } } }