ExhibitSlots and exhibit placement (initial)
[laserbrain_demo] / src / exhibit.h
index c607fdb..fd1d77b 100644 (file)
@@ -1,29 +1,87 @@
 #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 ExhibitSlot;
+class Scene;
+
+enum {
+       EXSEL_RAY = 1,
+       EXSEL_SPHERE = 2
+};
+
+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);
+
+       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
 - move me selection, origin, direction kai rotation (?)
  */
-
 class Exhibit : public Object {
+private:
+       SceneNode *orig_parent;
+
 public:
+       ExhibitSlot *prev_slot;
+       std::vector<ExData> data;
+
        Exhibit();
-       virtual ~Exhibit() = default;
+       virtual ~Exhibit();
 
        Exhibit(const Exhibit&) = delete;
        Exhibit &operator =(const Exhibit &) = delete;
 
-       virtual void *select(const Ray &ray) const;
-       virtual void *select(const Sphere &sph) const;
+       virtual void set_node(SceneNode *node);
+
+       virtual ExSelection select(const Ray &ray) const;
+       virtual ExSelection select(const Sphere &sph) const;
+
+       virtual void update(float dt = 0.0f) override;
+
+       virtual void pre_draw() const;
+       virtual void draw() const override;
+       virtual void post_draw() const;
 
-       virtual void update(float dt = 0.0f);
-       virtual void draw() const;
+       virtual const AABox &get_aabox() const override;
 };
 
 #endif // EXHIBIT_H_