diff --git a/src/engine.cpp b/src/engine.cpp index df7fb06..24f6a2a 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -99,7 +99,7 @@ unsigned int Engine::getDeltaTime() return m_timeStamp - m_lastTimeStamp; } -void Engine::setScene(std::string sceneName) +void Engine::setScene(SceneTree *scene) { - m_scene = RESOURCE_GET(SceneTree, sceneName); + m_scene = scene; } diff --git a/src/engine.h b/src/engine.h index 2b88cdc..ca01b74 100644 --- a/src/engine.h +++ b/src/engine.h @@ -23,7 +23,7 @@ public: unsigned int w = 800, unsigned int h = 600, bool isWindowed = true); - void setScene(std::string sceneName); + void setScene(SceneTree *scene); void initPhysics(); void start(); diff --git a/src/main.cpp b/src/main.cpp index a8806c3..34d7816 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,11 +9,10 @@ #include "tools/pathfinder.h" int main(){ - SceneTree scene("testScene"); - Engine engine; engine.createWindow("test"); - engine.setScene("testScene"); + SceneTree scene; // the opengl context must exist before the scene is created + engine.setScene(&scene); engine.start(); GraphNode n1 = GraphNode(); diff --git a/src/scenetree.cpp b/src/scenetree.cpp index 98e1ab4..809ff0d 100644 --- a/src/scenetree.cpp +++ b/src/scenetree.cpp @@ -1,27 +1,36 @@ #include "scenetree.h" #include "resourcemanager.h" +#include // Scene -SceneTree::SceneTree(std::string name) : - m_name(name), +SceneTree::SceneTree() : + Scene(), m_skybox(NULL) { - RESOURCE_ADD(this, SceneTree, m_name); + m_simplepipeline = new SimplePipeline(); + m_simplepipeline->setClearColor(glm::vec3(0.1f, 0.4f, 0.25f)); } SceneTree::~SceneTree() { - RESOURCE_ADD(NULL, SceneTree, m_name); + +} + +void SceneTree::setMainCamera(CameraNode *camera) +{ + m_simplepipeline->setCamera(camera); } SceneIterator* SceneTree::getLights() { + // TODO return NULL; } SceneIterator* SceneTree::getGeometry() { + // TODO return NULL; } @@ -38,9 +47,8 @@ void ContainerNode::update() sn->update(); } -void ContainerNode::addChild(const std::string &childName) +void ContainerNode::addChild(SceneNode* node) { - SceneNode* node = RESOURCE_GET(SceneNode, childName); if(node != NULL) { m_children.push_back(node); @@ -48,18 +56,15 @@ void ContainerNode::addChild(const std::string &childName) } } -void ContainerNode::removeChild(const std::string &childName) +void ContainerNode::removeChild(SceneNode* node) { - SceneNode* node = RESOURCE_GET(SceneNode, childName); if(node != NULL) { - for(unsigned int i=0; im_parent = NULL; - m_children[i] == m_children.back(); - m_children.pop_back(); + m_children.erase(it); break; } } diff --git a/src/scenetree.h b/src/scenetree.h index 5e7b5ca..60a52bc 100644 --- a/src/scenetree.h +++ b/src/scenetree.h @@ -7,6 +7,8 @@ #include "light.h" #include "resourcemanager.h" +class SimplePipeline; + /** * @brief The SceneNode class represents a class of the game * that will be updated or used for rendering every frame @@ -25,8 +27,16 @@ class ContainerNode : public SceneNode { public: virtual void update(); - void addChild(const std::string &childName); - void removeChild(const std::string &childName); + + /** + * @brief addChild adds node in the ContainerNode's children list + */ + void addChild(SceneNode* node); + + /** + * @brief removeChild removes the first iteration of node of the children list + */ + void removeChild(SceneNode* node); protected: std::vector m_children; }; @@ -42,7 +52,7 @@ class CameraNode : public Camera, SceneNode class SceneTree : public Scene { public: - SceneTree(std::string name); + SceneTree(); ~SceneTree(); virtual SceneIterator* getLights(); @@ -53,13 +63,13 @@ public: Texture* getSkybox() {return m_skybox;} void setSkybox(Texture* skybox) {m_skybox = skybox;} - void setMainCamera(const std::string &name) {m_camera = RESOURCE_GET(CameraNode, name);} - void addRootObject(const std::string &name) {m_root.addChild(name);} + void setMainCamera(CameraNode *camera); + void addRootObject(SceneNode *node) {m_root.addChild(node);} private: - std::string m_name; ContainerNode m_root; Texture* m_skybox; + SimplePipeline* m_simplepipeline; }; // Additionnal Nodes :