implemented find/swap/pop for removing object of scene tree
This commit is contained in:
parent
aeaf4e08dd
commit
4295481cfe
@ -1,7 +1,7 @@
|
|||||||
#include "scenetree.h"
|
#include "scenetree.h"
|
||||||
#include "resourcemanager.h"
|
#include "resourcemanager.h"
|
||||||
#include <pipeline.h>
|
#include <pipeline.h>
|
||||||
|
#include <algorithm>
|
||||||
// Scene
|
// Scene
|
||||||
|
|
||||||
SceneTree::SceneTree() :
|
SceneTree::SceneTree() :
|
||||||
@ -42,19 +42,23 @@ void SceneTree::addObject(ContainerNode *parent, SceneNode *node)
|
|||||||
parent->addChild(node);
|
parent->addChild(node);
|
||||||
Light *light = node->getLight();
|
Light *light = node->getLight();
|
||||||
GeometryNode *geometrynode = node->getGeometryNode();
|
GeometryNode *geometrynode = node->getGeometryNode();
|
||||||
//TODO : Check for doublon in m_lights et m_geometries
|
//TODO : Check for doublon in m_lights et m_geometries => not necessary if correctly removed ?
|
||||||
if (light) m_lights.push_back(light);
|
if (light) m_lights.push_back(light);
|
||||||
if (geometrynode) m_geometries.push_back(geometrynode);
|
if (geometrynode) m_geometries.push_back(geometrynode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SceneTree::removeObject(ContainerNode* parent,SceneNode *node){
|
void SceneTree::removeObject(ContainerNode* parent,SceneNode *node){
|
||||||
parent->removeChild(node);
|
parent->removeChild(node);
|
||||||
Light *l = node->getLight();
|
auto it_l = std::find(m_lights.begin(),m_lights.end(),node->getLight());
|
||||||
GeometryNode *g = node->getGeometryNode();
|
if (it_l != m_lights.end()){
|
||||||
//TODO : remove light and geometrynode from m_lights et m_geometries
|
std::iter_swap(it_l,m_lights.end()-1);
|
||||||
// debug following line
|
m_lights.pop_back();
|
||||||
// m_lights.erase(std::remove(m_lights.begin(),m_lights.end(),&(*l)),m_lights.end());
|
}
|
||||||
// m_geometries.erase(std::remove(m_geometries.begin(),m_geometries.end(),g),m_geometries.end());
|
auto it_g = std::find(m_geometries.begin(),m_geometries.end(),node->getGeometryNode());
|
||||||
|
if (it_g != m_geometries.end()){
|
||||||
|
std::iter_swap(it_g,m_geometries.end()-1);
|
||||||
|
m_geometries.pop_back();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@ protected:
|
|||||||
/**
|
/**
|
||||||
* @brief The CameraNode class is a scene node that can be used by the renderer
|
* @brief The CameraNode class is a scene node that can be used by the renderer
|
||||||
*/
|
*/
|
||||||
|
//TODO : Fix compil error here
|
||||||
class CameraNode : public Camera, SceneNode
|
class CameraNode : public Camera, SceneNode
|
||||||
{
|
{
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user