stuff-from-scratch/src/rendering/visual_elements/scene/Scene.cpp
2023-01-17 10:13:25 +00:00

92 lines
1.6 KiB
C++

#include "Scene.h"
#include "RootNode.h"
#include "FontsManager.h"
#include "SceneItem.h"
#include <iostream>
Scene::Scene()
: mRootNode(std::make_unique<RootNode>()),
mSceneInfo(std::make_unique<SceneInfo>()),
mBackGroundColor(Color(255, 255, 255))
{
mRootNode->setName("Scene_RootNode");
}
Scene::~Scene()
{
}
void Scene::update()
{
mSceneItems.clear();
updateNode(mRootNode.get());
}
void Scene::addNode(AbstractVisualNode* node)
{
mRootNode->addChild(node);
}
bool Scene::isEmpty() const
{
return mRootNode->getNumChildren() == 0;
}
const Color& Scene::getBackgroundColor() const
{
return mBackGroundColor;
}
void Scene::setBackgroundColor(const Color& color)
{
mBackGroundColor = color;
}
void Scene::updateNode(AbstractVisualNode* node)
{
node->update(mSceneInfo.get());
for (auto child : node->getChildren())
{
if (child->getIsVisible())
{
updateNode(child);
}
}
for (std::size_t idx=0; idx< node->getNumSceneItems(); idx++)
{
if (auto item = node->getSceneItem(idx))
{
mSceneItems.push_back(item);
}
}
}
const std::vector<SceneItem*>& Scene::getItems() const
{
return mSceneItems;
}
bool Scene::shouldShowMeshOutline() const
{
return mSceneInfo->mShowMeshOutline;
}
void Scene::setShowMeshOutline(bool shouldShow)
{
mSceneInfo->mShowMeshOutline = shouldShow;
}
void Scene::setSupportsGeometryPrimitives(bool supports)
{
mSceneInfo->mSupportsGeometryPrimitives = true;
}
void Scene::setFontsManager(FontsManager* fontsManager)
{
mSceneInfo->mFontsManager = fontsManager;
}