X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=blobdiff_plain;f=src%2Fexhibit.cc;h=b598b75426322c1117ca529d6d895c119fb7ca5a;hp=e98a2ba18c3202db164eaa62aae1467ec68a3bbd;hb=6ecd4ecfa020964e4250bf9322c1a26ac4073b76;hpb=14fd44f4dfec922dae20ccf1225bd1fdb5864ab9 diff --git a/src/exhibit.cc b/src/exhibit.cc index e98a2ba..b598b75 100644 --- a/src/exhibit.cc +++ b/src/exhibit.cc @@ -1,13 +1,11 @@ #include "exhibit.h" #include "snode.h" +#include "scene.h" -class ExhibitPriv { -public: - Vec3 orig_pos; - Quat orig_rot; - SceneNode *orig_node; -}; +ExSelection ExSelection::null; + +// selection ExSelection::ExSelection(Exhibit *ex) { this->ex = ex; @@ -20,48 +18,64 @@ ExSelection::operator bool() const return ex != 0; } -Exhibit::Exhibit() +// Exhibit data +ExData::ExData() { - priv = new ExhibitPriv; - priv->orig_node = 0; + voice = 0; } -Exhibit::~Exhibit() +ExData::~ExData() { - delete priv; + delete voice; } -ExSelection Exhibit::select(const Ray &ray) const +// exhibit class +Exhibit::Exhibit() { - return ExSelection(0); + orig_parent = 0; + prev_slot = 0; } -ExSelection Exhibit::select(const Sphere &sph) const +Exhibit::~Exhibit() { - return ExSelection(0); } -void Exhibit::update(float dt) +void Exhibit::set_node(SceneNode *node) { + this->node = node; + orig_parent = node->get_parent(); } -void Exhibit::pre_draw() const +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; +} + +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; }