fixed bounding volume issue
[laserbrain_demo] / src / exhibit.cc
index 8653343..c525f77 100644 (file)
@@ -1,18 +1,74 @@
 #include "exhibit.h"
 #include "snode.h"
+#include "scene.h"
+#include "geomdraw.h"
 
+class ExhibitPriv {
+public:
+       Vec3 orig_pos;
+       Quat orig_rot;
+       SceneNode *orig_node;
+
+       ExhibitPriv();
+};
+
+
+// selection
+ExSelection::ExSelection(Exhibit *ex)
+{
+       this->ex = ex;
+       obj = data = 0;
+       validmask = 0;
+}
+
+ExSelection::operator bool() const
+{
+       return ex != 0;
+}
+
+// Exhibit data
+ExData::ExData()
+{
+       voice = 0;
+}
+
+ExData::~ExData()
+{
+       delete voice;
+}
+
+// private data for each exhibit type
+ExhibitPriv::ExhibitPriv()
+{
+       orig_node = 0;
+}
+
+// exhibit class
 Exhibit::Exhibit()
 {
+       priv = new ExhibitPriv;
+}
+
+Exhibit::~Exhibit()
+{
+       delete priv;
+}
+
+void Exhibit::set_node(SceneNode *node)
+{
+       this->node = priv->orig_node = node;
+       priv->orig_pos = node->get_position();
+       priv->orig_rot = node->get_rotation();
 }
 
-void *Exhibit::select(const Ray &ray) const
+ExSelection Exhibit::select(const Ray &ray) const
 {
-       return 0;       // TODO
+       return ExSelection(0);
 }
 
-void *Exhibit::select(const Sphere &sph) const
+ExSelection Exhibit::select(const Sphere &sph) const
 {
-       return 0;       // TODO
+       return ExSelection(0);
 }
 
 void Exhibit::update(float dt)
@@ -37,5 +93,17 @@ void Exhibit::post_draw() const
        if(node) {
                glMatrixMode(GL_MODELVIEW);
                glPopMatrix();
+
+               const AABox &bvol = get_aabox();
+               debug_log("bvol (%g %g %g) -> (%g %g %g)\n", bvol.min.x, bvol.min.y, bvol.min.z,
+                               bvol.max.x, bvol.max.y, bvol.max.z);
+               draw_geom_object(&bvol);
        }
 }
+
+
+const AABox &Exhibit::get_aabox() const
+{
+       aabb = node->get_bounds();
+       return aabb;
+}