]> git.tdb.fi Git - libs/demoscene.git/blobdiff - source/demo.cpp
Allow stages to define actions
[libs/demoscene.git] / source / demo.cpp
index 41e9641510b3a052af761a6e688d2acb963e6a64..6579b8cb7b3b6a905e053266177f4b15e5c2a4c0 100644 (file)
@@ -1,17 +1,24 @@
 #include <msp/time/utils.h>
 #include "demo.h"
+#include "stage.h"
 
 using namespace std;
-using namespace Msp;
+
+namespace Msp {
+namespace DemoScene {
 
 Demo::Demo(Graphics::Window &window, Graphics::GLContext &gl_ctx, DataFile::Collection &r):
        resources(r),
        view(window, gl_ctx),
+       anim_action(anim_player),
        music_source(0),
        streamer(0),
        music_io(0),
        music_decoder(0)
 {
+       things["window"] = static_cast<GL::View *>(&view);
+
+       sequencer.add_static_action(anim_action);
        sequencer.signal_finished.connect(signal_finished);
 }
 
@@ -23,6 +30,14 @@ Demo::~Demo()
        delete music_source;
 }
 
+void Demo::add_stage(const std::string &name, Stage &stage)
+{
+       things[name] = &stage;
+       string prefix = name+".";
+       stage.add_things(things, prefix);
+       stage.define_actions(sequencer, prefix);
+}
+
 void Demo::set_fixed_framerate(float fps)
 {
        frame_interval = Time::sec/fps;
@@ -75,3 +90,16 @@ void Demo::seek(const Time::TimeDelta &pos)
 {
        sequencer.seek(pos*sequencer.get_beats_per_minute()/Time::min);
 }
+
+
+Demo::AnimationAction::AnimationAction(GL::AnimationPlayer &p):
+       player(p)
+{ }
+
+void Demo::AnimationAction::tick(float, float d)
+{
+       player.tick(d*Time::sec);
+}
+
+} // namespace DemoScene
+} // namespace Msp