using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace RR.Common.Behaviour { /// /// Компонент для последовательного выполнения списка действий (SequenceAction). /// Позволяет создавать цепочки действий, которые выполняются одно за другим. /// public class Sequencer : MonoBehaviour { /// /// Список действий для последовательного выполнения. /// Каждое действие выполняется после завершения предыдущего. /// [Header("Последовательность действий")] [SerializeReference] public List actions = new(); /// /// Флаг, указывающий, выполняется ли последовательность в данный момент. /// protected bool IsExecuting; /// /// Запускает выполнение последовательности действий для текущего игрового объекта. /// public void InitializeSequence() { StartCoroutine(ExecuteSequence(gameObject)); } /// /// Запускает выполнение последовательности действий для указанного игрового объекта. /// /// Целевой игровой объект, над которым будут выполняться действия. public void InitializeSequence(GameObject target) { StartCoroutine(ExecuteSequence(target)); } /// /// Корутина, последовательно выполняющая все действия из списка. /// Пропускает null-элементы в списке. /// /// Целевой игровой объект для выполнения действий. /// IEnumerator для работы корутины. protected virtual IEnumerator ExecuteSequence(GameObject target) { IsExecuting = true; foreach (SequenceAction action in actions.Where(action => action != null)) { yield return StartCoroutine(action.Execute(this, target)); } IsExecuting = false; } } }