#ifndef METASCENE_H_
#define METASCENE_H_
+#include <vector>
+#include <map>
#include "scene.h"
#include "mesh.h"
+#include "geom.h"
+#include "audio/ovstream.h"
+#include "datamap.h"
+
+
+struct FlatMirror {
+ Plane plane; // plane in local coordinates (original)
+ Plane wplane; // world coords plane (derived, identical to plane if node == 0)
+ float reflect;
+ std::vector<Object*> objects;
+ SceneNode *node;
+
+ FlatMirror *next;
+};
+
class MetaScene {
public:
- SceneSet *sceneman;
- TextureSet *texman;
+ DataMap datamap;
std::vector<Scene*> scenes;
Vec3 start_pos;
Quat start_rot;
- MetaScene(SceneSet *sman, TextureSet *tman);
+ std::map<Scene*, void*> scndata;
+
+ FlatMirror *mirrors;
+ std::map<Object*, FlatMirror*> objmirror;
+
+ AudioStream *music;
+
+ MetaScene();
~MetaScene();
bool load(const char *fname);
+ bool scene_loaded(Scene *scn);
void update(float dt);
void draw() const;
+
+ /* helper functions which end up calling the corresponding Scene functions
+ * for every scene
+ */
+ SceneNode *find_node(const char *name) const;
+ SceneNode *match_node(const char *qstr) const;
+ std::list<SceneNode*> match_nodes(const char *qstr) const;
+
+ Scene *extract_nodes(const char *qstr);
+
+ int calc_mirror_planes();
};
#endif // METASCENE_H_