5 #include "engine/logger.h"
7 Scene* currentScene = NULL;
12 Scene* scene = malloc(sizeof(Scene));
13 *scene = (Scene) { .parent = NULL,
16 .transform = identity(),
21 void insertChildScene(Scene* scene, Scene* newChild) {
22 if (!scene || !newChild) {
25 if (newChild->parent) {
27 "Cannot insert scene 0x%p as child of 0x%p, because it is already child of 0x%p",
34 scene->children = realloc(scene->children, ++(scene->numChildren) * sizeof(Scene*));
35 scene->children[scene->numChildren - 1] = newChild;
37 newChild->parent = scene;
40 void reparentScene(Scene* scene, Scene* newParent) {
46 Scene* parent = scene->parent;
47 size_t indexInParent = parent->numChildren;
48 for (size_t i = 0; i < parent->numChildren; ++i) {
49 if (parent->children[i] == scene) {
54 // This includes the hopefully impossible case where parent->numChildren == 0
55 if (indexInParent == parent->numChildren) {
56 logError("Scene %p not found in children of parent %p", scene, parent);
59 for (size_t i = indexInParent; i < parent->numChildren - 1; ++i) {
60 parent->children[i] = parent->children[i + 1];
62 parent->children = realloc(parent->children, --(parent->numChildren) * sizeof(Scene*));
68 insertChildScene(newParent, scene);