#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 update(float dt = 0.0f);
- virtual void draw() const;
+ virtual const AABox &get_aabox() const override;
};
#endif // EXHIBIT_H_