ExhibitSlots and exhibit placement (initial)
[laserbrain_demo] / src / exhibit.h
index 63b2898..fd1d77b 100644 (file)
@@ -1,12 +1,14 @@
 #ifndef EXHIBIT_H_
 #define EXHIBIT_H_
 
+#include <string>
 #include <gmath/gmath.h>
 #include "object.h"
 #include "geom.h"
+#include "audio/stream.h"
 
 class Exhibit;
-class ExhibitPriv;
+class ExhibitSlot;
 class Scene;
 
 enum {
@@ -16,11 +18,14 @@ enum {
 
 class ExSelection {
 public:
+       static ExSelection null;        // null selection
+
        Exhibit *ex;
        void *obj;
        void *data;
        Ray selray;
        Sphere selsphere;
+       float dist;
        unsigned int validmask;
 
        ExSelection(Exhibit *ex = 0);
@@ -28,6 +33,24 @@ public:
        operator bool() const;
 };
 
+enum {
+       EXDATA_INFO,
+       EXDATA_VIDEO
+};
+
+class ExData {
+public:
+       int type;
+
+       std::string text;
+       AudioStream *voice;
+       // TODO: video stream
+
+       ExData();
+       ~ExData();
+};
+
+
 /* TODO
 - select me aktina kai select me sfaira, epistrefei Selection
 - hover me aktina kai hover me sfaira
@@ -35,9 +58,12 @@ public:
  */
 class Exhibit : public Object {
 private:
-       ExhibitPriv *priv;
+       SceneNode *orig_parent;
 
 public:
+       ExhibitSlot *prev_slot;
+       std::vector<ExData> data;
+
        Exhibit();
        virtual ~Exhibit();
 
@@ -49,11 +75,13 @@ public:
        virtual ExSelection select(const Ray &ray) const;
        virtual ExSelection select(const Sphere &sph) const;
 
-       virtual void update(float dt = 0.0f);
+       virtual void update(float dt = 0.0f) override;
 
        virtual void pre_draw() const;
-       virtual void draw() const;
+       virtual void draw() const override;
        virtual void post_draw() const;
+
+       virtual const AABox &get_aabox() const override;
 };
 
 #endif // EXHIBIT_H_