0%

Системы с условным выполнением для LeoECS Proto

Часто задают вопрос - а как выключать системы в ECS? Как запускать определенные системы через определенные промежутки времени? Как выполнять список систем только если активирован определенный режим в игре? В качестве ответа на эти вопросы появился пакет EcsProto.ConditionalSystems.

Для отключения систем в "LeoECS Lite" можно было применять EcsGroupSystem из расширения "Extended Systems", но способ включения / выключения через ECS-события не всем подходил.
Для выполнения систем через определенные временные отрезки можно было взять "Интервальные системы", но это решение работало только для отдельных систем с явно прописанными таймерами.

Для EcsProto было решено реализовать более универсальный вариант, покрывающий все варианты с условным выполнением списка вложенных систем.

Основным механизмом является класс ConditionalSystem, принимающий параметрами список вложенных систем, флаг автоинъекции данных и солвер принятия решения о запуске вложенных систем:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// IProtoSystems systems.
systems
.AddSystem (new ConditionalSystem (
// Solver, который будет разрешать выполнение вложенных систем.
new Solver1 (),
// Разрешаем автоинъекцию в solver и вложенные системы.
true,
// Вложенные системы, срабатывающие по результатам работы solver-а.
new Test1System (),
new Test2System (),
new Test3System ()
))
// Остальная инициализация.
// ...
.Init ();

Солвер должен реализовывать метод интерфейса, возвращающий разрешение на выполнение вложенных систем:

1
2
3
4
5
6
7
8
9
10
class Solver1 : IConditionalSolver {
// Поддерживается автоинъекция как для систем.
[DI] Aspect1 _aspect1;
[DI] Service1 _service1;

public bool Solve () {
// Тут может быть любая логика.
return true;
}
}

Реализуя различные солверы, мы можем:

  • встраивать миниигры или разделять разные режимы игры с тяжелой логикой в одном стартапе.
  • получить интервальный вызов набора систем, срабатывающих через определенное время, а не каждый фрейм.
  • получить фильтрацию работающих систем в зависимости от данных в общем случае - каждый может придумать свое применение.
Актуальные версии пакетов доступны в закрытом discord-сервере для boosty/sponsr-подписчиков.
Вы можете помочь автору подпиской (с доступом к коду):
Или просто разовым донатом (без доступа к коду):