#ifndef SCENETREE_H #define SCENETREE_H #include #include #include #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* getLights(); virtual SceneIterator* getGeometry(); virtual void getMeshTypes(std::vector &meshTypes); virtual void getLightTypes(std::vector &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 m_lights; std::vector m_geometries; std::unordered_set m_meshTypes; std::unordered_set m_lightTypes; bool m_shaderRefreshRequired; Camera* m_camera; }; #endif // SCENETREE_H