]> Dogcows Code - chaz/yoink/blobdiff - src/moof/mesh.hh
mesh and other random adjustments
[chaz/yoink] / src / moof / mesh.hh
index 1400cdd2f920680cb2b2b06a9046807a581dc37a..0fbc3cc5b303a526f6aa99f0b19ec075fadeb6e8 100644 (file)
  */
 
 #include <iostream>
+#include <map>
+#include <vector>
 
 #include <boost/noncopyable.hpp>
 #include <boost/shared_ptr.hpp>
+#include <boost/weak_ptr.hpp>
 
-#include <moof/drawable.hh>
+#include <moof/entity.hh>
 #include <moof/image.hh>
 #include <moof/math.hh>
 #include <moof/resource.hh>
 namespace moof {
 
 
-class mesh : public boost::noncopyable, public drawable
+class script;
+
+
+class mesh : public boost::noncopyable, public entity
 {
 public:
 
@@ -49,83 +55,42 @@ public:
                std::string     name;
 
                vector4         diffuse;
-               vector3         ambient;
-               vector3         emissive;
-               vector3         specular;
+               vector4         ambient;
+               vector4         emissive;
+               vector4         specular;
                scalar          shininess;
        };
 
 
-       //typedef vector3 triangle[3];
-       //typedef vector2 triangle_uv[3];
-       //typedef vector3 quad[4];
-       //typedef vector2 quad_uv[4];
-
-       //struct triangle
-       //{
-               //vector3 verts[3];
-               //vector3& operator [] (int i) { return verts[i]; }
-               //const vector3& operator [] (int i) const { return verts[i]; }
-       //};
-
-       //struct triangle_uv
-       //{
-               //vector2 verts[3];
-               //vector2& operator [] (int i) { return verts[i]; }
-               //const vector2& operator [] (int i) const { return verts[i]; }
-       //};
-
-
-       //struct quad
-       //{
-               //vector3 verts[4];
-               //vector3& operator [] (int i) { return verts[i]; }
-               //const vector3& operator [] (int i) const { return verts[i]; }
-       //};
-
-
-       //struct quad_uv
-       //{
-               //vector2 verts[4];
-               //vector2& operator [] (int i) { return verts[i]; }
-               //const vector2& operator [] (int i) const { return verts[i]; }
-       //};
-
-
        void set_material(int index) const;
        void set_material(const material& material) const;
 
-       struct material_group : public drawable
+       struct material_group
        {
-               material_group() {}
-
                std::vector<unsigned>   triangles;
                std::vector<vector2>    triangles_uv;
-
-               std::vector<unsigned>   quads;
-               std::vector<vector2>    quads_uv;
-
-
-               void draw(scalar alpha = SCALAR(0.0)) const;
        };
 
 
        class object;
        typedef boost::shared_ptr<object> object_ptr;
+       typedef boost::weak_ptr<object>   object_weakptr;
 
        struct object
        {
-               object() :
+               object(const mesh& m) :
+                       mesh(m),
                        texrep(SCALAR(1.0), SCALAR(1.0)) {}
 
-               static object_ptr alloc()
+               static object_ptr alloc(const mesh& m)
                {
-                       return object_ptr(new object);
+                       return object_ptr(new object(m));
                }
 
+               void draw(scalar alpha = SCALAR(0.0), bool recurse = true) const;
 
-               void draw(const mesh& mesh, scalar alpha = SCALAR(0.0)) const;
 
+               const moof::mesh&                       mesh;
 
                std::string                                     name;
                std::string                                     data;
@@ -138,10 +103,25 @@ public:
                std::vector<material_group>     faces;
 
                std::vector<object_ptr>         kids;
-               object_ptr                                      parent;
+               std::map<std::string,object_ptr>                kids_byname;
+               object_weakptr                                  parent;
        };
 
 
+       object_ptr operator [] (unsigned index) const
+       {
+               return objects_[index];
+       }
+
+
+       /**
+        * Import script bindings for the mesh class.
+        * \param The script.
+        * \param The name of the namespace to import to.
+        */
+       static void import(script& script, const std::string& nspace = "");
+
+
 private:
 
        void import(std::istream& stream);
This page took 0.019382 seconds and 4 git commands to generate.