SparrowEngine/src/scene/graphicalcontainernode.cpp
2016-12-14 22:08:03 +01:00

66 lines
1.5 KiB
C++

#include "graphicalcontainernode.h"
#include "scenetree.h"
GraphicalContainerNode::~GraphicalContainerNode()
{
setSceneTree(nullptr);
for(GraphicalNode* child : m_children)
delete child;
}
void GraphicalContainerNode::update()
{
if(m_transformChanged)
m_combinedTransform = m_transform * m_parentTransform;
for(GraphicalNode* child : m_children)
{
if(m_transformChanged)
child->setParentTransform(m_combinedTransform);
child->update();
}
}
void GraphicalContainerNode::setSceneTree(SceneTree* tree)
{
SceneNode::setSceneTree(tree);
for(GraphicalNode* child : m_children)
child->setSceneTree(tree);
}
void GraphicalContainerNode::addChild(GraphicalNode *node)
{
if(node != nullptr)
{
if(m_scene != nullptr)
node->setSceneTree(m_scene);
m_children.push_back(node);
node->m_parent = this;
node->setParentTransform(m_transform);
node->setParentVisible(isVisible());
}
}
void GraphicalContainerNode::removeChild(GraphicalNode *node)
{
if(node != nullptr)
{
for(auto it = m_children.begin(); it != m_children.end();)
{
if(*it == node)
{
it = m_children.erase(it);
node->m_parent = nullptr;
node->setSceneTree(nullptr);
}
else
++it;
}
}
}
void GraphicalContainerNode::updateVisibility(bool visible)
{
for(GraphicalNode* child : m_children)
child->setParentVisible(visible);
}