DragonECS/src/React/EcsProcessorsMessenger.cs

42 lines
1.1 KiB
C#
Raw Normal View History

2023-02-05 19:59:45 +08:00
using System.Collections.Generic;
namespace DCFApixels.DragonECS
{
2023-02-07 17:11:56 +08:00
public interface IEcsProcessorsMessenger
2023-02-05 19:59:45 +08:00
{
public EcsSession Source { get; }
}
2023-02-07 17:11:56 +08:00
public class EcsProcessorsMessenger<TMessage> : IEcsProcessorsMessenger
2023-02-05 19:59:45 +08:00
where TMessage : IEcsMessage
{
private EcsSession _source;
2023-02-07 17:11:56 +08:00
private IEcsDoMessege<TMessage>[] _targets;
2023-02-05 19:59:45 +08:00
public EcsSession Source => _source;
2023-02-07 17:11:56 +08:00
public IReadOnlyList<IEcsDoMessege<TMessage>> Systems => _targets;
2023-02-05 19:59:45 +08:00
2023-02-07 17:11:56 +08:00
internal EcsProcessorsMessenger(EcsSession source)
2023-02-05 19:59:45 +08:00
{
_source = source;
List<IEcsDoMessege<TMessage>> list = new List<IEcsDoMessege<TMessage>>();
2023-02-07 17:11:56 +08:00
foreach (var item in _source.AllProcessors)
2023-02-05 19:59:45 +08:00
{
if (item is IEcsDoMessege<TMessage> targetItem)
{
list.Add(targetItem);
}
}
2023-02-07 17:11:56 +08:00
_targets = list.ToArray();
2023-02-05 19:59:45 +08:00
}
public void Send(in TMessage message)
{
2023-02-07 17:11:56 +08:00
foreach (var item in _targets)
2023-02-05 19:59:45 +08:00
{
item.Do(_source, message);
}
}
}
}