using Aurora.Api; using Aurora.Framework.Seq; using Aurora.View; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ILSOS_PrismaticGun.Sequences { public class SequenceObject { private readonly ISequence _sequence; private Queue _chaineSequence; private ISequence _currentSequence; public SequenceObject(ISequence sequence) { _sequence = sequence; _sequence.RunStateChanged += StateChange; } private void StateChange(object sender, (string sequenceId, SequenceRunState state) e) { switch(e.state) { case SequenceRunState.StopHandling: case SequenceRunState.Finish: MessageUtil.ShowSuccessToast($"{e.sequenceId} Completed"); // 다음 시퀀스가 있다면 실행 if (_chaineSequence.Count > 0) { _currentSequence = _chaineSequence.Dequeue(); _currentSequence.RunStateChanged += StateChange; // 다음 시퀀스 실행 전 RunState 확인 if (_currentSequence.RunState != SequenceRunState.Running) { _sequence.RunStateChanged -= StateChange; _sequence.RunStateChanged += StateChange; _currentSequence.Start(); } } break; } } public bool Run() { if (_sequence == null || _sequence.RunState == SequenceRunState.Running) return false; _currentSequence = _sequence; _currentSequence.Start(); return true; } public bool RegistChaine(ISequence chaineSeq) { _chaineSequence.Enqueue(chaineSeq); return true; } } }