README
June 3, 2025 · View on GitHub
Read
Syntax extension for DragonECS
Warning
This extension works slower than the standard syntax, so it is not recommended for writing performance-sensitive code. However, it is great for creating simple games and for prototyping.
This extension is designed to simplify syntax, reducing boilerplate and increasing readability.
The syntax for Queries and creating EcsStaticMask has been simplified, while the syntax for Entities has been extended to work in a more OOP style.
Instalation
Copy the scripts to the project folder. The scripts have internal visibility, so they will not conflict with other assemblies.
Examples
New syntax example:
public class NewVelocitySystem : IEcsRun
{
Inc<Transform, Velocity>.Exc<FreezedTag> _mask;
[EcsInject] EcsDefaultWorld _world;
[EcsInject] TimeService _time;
public void Run()
{
foreach (var e in (_world, _mask))
{
e.Get<Transform>().position += e.Get<Velocity>().value * _time.DeltaTime;
}
}
}
Or:
public class NewVelocitySystem : IEcsRun
{
[EcsInject] EcsDefaultWorld _world;
[EcsInject] TimeService _time;
public void Run()
{
foreach (var e in (_world, Inc<Transform, Velocity>.Exc<FreezedTag>.m))
{
e.Get<Transform>().position += e.Get<Velocity>().value * _time.DeltaTime;
}
}
}
Old syntax:
public class VelocitySystem : IEcsRun
{
class Aspect: EcsAspect
{
public EcsPool<Transform> transforms = Inc;
public EcsPool<Velocity> velocities = Inc;
public EcsTagPool<FreezedTag> freezedTags = Exc;
}
[EcsInject] EcsDefaultWorld _world;
[EcsInject] TimeService _time;
public void Run()
{
foreach (var e in _world.Where(out Aspect a))
{
a.transforms.Get(e).position += a.velocities.Get(e).value * _time.DeltaTime;
}
}
}
[OPEN] Mask generator for cases when there are not enough generic parameters for Inc or Exc. The generated code can simply replace the file EntLongQueryExtensions.cs.
Читать
Упрощенный синтаксис для DragonECS
Warning
Новый синтаксис работает медленее, чем стандартный, поэтому не рекомендуется использовать в чувсвительном к скорости выполнения коде. Тем не менее, он отлично подходит для создания простых игр или прототипирования.
Это расширение разработано для упрощения синтаксиса, уменьшения бойлерплейта и повышения удобочитаемости.
Упрощен синтаксис для "Запросов" и создания "EcsStaticMask", а синтаксис для сущностей расширен для работы в более объектно-ориентированном стиле.
Установка
Просто скопируйте скрипты в папку с проектом. Скрипты имеют модификатор видимости internal, поэтому не будет вызывать конфликт если используйется в других сборках.
Примеры
Пример нового синтаксиса:
public class NewVelocitySystem : IEcsRun
{
Inc<Transform, Velocity>.Exc<FreezedTag> _mask;
[EcsInject] EcsDefaultWorld _world;
[EcsInject] TimeService _time;
public void Run()
{
foreach (var e in (_world, _mask))
{
e.Get<Transform>().position += e.Get<Velocity>().value * _time.DeltaTime;
}
}
}
Or:
public class NewVelocitySystem : IEcsRun
{
[EcsInject] EcsDefaultWorld _world;
[EcsInject] TimeService _time;
public void Run()
{
foreach (var e in (_world, Inc<Transform, Velocity>.Exc<FreezedTag>.m))
{
e.Get<Transform>().position += e.Get<Velocity>().value * _time.DeltaTime;
}
}
}
Старый синтаксис:
public class VelocitySystem : IEcsRun
{
class Aspect: EcsAspect
{
public EcsPool<Transform> transforms = Inc;
public EcsPool<Velocity> velocities = Inc;
public EcsTagPool<FreezedTag> freezedTags = Exc;
}
[EcsInject] EcsDefaultWorld _world;
[EcsInject] TimeService _time;
public void Run()
{
foreach (var e in _world.Where(out Aspect a))
{
a.transforms.Get(e).position += a.velocities.Get(e).value * _time.DeltaTime;
}
}
}
[ОТКРЫТЬ] Генератор маск на случай если не хватает встроенного колличества джинерик параметров для Inc и Exc. Сгенерированный код просто заменить с файлом EntLongQueryExtensions.cs.