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);
}