X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=blobdiff_plain;f=src%2Fexhibit.cc;h=8403550b9a8e2c69c120b5dc0e9fe928ffdbcb19;hp=444fc400bbac8bc674cc66d897a7cff381800fb3;hb=91c5d07b779f24afec373047afe401b8811811c7;hpb=cddee551d9bc9ec58e15aeb673f7e8fcf3c163ce diff --git a/src/exhibit.cc b/src/exhibit.cc index 444fc40..8403550 100644 --- a/src/exhibit.cc +++ b/src/exhibit.cc @@ -1,12 +1,13 @@ #include "exhibit.h" #include "snode.h" +#include "scene.h" +#include "geomdraw.h" +#include "app.h" -class ExhibitPriv { - Vec3 orig_pos; - Quat orig_rot; - SceneNode *orig_node; -}; +ExSelection ExSelection::null; + +// selection ExSelection::ExSelection(Exhibit *ex) { this->ex = ex; @@ -19,25 +20,50 @@ ExSelection::operator bool() const return ex != 0; } +// Exhibit data +ExData::ExData() +{ + voice = 0; +} + +ExData::~ExData() +{ + delete voice; +} + +// exhibit class Exhibit::Exhibit() { - priv = new ExhibitPriv; - priv->orig_node = 0; + orig_parent = 0; + prev_slot = 0; } Exhibit::~Exhibit() { - delete priv; +} + +void Exhibit::set_node(SceneNode *node) +{ + 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) @@ -62,5 +88,17 @@ void Exhibit::post_draw() const if(node) { glMatrixMode(GL_MODELVIEW); glPopMatrix(); + + if(exsel_hover.ex == this) { + const AABox &bvol = get_aabox(); + draw_geom_object(&bvol); + } } } + + +const AABox &Exhibit::get_aabox() const +{ + aabb = node->get_bounds(); + return aabb; +}