Перейти к содержанию

Философия и контекст

Что такое сцена

Сцена в 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.