#ifndef MSP_DEMOSCENE_STAGE_H_
#define MSP_DEMOSCENE_STAGE_H_
+#include <msp/gl/camera.h>
#include <msp/gl/pipeline.h>
-#include "cameracontrol.h"
#include "action.h"
+#include "demo.h"
-struct Stage
+namespace Msp {
+namespace DemoScene {
+
+class Stage
{
+public:
class UseInView: public Action
{
+ public:
+ class Loader: public Msp::DataFile::DerivedObjectLoader<UseInView, Action::Loader>
+ {
+ public:
+ Loader(UseInView &, Demo &);
+
+ private:
+ void stage(const std::string &);
+ void view(const std::string &);
+ };
+
private:
- Msp::GL::View &view;
- Stage &stage;
+ Msp::GL::View *view;
+ Stage *stage;
public:
+ UseInView();
UseInView(Msp::GL::View &, Stage &);
- virtual void validate() const { }
+ virtual void validate() const;
+
+ virtual void start(float, float);
+ };
+
+ class SetCamera: public Action
+ {
+ public:
+ class Loader: public Msp::DataFile::DerivedObjectLoader<SetCamera, Action::Loader>
+ {
+ public:
+ Loader(SetCamera &, Demo &);
+
+ private:
+ void camera(const std::string &);
+ void stage(const std::string &);
+ };
+
+ private:
+ Stage *stage;
+ const Msp::GL::Camera *camera;
+
+ public:
+ SetCamera();
+ SetCamera(Stage &, const Msp::GL::Camera &);
+
+ virtual void validate() const;
virtual void start(float, float);
};
+protected:
Msp::GL::Pipeline *pipeline;
- CameraControl camera_control;
+ Msp::GL::Camera camera;
+ Msp::GL::View *last_view;
+public:
Stage();
~Stage();
+
+ virtual void add_things(Demo::ThingMap &, const std::string &);
+
+ void set_camera(const Msp::GL::Camera &);
+ Msp::GL::Camera &get_camera() { return camera; }
+
+protected:
+ virtual void create_pipeline(Msp::GL::View &) = 0;
};
+} // namespace DemoScene
+} // namespace Msp
+
#endif