ExhibitSlots and exhibit placement (initial)
[laserbrain_demo] / src / exhibit.cc
index c525f77..8403550 100644 (file)
@@ -2,15 +2,9 @@
 #include "snode.h"
 #include "scene.h"
 #include "geomdraw.h"
+#include "app.h"
 
-class ExhibitPriv {
-public:
-       Vec3 orig_pos;
-       Quat orig_rot;
-       SceneNode *orig_node;
-
-       ExhibitPriv();
-};
+ExSelection ExSelection::null;
 
 
 // selection
@@ -37,38 +31,39 @@ ExData::~ExData()
        delete voice;
 }
 
-// private data for each exhibit type
-ExhibitPriv::ExhibitPriv()
-{
-       orig_node = 0;
-}
-
 // exhibit class
 Exhibit::Exhibit()
 {
-       priv = new ExhibitPriv;
+       orig_parent = 0;
+       prev_slot = 0;
 }
 
 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();
+       this->node = node;
+       orig_parent = node->get_parent();
 }
 
 ExSelection Exhibit::select(const Ray &ray) const
 {
-       return ExSelection(0);
+       ExSelection sel;
+       HitPoint hit;
+       if(get_aabox().intersect(ray, &hit)) {
+               sel.ex = (Exhibit*)this;
+               sel.selray = ray;
+               sel.dist = hit.dist;
+               sel.validmask = EXSEL_RAY;
+       }
+       return sel;
 }
 
 ExSelection Exhibit::select(const Sphere &sph) const
 {
-       return ExSelection(0);
+       return ExSelection(0);  // TODO
 }
 
 void Exhibit::update(float dt)
@@ -94,10 +89,10 @@ void Exhibit::post_draw() const
                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);
+               if(exsel_hover.ex == this) {
+                       const AABox &bvol = get_aabox();
+                       draw_geom_object(&bvol);
+               }
        }
 }