Уникальная система условий - #4777
kanopus952 wants to merge 1 commit into
Conversation
|
Important Review skippedToo many files! This PR contains 129 files, which is 29 over the limit of 100. To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch. Upgrade to a paid plan to raise the limit. This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (129)
You can disable this status message by setting the Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Готовим изменения к ревьюПривет! Здесь видно, что осталось сделать перед проверкой человеком. Пролистай страницу ПР вниз до блока проверок: там видны тесты и их результаты. Галочки в этом списке обновляются автоматически.
Warning GitHub не разрешит слить ПР, пока есть конфликты. Обнови свою ветку из целевой, открой отмеченные как конфликтующие файлы в IDE, выбери правильные изменения, создай коммит и отправь его.
Показать обязательные проверки
Как найти список ошибок тестов
Когда все пункты выполнены, бот сам переведёт ПР из черновика в готовое состояние. Обновление иногда занимает несколько минут. |
|
Причем ObjectiveConditionEvaluateEvent используется только в условиях вида компонент+кондишен, чтобы отправить состояние что происходить "сейчас" Нам не нужен метод RecordEvent как в случае пары ивент+компонент, так как через ObjectiveConditionEvaluateEvent мы мониторим какое-то состояние, а не записываем прогресс |




Краткое описание
Добавлена общая система целей —
Objective System.Цель состоит из набора условий:
all-должны выполниться все условия;any- достаточно выполнить одно условие;inverted- результат условия инвертируется.Система самостоятельно хранит прогресс, проверяет выполнение, подключает наблюдателей (навешивает компоненты на сущности вокруг чтобы слушать их ивенты - ОПЦИОНАЛЬНО. Используется только для туториалов чтобы не нагружать сервер) и очищает их после завершения.
Будут / уже используются в:
Как описать цель
Условия можно указывать прямо в прототипе использующей их системы:
Такая цель завершится, когда игрок наберёт необходимое время и приготовит еду либо уберёт лужу.
Для переиспользуемых целей можно создать отдельный
objective-прототип.Как добавить новое условие
Условие, проверяющее текущее состояние
Например, нужно проверить включён ли боевой режим.
Создаётся описание условия:
Затем система, которая получает текущее состояние:
Такие условия обратимы: если боевой режим выключить, условие снова станет невыполненным.
Условие, запоминающее действие
Например, нужно засчитать приготовление еды.
Создаётся отдельное событие:
Описание условия:
И система, связывающая событие с условием:
После успешного приготовления игровая система отправляет событие:
Активные цели игрока получат прогресс автоматически.
Как использовать цели в новой системе
Система-потребитель запускает цель для сущности:
SourceIdentifierпозволяет отличать свои цели от целей Tutorial, First Shift и других систем.После этого можно слушать результат:
При смене тела прогресс можно перенести:
Когда цель больше не нужна:
Режимы работы
OneShotЦель завершается один раз и перестаёт отслеживаться. Подходит для заданий, достижений и шагов обучения. Типа одноразовая цель.
MonitorЦель продолжает работать и сообщает как о выполнении, так и о возвращении в невыполненное состояние. Подходит для предварительных условий и проверок текущего состояния.
Что остаётся за использующей системой
Objective System отвечает только за условия и их прогресс.
Использующая система по-прежнему отвечает за собственную логику:
Таким образом, новые условия можно использовать одновременно в Tutorial, First Shift и любых будущих системах без копирования логики.