Давно ничего сюда не постил, год выдался сложный. Так что вот вам интересность. Если кто то вдруг пропустил, то автор всеми нами любимого zenject выкатил trecs ecs. Пощупал ее для тестов и вот что я могу сказать: строгая, быстрая, мощная и легко заюзать для сети. Поддерживает Burst and Jobs, детерминированный, снапшоты и реплеи. Для себя я подружил ее с litenetlib и это прекрасно 👍🏻
К примеру вот так система может перебрать сущности
public partial class MovementSystem : ISystem
{
[ForEachEntity(typeof(PlayerTag))]
void Execute(ref Position position, in Velocity velocity)
{
position.Value += velocity.Value * World.DeltaTime;
}
}
Тут Position и Velocity этот фильтр для перебора компонентов, а PlayerTag это тег для выбора сущности с которой работаем.
А вот так он описывается:
public struct PlayerTag : ITag { }
А так шаблоном описываем сущность
public partial class PlayerEntity : ITemplate, ITagged<PlayerTag>
{
Position Position;
Velocity Velocity;
}
github trecs