#include "exhibit.h"
#include "snode.h"
+#include "scene.h"
+ExSelection ExSelection::null;
+
+
+// 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;
+}
+
+// exhibit class
Exhibit::Exhibit()
{
+ orig_parent = 0;
+ prev_slot = 0;
}
-void *Exhibit::select(const Ray &ray) const
+Exhibit::~Exhibit()
{
- return 0; // TODO
}
-void *Exhibit::select(const Sphere &sph) const
+void Exhibit::set_node(SceneNode *node)
{
- return 0; // TODO
+ this->node = node;
+ orig_parent = node->get_parent();
}
-void Exhibit::update(float dt)
+ExSelection Exhibit::select(const Ray &ray) const
{
+ 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;
}
-void Exhibit::pre_draw() const
+ExSelection Exhibit::select(const Sphere &sph) const
{
- if(node) {
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glMultMatrixf(node->get_matrix()[0]);
+ ExSelection sel;
+ if(collision_sphere_aabox(sph, get_aabox())) {
+ sel.ex = (Exhibit*)this;
+ sel.selsphere = sph;
+ sel.validmask = EXSEL_SPHERE;
}
+ return sel;
}
-void Exhibit::draw() const
+void Exhibit::update(float dt)
{
}
-void Exhibit::post_draw() const
+const AABox &Exhibit::get_aabox() const
{
- if(node) {
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
- }
+ aabb = node->get_bounds();
+ return aabb;
}