From 827f01e0ede01a7dd640c8055f1a169cb85e32f9 Mon Sep 17 00:00:00 2001 From: John Tsiombikas Date: Wed, 10 Jan 2018 09:08:39 +0200 Subject: [PATCH] adding exhibit data, starting with descriptions --- src/exhibit.cc | 15 +++++++++++++++ src/exhibit.h | 22 ++++++++++++++++++++++ src/exman.cc | 19 +++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/src/exhibit.cc b/src/exhibit.cc index d76b291..eaa2251 100644 --- a/src/exhibit.cc +++ b/src/exhibit.cc @@ -11,6 +11,8 @@ public: ExhibitPriv(); }; + +// selection ExSelection::ExSelection(Exhibit *ex) { this->ex = ex; @@ -23,11 +25,24 @@ ExSelection::operator bool() const return ex != 0; } +// Exhibit data +ExData::ExData() +{ + voice = 0; +} + +ExData::~ExData() +{ + delete voice; +} + +// private data for each exhibit type ExhibitPriv::ExhibitPriv() { orig_node = 0; } +// exhibit class Exhibit::Exhibit() { priv = new ExhibitPriv; diff --git a/src/exhibit.h b/src/exhibit.h index 63b2898..0f98b05 100644 --- a/src/exhibit.h +++ b/src/exhibit.h @@ -1,9 +1,11 @@ #ifndef EXHIBIT_H_ #define EXHIBIT_H_ +#include #include #include "object.h" #include "geom.h" +#include "audio/stream.h" class Exhibit; class ExhibitPriv; @@ -28,6 +30,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 @@ -38,6 +58,8 @@ private: ExhibitPriv *priv; public: + std::vector data; + Exhibit(); virtual ~Exhibit(); diff --git a/src/exman.cc b/src/exman.cc index 900d860..6517b65 100644 --- a/src/exman.cc +++ b/src/exman.cc @@ -73,6 +73,25 @@ bool ExhibitManager::load(MetaScene *mscn, const char *fname) continue; } + const char *desc = ts_get_attr_str(node, "description"); + const char *voice = ts_get_attr_str(node, "voiceover"); + if(desc || voice) { + ExData exd; + + if(desc) { + exd.text = std::string(desc); + } + if(voice) { + exd.voice = new OggVorbisStream; + if(!exd.voice->open(voice)) { + error_log("failed to open voiceover: %s\n", voice); + delete exd.voice; + exd.voice = 0; + } + } + ex->data.push_back(exd); + } + ex->set_node(snode); items.push_back(ex); } -- 1.7.10.4