66 lines
1.5 KiB
C++
66 lines
1.5 KiB
C++
#include "scene.h"
|
|
#include "mesh.h"
|
|
#include <set>
|
|
|
|
|
|
void Scene::getMeshTypes(std::vector<unsigned int> &meshTypes)
|
|
{
|
|
std::set<unsigned int> typesSet;
|
|
for(SceneIterator<GeometryNode*>* geometryIt = getGeometry(); geometryIt->isValid(); geometryIt->next())
|
|
typesSet.emplace(geometryIt->getItem()->mesh->getFlags());
|
|
for(unsigned int type : typesSet)
|
|
meshTypes.push_back(type);
|
|
}
|
|
|
|
void Scene::getLightTypes(std::vector<unsigned int> &lightTypes)
|
|
{
|
|
std::set<unsigned int> typesSet;
|
|
for(SceneIterator<Light*>* lightIt = getLights(); lightIt->isValid(); lightIt->next())
|
|
typesSet.emplace(lightIt->getItem()->getFlags());
|
|
for(unsigned int type : typesSet)
|
|
lightTypes.push_back(type);
|
|
}
|
|
|
|
BasicScene::~BasicScene()
|
|
{
|
|
clearScene();
|
|
}
|
|
|
|
void BasicScene::addMesh(GeometryNode* gn)
|
|
{
|
|
geometry.push_back(gn);
|
|
}
|
|
|
|
GeometryNode* BasicScene::addMesh(Mesh* m, glm::mat4 transform)
|
|
{
|
|
GeometryNode *gn = new GeometryNode(m, transform);
|
|
allocations.push_back(gn);
|
|
addMesh(gn);
|
|
return gn;
|
|
}
|
|
|
|
void BasicScene::addLight(Light* myLight)
|
|
{
|
|
lights.push_back(myLight);
|
|
}
|
|
|
|
void BasicScene::clearScene()
|
|
{
|
|
for(GeometryNode *gn : allocations)
|
|
delete gn;
|
|
allocations.clear();
|
|
geometry.clear();
|
|
lights.clear();
|
|
}
|
|
|
|
SceneIterator<Light*>* BasicScene::getLights()
|
|
{
|
|
return new ArrayIterator<Light*>(lights);
|
|
}
|
|
|
|
SceneIterator<GeometryNode*>* BasicScene::getGeometry()
|
|
{
|
|
return new ArrayIterator<GeometryNode*>(geometry);
|
|
}
|
|
|