using System.Collections.Generic; using System.Threading; using Cysharp.Threading.Tasks; namespace RebootKit.Engine.Simulation.Interactors { public interface IInteractorAsync { UniTask Interact(TInteractable target, CancellationToken cancellationToken); } public interface IInteractor { void Interact(TInteractable target); } public class GroupInteractor : IInteractor { readonly List> m_Interactors = new List>(); public void Interact(TInteractable target) { foreach (IInteractor interactor in m_Interactors) interactor.Interact(target); } public void Add(IInteractor interactor) { m_Interactors.Add(interactor); } public void Remove(IInteractor interactor) { m_Interactors.Remove(interactor); } public void RemoveAll() { m_Interactors.Clear(); } } }