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>();
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<DreamCampfireStreaming>();
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()
{
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);
}
}
}