SparrowEngine/src/scene/scenetree.h

64 lines
1.7 KiB
C++

#ifndef SCENETREE_H
#define SCENETREE_H
#include <vector>
#include <string>
#include <unordered_set>
#include "SparrowRenderer/scene.h"
#include "containernode.h"
#include "engine.h"
class Light;
class CameraNode;
/**
* @brief The SceneNode class represents a class of the game
* that will be updated or used for rendering every frame
*/
class SceneTree : public Scene
{
public:
~SceneTree();
virtual SceneIterator<Light*>* getLights();
virtual SceneIterator<GeometryNode*>* getGeometry();
virtual void getMeshTypes(std::vector<unsigned int> &meshTypes);
virtual void getLightTypes(std::vector<unsigned int> &lightTypes);
void update();
void setMainCamera(Camera *camera);
Camera* getCamera() const { return m_camera; }
ContainerNode* getRootObject(){return &m_root;}
btDiscreteDynamicsWorld* getPhysics() const {return m_world;}
void initPhysics();
void registerMeshType(unsigned int meshType);
void registerLightType(unsigned int lightType);
void addToIndex(SceneNode* node);
void removeFromIndex(SceneNode *node);
void updateShaders();
Engine& getEngine() { return m_engine; }
private:
// A SceneTree can only be constructed by the engine by using Engine::createScene()
//friend SceneTree* Engine::createScene();
friend void Engine::createScene(std::string scene_name);
SceneTree(Engine &engine);
Engine &m_engine;
ContainerNode m_root;
btDiscreteDynamicsWorld* m_world;
std::vector<Light*> m_lights;
std::vector<GeometryNode*> m_geometries;
std::unordered_set<unsigned int> m_meshTypes;
std::unordered_set<unsigned int> m_lightTypes;
bool m_shaderRefreshRequired;
Camera* m_camera;
};
#endif // SCENETREE_H