#include "World.hpp" #include namespace ProjectBrussel_UNITY_ID { template void CallGameObjectRecursive(GameObject* start, TFunction&& func) { PodVector stack; stack.push_back(start); while (!stack.empty()) { auto obj = stack.back(); stack.pop_back(); for (auto child : obj->GetChildren()) { stack.push_back(child); } func(obj); } } struct DrawCall { GLuint vao; GLuint vbo; }; } // namespace ProjectBrussel_UNITY_ID struct GameWorld::RenderData { void SubmitDrawCalls() { // TODO } }; GameWorld::GameWorld() : mRender{ new RenderData() } , mRoot(this) { } GameWorld::~GameWorld() { delete mRender; for (auto child : mRoot.GetChildren()) { GameObject::FreeRecursive(child); } } void GameWorld::Awaken() { if (mAwakened) return; ProjectBrussel_UNITY_ID::CallGameObjectRecursive(&mRoot, [](GameObject* obj) { obj->Awaken(); }); mAwakened = true; } void GameWorld::Resleep() { if (!mAwakened) return; ProjectBrussel_UNITY_ID::CallGameObjectRecursive(&mRoot, [](GameObject* obj) { obj->Resleep(); }); mAwakened = false; } void GameWorld::Update() { ProjectBrussel_UNITY_ID::CallGameObjectRecursive(&mRoot, [this](GameObject* obj) { obj->Update(); }); } void GameWorld::Draw() { }