Use EnterDreamWorld/ExitDreamWorld events instead of polling in update

This commit is contained in:
Joshua Thome 2024-10-05 22:47:02 -05:00
parent 670ba1da25
commit 05d0dfc185
2 changed files with 20 additions and 3 deletions

View File

@ -49,6 +49,7 @@ namespace NewHorizons.Builder.Props.EchoesOfTheEye
var campfire = campfireObj.GetComponentInChildren<DreamCampfire>(); var campfire = campfireObj.GetComponentInChildren<DreamCampfire>();
campfire._dreamArrivalLocation = DreamHandler.GetDreamArrivalLocation(info.id); 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(() => { Delay.FireInNUpdates(() => {
var streaming = campfireObj.GetComponentInChildren<DreamCampfireStreaming>(); var streaming = campfireObj.GetComponentInChildren<DreamCampfireStreaming>();
if (streaming != null) if (streaming != null)

View File

@ -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() void UpdateState()
{ {
foreach (var obj in toggledObjects) obj.SetActive(active); foreach (var obj in toggledObjects) obj.SetActive(active);
} }
public void Update() void OnEnterDreamWorld()
{ {
if (!initialized) return; SetActive(true);
SetActive(PlayerState.InDreamWorld()); }
void OnExitDreamWorld()
{
SetActive(false);
} }
} }
} }