using TriInspector; using UnityEngine; using UnityEngine.Events; using R0bbie.Timeline.Events; namespace R0bbie.Timeline { /// /// Just watches for custom GameEvent being raised, then auto-completes /// [AddComponentMenu("Timeline/Commands/Watch for Event (Step Command)")] [RequireComponent(typeof(Step))] public class WatchForEventCmd : StepCmd, IGameEventListener { // Exposed Variables [Title("Event Reference")] [SerializeField] GameEvent gameEventToWatchFor; bool registered; /// /// Initialise command (called before Activate) /// protected override void Init() { init = true; } public override void Activate(Step _parentStep) { base.Activate(_parentStep); // Start watching for GameEvent... if (!registered) Register(); } void Register() { gameEventToWatchFor.RegisterListener(this); registered = true; } void Unregister() { gameEventToWatchFor.UnregisterListener(this); registered = false; } public void OnEventRaised() { Unregister(); Complete(); } protected override void Cleanup() { active = false; } } }