64 lines
2.0 KiB
C#
64 lines
2.0 KiB
C#
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<ISequence> _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;
|
|
}
|
|
}
|
|
}
|