3 #include "engine/logger.h"
8 Scene* currentScene = NULL;
13 Scene* scene = malloc(sizeof(Scene));
14 *scene = (Scene) { .parent = NULL,
17 .transform = identity(),
22 void insertChildScene(Scene* scene, Scene* newChild) {
23 if (!scene || !newChild) {
26 if (newChild->parent) {
28 "Cannot insert scene 0x%p as child of 0x%p, because it is already child of 0x%p",
35 scene->children = realloc(scene->children, ++(scene->numChildren) * sizeof(Scene*));
36 scene->children[scene->numChildren - 1] = newChild;
38 newChild->parent = scene;
41 void reparentScene(Scene* scene, Scene* newParent) {
47 Scene* parent = scene->parent;
48 size_t indexInParent = parent->numChildren;
49 for (size_t i = 0; i < parent->numChildren; ++i) {
50 if (parent->children[i] == scene) {
55 // This includes the hopefully impossible case where parent->numChildren == 0
56 if (indexInParent == parent->numChildren) {
57 logError("Scene %p not found in children of parent %p", scene, parent);
60 for (size_t i = indexInParent; i < parent->numChildren - 1; ++i) {
61 parent->children[i] = parent->children[i + 1];
63 parent->children = realloc(parent->children, --(parent->numChildren) * sizeof(Scene*));
69 insertChildScene(newParent, scene);