Системы с условным выполнением для LeoECS Proto
Часто задают вопрос - а как выключать системы в ECS? Как запускать определенные системы через определенные промежутки времени? Как выполнять список систем только если активирован определенный режим в игре? В качестве ответа на эти вопросы появился пакет EcsProto.ConditionalSystems
.
Для отключения систем в "LeoECS Lite" можно было применять EcsGroupSystem
из расширения "Extended Systems", но способ включения / выключения через ECS
-события не всем подходил.
Для выполнения систем через определенные временные отрезки можно было взять "Интервальные системы", но это решение работало только для отдельных систем с явно прописанными таймерами.
Для EcsProto
было решено реализовать более универсальный вариант, покрывающий все варианты с условным выполнением списка вложенных систем.
Основным механизмом является класс ConditionalSystem
, принимающий параметрами список вложенных систем, флаг автоинъекции данных и солвер принятия решения о запуске вложенных систем:
1 | // IProtoSystems systems. |
Солвер должен реализовывать метод интерфейса, возвращающий разрешение на выполнение вложенных систем:
1 | class Solver1 : IConditionalSolver { |
Реализуя различные солверы, мы можем:
- встраивать миниигры или разделять разные режимы игры с тяжелой логикой в одном стартапе.
- получить интервальный вызов набора систем, срабатывающих через определенное время, а не каждый фрейм.
- получить фильтрацию работающих систем в зависимости от данных в общем случае - каждый может придумать свое применение.