44 lines
927 B
C++

#include "./scene.hpp"
namespace sdl_gpu_test
{
void SceneNode::handleEnteredScene()
{
for (scene_node_ptr_t& child : mChildren)
{
child->enterScene(mScene, this);
}
}
SceneNode* SceneNode::addChild(scene_node_ptr_t&& node)
{
mChildren.push_back(std::move(node));
if (mScene != nullptr)
{
mChildren.back()->enterScene(mScene, this);
}
return mChildren.back().get();
}
void SceneNode::enterScene(Scene* scene, SceneNode* parent)
{
MIJIN_ASSERT(mScene == nullptr && mParent == nullptr, "SceneNode is already in a scene.");
MIJIN_ASSERT_FATAL(scene != nullptr, "Missing parameter: scene.");
mScene = scene;
mParent = parent;
handleEnteredScene();
}
void Scene::init(const SceneInitArgs& args)
{
MIJIN_ASSERT_FATAL(args.renderer != nullptr, "Missing parameter: renderer.");
mRenderer = args.renderer;
mRootNode.enterScene(this, nullptr);
}
}