Философия и контекст¶
Что такое сцена¶
Сцена в 3D-движке — это контейнер текущего мира. Она хранит набор объектов, которые сейчас существуют в уровне, и определяет общий цикл их жизни: что обновляется, в каком порядке, и что участвует в рендере.
В termin-scene сцена буквально владеет пулом сущностей (tc_entity_pool). Все сущности сцены лежат в этом пуле. Если сущность удалена из пула, она перестаёт быть частью сцены.
Entity = идентичность, Component = поведение¶
Сущность (entity) — это идентичность и базовое состояние: id, имя, UUID, флаги, transform, иерархия родитель-ребёнок. Поведение в саму сущность не зашивается.
Поведение добавляется компонентами (component). Компоненты можно добавлять и удалять динамически, а сцена вызывает их lifecycle-хуки (start, fixed_update, update, before_render) в своём update-цикле.
Почему C¶
Библиотека написана на C, потому что C — lingua franca системной интеграции. Такое ядро проще встраивать в программы на разных языках через FFI (C++, Python, C#) и держать единый низкоуровневый контракт.
Отличия от типичных ECS¶
От типичных ECS-реализаций termin-scene отличается сочетанием двух моделей:
- Object-компоненты — для lifecycle-поведения (start/update/render). Классический OOP-паттерн с vtable.
- SoA-архетипы — для плотных данных и массовых проходов. Data-oriented паттерн с chunk-итерацией.
Дополнительно:
- Generational handles — безопасная проверка валидности ссылок без сборщика мусора.
- Scene extensions — расширение функциональности сцены без модификации core.