]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Octree.hh
considerable refactoring
[chaz/yoink] / src / Moof / Octree.hh
index d896844f0379a4ab7ca1cebe32d52cb5a719a775..774eece11c56cb34236a82d2b23ce6f501765351 100644 (file)
@@ -51,7 +51,7 @@ class Camera;
 
 struct OctreeNode : public Entity
 {
-       std::list<EntityPtr> objects;
+       std::list<EntityP> objects;
 
        OctreeNode()
        {
@@ -69,28 +69,28 @@ struct OctreeNode : public Entity
 
        void draw(Scalar alpha) const
        {
-               std::list<EntityPtr>::const_iterator it;
+               std::list<EntityP>::const_iterator it;
 
                for (it = objects.begin(); it != objects.end(); ++it)
                {
                        (*it)->draw(alpha);
                }
 
-               //if (!objects.empty())
-                       //aabb_.draw(); // temporary
+               if (!objects.empty())
+                       aabb_.draw(); // temporary
        }
 
        void drawIfVisible(Scalar alpha, const Camera& cam) const
        {
-               std::list<EntityPtr>::const_iterator it;
+               std::list<EntityP>::const_iterator it;
 
                for (it = objects.begin(); it != objects.end(); ++it)
                {
                        (*it)->drawIfVisible(alpha, cam);
                }
 
-               //if (!objects.empty())
-                       //aabb_.draw();
+               if (!objects.empty())
+                       aabb_.draw();
        }
 
 
@@ -105,7 +105,7 @@ struct OctreeNode : public Entity
        }
 
 
-       static bool compareZOrder(EntityPtr a, EntityPtr b)
+       static bool compareZOrder(EntityP a, EntityP b)
        {
                return a->getSphere().point[2] < b->getSphere().point[2];
        }
@@ -118,21 +118,40 @@ struct OctreeNode : public Entity
 };
 
 
+class Octree;
+typedef boost::shared_ptr<Octree> OctreeP;
+
 class Octree
 {
+       stlplus::ntree<OctreeNode>::iterator
+               insert(stlplus::ntree<OctreeNode>::iterator node, EntityP entity);
+       
+       void addChild(stlplus::ntree<OctreeNode>::iterator node, int index);
+
+       void draw(stlplus::ntree<OctreeNode>::iterator node, Scalar alpha);
+       void drawIfVisible(stlplus::ntree<OctreeNode>::iterator node,
+                       Scalar alpha, const Camera& cam);
+
+       stlplus::ntree<OctreeNode> tree_;
+
 public:
 
+       inline static OctreeP alloc(const OctreeNode& rootNode)
+       {
+               return OctreeP(new Octree(rootNode));
+       }
+
        explicit Octree(const OctreeNode& rootNode)
        {
                tree_.insert(rootNode);
        }
 
-       stlplus::ntree<OctreeNode>::iterator insert(EntityPtr entity)
+       stlplus::ntree<OctreeNode>::iterator insert(EntityP entity)
        {
                return insert(tree_.root(), entity);
        }
 
-       stlplus::ntree<OctreeNode>::iterator reinsert(EntityPtr entity,
+       stlplus::ntree<OctreeNode>::iterator reinsert(EntityP entity,
                        stlplus::ntree<OctreeNode>::iterator node);
 
        void drawIfVisible(Scalar alpha, const Camera& cam)
@@ -141,21 +160,8 @@ public:
        }
 
        void sort();
-
-private:
-       stlplus::ntree<OctreeNode>::iterator insert(stlplus::ntree<OctreeNode>::iterator node, EntityPtr entity);
-       
-       void addChild(stlplus::ntree<OctreeNode>::iterator node, int index);
-
-       void draw(stlplus::ntree<OctreeNode>::iterator node, Scalar alpha);
-       void drawIfVisible(stlplus::ntree<OctreeNode>::iterator node,
-                       Scalar alpha, const Camera& cam);
-
-       stlplus::ntree<OctreeNode> tree_;
 };
 
-typedef boost::shared_ptr<Octree> OctreePtr;
-
 
 } // namespace Mf
 
This page took 0.019387 seconds and 4 git commands to generate.