X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2Fmoof%2Fmesh.hh;h=0fbc3cc5b303a526f6aa99f0b19ec075fadeb6e8;hp=1400cdd2f920680cb2b2b06a9046807a581dc37a;hb=6f1b787a10d8ab1a3117a4b8c004dd2d90599608;hpb=1fb5f7e36af1a4de040bc2989133703b0e0d4a9f diff --git a/src/moof/mesh.hh b/src/moof/mesh.hh index 1400cdd..0fbc3cc 100644 --- a/src/moof/mesh.hh +++ b/src/moof/mesh.hh @@ -18,11 +18,14 @@ */ #include +#include +#include #include #include +#include -#include +#include #include #include #include @@ -31,7 +34,10 @@ 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 triangles; std::vector triangles_uv; - - std::vector quads; - std::vector quads_uv; - - - void draw(scalar alpha = SCALAR(0.0)) const; }; class object; typedef boost::shared_ptr object_ptr; + typedef boost::weak_ptr 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 faces; std::vector kids; - object_ptr parent; + std::map 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);