Быстрый старт¶
Минимальный поток: создать сцену, добавить сущность с компонентом, выполнить update и корректно освободить ресурсы.
1. Создать сцену и получить пул сущностей¶
tc_scene_handle scene = tc_scene_new_named("Main");
tc_entity_pool* pool = tc_scene_entity_pool(scene);
2. Создать сущность¶
tc_entity_id e = tc_entity_pool_alloc(pool, "Player");
3. Создать и добавить компонент¶
// c должен быть корректно инициализирован
// (vtable, ref_vtable и другие поля по контракту вашего типа компонента)
tc_entity_pool_add_component(pool, e, c);
При добавлении:
- Устанавливается
c->owner. - Вызывается
retain(еслиfactory_retained == false). - Вызываются
on_added_to_entityиon_added.
Подробнее: Lifecycle.
4. Выполнить update кадра¶
tc_scene_update(scene, dt); // start -> fixed_update -> update
tc_scene_before_render(scene); // before_render для компонентов и extensions
5. Освобождение¶
tc_scene_free(scene);
При освобождении сцены удаляются все сущности и вызывается release для каждого компонента.
Что важно помнить¶
- Все
handle/idв ядре generational: послеfreeстарые значения становятся невалидными. tc_scene_updateвыполняетstart(для новых компонентов), затемfixed_update, затемupdate.- При удалении сцены освобождаются компоненты по ref-count контракту (
retain/release).
Что дальше¶
- Философия — зачем так устроено.
- Архитектура — слои, модули, поток кадра.
- Handles — как работают generational идентификаторы.