using System.Collections.Generic; namespace DCFApixels.DragonECS { public interface IEcsSystemsMessenger { public EcsSession Source { get; } } public class EcsSystemsMessenger : IEcsSystemsMessenger where TMessage : IEcsMessage { private EcsSession _source; private IEcsDoMessege[] _systems; public EcsSession Source => _source; public IReadOnlyList> Systems => _systems; internal EcsSystemsMessenger(EcsSession source) { _source = source; List> list = new List>(); foreach (var item in _source.AllSystems) { if (item is IEcsDoMessege targetItem) { list.Add(targetItem); } } _systems = list.ToArray(); } public void Send(in TMessage message) { foreach (var item in _systems) { item.Do(_source, message); } } } }