
#ifndef __WFX_SCENE_SCENEGRAPHVISITOR_H__
#define __WFX_SCENE_SCENEGRAPHVISITOR_H__

#include <WFX/WFXIncludes.h>
#include <WFX/scene/TriMesh.h>
#include <WFX/scene/OctreeNode.h>
#include <WFX/math/Sphere.h>
#include <WFX/math/Cube.h>

namespace WFX {

    namespace scene {

        /**
         * Abstract base class for any class that needs to traverse the 
         * SceneGraph. Each SceneGraphVisitor specifies whether it only
         * wants to visit visible nodes
         */
        class SceneGraphVisitor {
            public:
                /** Ctor */
                SceneGraphVisitor() {}

                /** visits a Node */
                virtual void visitNode(Node& n) = 0;
                /** visits a TriMesh */
                virtual void visitTriMesh(TriMesh& m) = 0;
                /** visits an Octree Node */
                virtual void visitOctreeNode(OctreeNode& o) = 0;
                /** visit a Sphere */
                virtual void visitSphere(WFX::math::Sphere& s) {}
                /** visit a Cube */
                virtual void visitCube(WFX::math::Cube& c) {}


            protected:
            
            private:

        };

    }

}


#endif //include guard


