Мне это очень не нравится. Эта архитектура пытается усидеть на двух стульях.
Она пытается делать разделение данных и логики, но не делая это до конца и не обладая ни вычислительной эффективностью, ни эффективностью в атомизации преобразований (т.к. преобразования привязаны к состоянию и коду ноды).
Но также она пытается сохранить удобство, которое дает модель компонентов, но и это делает плохо, т.к. код больше не локализован, частично лежит в системах, частично лежит в нодах, к тому же исполнение преобразуется в состояние через шину событий и гоняется между нодами, между системами, туда и обратно. Отладка кода, который умеет превращаться в состояние, и так сам по себе малоприятный процесс в ECS, а тут ещё и шина событий двухсторонняя.
Причем, такую систему сценариев можно спокойно реализовать на базом ECS. Или на системе компонентов. Зачем вообще на нодах сценария нужны компоненты, если ноды по сути отвечают за преобразования контекста? Это ведь на контексте должны быть компоненты, которые используются и преобразуются нодами в процессе исполнения сценария, разве нет? А ноды это просто код преобразования с фильтрами входа и выхода. Перемещение между нодами сценария санкционируется компонентом на конетксте, который сообщает системе что контекст #AAA хочет посетить систему с такими-то параметрами ноды сценария #BBB.
Нода сама по себе ничего не исполняет, скорее имеет данные и логику, которую уже вызывает плеер. Нода имеет состояние активности и для её включения/отключения уже требуется контекст исполнения (который генерирует плеер) Сами ноды и компоненты иммутабельные и скорее ближе к списку, который плеер использует как последовательность действий для систем. И компоненты в нодах имеют смысл, так как они не состояния. Они по логике ближе к сигналам-инструкциям, которые системы принимают через шину и исполняют Наверное ты прав, что логика нод и систем не должны существовать раздельно, и то, что через обычный ECS это вполне можно было бы реализовать, но тут изначально было командное решение создавать именно граф с последовательными инструкциями, которые бы изменяли мир Наверное можно было бы создать ECS со специальными системами-нодами, или убрать сущность нод, но так уж получилось и инструмент уже написан и работает
Мне это очень не нравится. Эта архитектура пытается усидеть на двух стульях.
Она пытается делать разделение данных и логики, но не делая это до конца и не обладая ни вычислительной эффективностью, ни эффективностью в атомизации преобразований (т.к. преобразования привязаны к состоянию и коду ноды).
Но также она пытается сохранить удобство, которое дает модель компонентов, но и это делает плохо, т.к. код больше не локализован, частично лежит в системах, частично лежит в нодах, к тому же исполнение преобразуется в состояние через шину событий и гоняется между нодами, между системами, туда и обратно. Отладка кода, который умеет превращаться в состояние, и так сам по себе малоприятный процесс в ECS, а тут ещё и шина событий двухсторонняя.
Причем, такую систему сценариев можно спокойно реализовать на базом ECS. Или на системе компонентов. Зачем вообще на нодах сценария нужны компоненты, если ноды по сути отвечают за преобразования контекста? Это ведь на контексте должны быть компоненты, которые используются и преобразуются нодами в процессе исполнения сценария, разве нет? А ноды это просто код преобразования с фильтрами входа и выхода. Перемещение между нодами сценария санкционируется компонентом на конетксте, который сообщает системе что контекст #AAA хочет посетить систему с такими-то параметрами ноды сценария #BBB.
Нода сама по себе ничего не исполняет, скорее имеет данные и логику, которую уже вызывает плеер. Нода имеет состояние активности и для её включения/отключения уже требуется контекст исполнения (который генерирует плеер)
Сами ноды и компоненты иммутабельные и скорее ближе к списку, который плеер использует как последовательность действий для систем. И компоненты в нодах имеют смысл, так как они не состояния. Они по логике ближе к сигналам-инструкциям, которые системы принимают через шину и исполняют
Наверное ты прав, что логика нод и систем не должны существовать раздельно, и то, что через обычный ECS это вполне можно было бы реализовать, но тут изначально было командное решение создавать именно граф с последовательными инструкциями, которые бы изменяли мир
Наверное можно было бы создать ECS со специальными системами-нодами, или убрать сущность нод, но так уж получилось и инструмент уже написан и работает