2026-06-05 13:44:39 +09:00

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;
}
}
}