]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Scene.cc
preliminary physics, sound, hud
[chaz/yoink] / src / Moof / Scene.cc
index 6c2b42715f70c767d0a74516dec05a8965692d2f..5e44221a93391a03afacb4b4059fe30ca47ffa37 100644 (file)
@@ -36,7 +36,6 @@
 #include "Entity.hh"
 #include "Math.hh"
 #include "Mippleton.hh"
-#include "Octree.hh"
 #include "OpenGL.hh"
 #include "Scene.hh"
 #include "Serializable.hh"
@@ -46,7 +45,7 @@
 namespace Mf {
 
 
-class Scene::SceneImpl : public Mippleton<SceneImpl>
+class Scene::Impl : public Mippleton<Impl>
 {
        class Quad : public Entity
        {
@@ -99,6 +98,12 @@ class Scene::SceneImpl : public Mippleton<SceneImpl>
                                glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
                        }
 
+                       if (fog_)
+                       {
+                               glEnable(GL_FOG);
+                               glFogi(GL_FOG_MODE, GL_LINEAR);
+                       }
+
                        glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
                        tilemap_.bind();
 
@@ -108,6 +113,7 @@ class Scene::SceneImpl : public Mippleton<SceneImpl>
                        glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
 
                        glDisable(GL_BLEND);
+                       glDisable(GL_FOG);
                }
 
                bool isVisible(const Camera& cam) const
@@ -145,8 +151,8 @@ class Scene::SceneImpl : public Mippleton<SceneImpl>
        }
 
 public:
-       SceneImpl(const std::string& name) :
-               Mippleton<SceneImpl>(name)
+       Impl(const std::string& name) :
+               Mippleton<Impl>(name)
        {
                loadFromFile();
        }
@@ -380,7 +386,6 @@ public:
                                Quad* quad = new Quad(quadVertices, texture, indices[h][w]);
                                boost::shared_ptr<Quad> quadPtr(quad);
 
-                               //objects.push_back(quadPtr);
                                octree->insert(quadPtr);
                        }
                }
@@ -392,39 +397,36 @@ public:
                std::map<std::string,SerializablePtr> rootObj;
                std::map<std::string,SerializablePtr>::iterator it;
 
-               if (!root->get(rootObj))
-               {
-                       std::cerr << "error loading scene billboard object" << std::endl;
-                       return;
-               }
-
                Tilemap::Index  index = 0;
                long                    width = 1;
                bool                    blending = false;
                bool                    fog = false;
 
-               if ((it = rootObj.find("tile")) != rootObj.end())
+               if (root->get(rootObj))
                {
-                       long value;
-                       if ((*it).second->get(value))
+                       if ((it = rootObj.find("tile")) != rootObj.end())
                        {
-                               index = Tilemap::Index(value);
+                               long value;
+                               if ((*it).second->get(value))
+                               {
+                                       index = Tilemap::Index(value);
+                               }
                        }
-               }
 
-               if ((it = rootObj.find("u_scale")) != rootObj.end())
-               {
-                       (*it).second->get(width);
-               }
+                       if ((it = rootObj.find("u_scale")) != rootObj.end())
+                       {
+                               (*it).second->get(width);
+                       }
 
-               if ((it = rootObj.find("blend")) != rootObj.end())
-               {
-                       (*it).second->get(blending);
-               }
+                       if ((it = rootObj.find("blend")) != rootObj.end())
+                       {
+                               (*it).second->get(blending);
+                       }
 
-               if ((it = rootObj.find("fog")) != rootObj.end())
-               {
-                       (*it).second->get(fog);
+                       if ((it = rootObj.find("fog")) != rootObj.end())
+                       {
+                               (*it).second->get(fog);
+                       }
                }
 
 
@@ -461,7 +463,6 @@ public:
 
                        boost::shared_ptr<Quad> quadPtr(quad);
 
-                       //objects.push_back(quad_Ptr);
                        octree->insert(quadPtr);
                }
        }
@@ -469,7 +470,7 @@ public:
 
        void loadFromFile()
        {
-               std::string filePath = Scene::getPathToResource(getName());
+               std::string filePath = Scene::getPath(getName());
 
                Deserializer    deserializer(filePath, true);
                SerializablePtr root = deserializer.deserialize();
@@ -497,67 +498,50 @@ public:
                        return;
                }
 
-               //OctreeNode rootNode(maximumBounds);
+               // create the tree to store the quads
                octree = OctreePtr(new Octree(maximumBounds));
 
                if ((it = rootObj.find("instructions")) != rootObj.end())
                {
                        loadInstructions((*it).second);
                }
+
+               octree->sort();
        }
 
 
        void draw(Scalar alpha, const Camera& cam) const
        {
-               //QuadVector::const_iterator it;
-
                glEnableClientState(GL_VERTEX_ARRAY);
                glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 
                octree->drawIfVisible(alpha, cam);
 
-               //int objectsDrawn = 0;
+               //glDisableClientState(GL_VERTEX_ARRAY);
+               //glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 
-               //for (it = objects.begin(); it != objects.end(); ++it)
-               //{
-                       //if ((*it)->isVisible(cam))
-                       //{
-                               ////std::cout << "draw object";
-                               //(*it)->draw();
+               //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
 
-                               //objectsDrawn++;
-                       //}
-               //}
+               //Texture::resetBind();
+               //glColor3f(0.0f, 1.0f, 0.0f);
+               //playfieldBounds.draw();
+               //glColor3f(0.0f, 0.0f, 1.0f);
+               //maximumBounds.draw();
 
-               //std::cout << objectsDrawn << std::endl;
-
-               glDisableClientState(GL_VERTEX_ARRAY);
-               glDisableClientState(GL_TEXTURE_COORD_ARRAY);
-
-               glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
-
-               Texture::resetBind();
-               glColor3f(0.0f, 1.0f, 0.0f);
-               playfieldBounds.draw();
-               glColor3f(0.0f, 0.0f, 1.0f);
-               maximumBounds.draw();
-
-               glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+               //glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
        }
 
 
        Aabb playfieldBounds;
        Aabb maximumBounds;
 
-       //typedef std::vector< boost::shared_ptr<Quad> > QuadVector;
-       //QuadVector objects;
        OctreePtr octree;
 };
 
 
 Scene::Scene(const std::string& name) :
        // pass through
-       impl_(Scene::SceneImpl::retain(name), &Scene::SceneImpl::release) {}
+       impl_(Scene::Impl::retain(name), &Scene::Impl::release) {}
 
 
 void Scene::draw(Scalar alpha, const Camera& cam) const
@@ -573,14 +557,20 @@ void Scene::refresh()
 }
 
 
+OctreePtr Scene::getOctree() const
+{
+       // pass through
+       return impl_->octree;
+}
+
 /**
  * Specialized search location for scene files.  They can be found in the
  * "scenes" subdirectory of any of the searched directories.
  */
 
-std::string Scene::getPathToResource(const std::string& name)
+std::string Scene::getPath(const std::string& name)
 {
-       return Resource::getPathToResource("scenes/" + name + ".json");
+       return Resource::getPath("scenes/" + name + ".json");
 }
 
 
This page took 0.024859 seconds and 4 git commands to generate.