]> git.tdb.fi Git - libs/demoscene.git/blobdiff - source/animate.cpp
Fix initialization issues in the Animate action
[libs/demoscene.git] / source / animate.cpp
index 28129156796426e244593ad8787c1e2c6dcba894..a7e406d73ae80c3428b5fe91d214820dffc645bf 100644 (file)
@@ -8,13 +8,17 @@ namespace DemoScene {
 
 Animate::Animate():
        target(0),
+       target_obj(0),
        anim(0),
+       stacked(false),
        player(0)
 { }
 
-Animate::Animate(GL::Placeable &t, const GL::Animation &a, GL::AnimationPlayer &p):
+Animate::Animate(GL::Placeable &t, const GL::Animation &a, GL::AnimationPlayer &p, bool s):
        target(&t),
+       target_obj(0),
        anim(&a),
+       stacked(s),
        player(&p)
 { }
 
@@ -33,7 +37,20 @@ void Animate::start(float, float d)
        float speed = 1.0f;
        if(!anim->is_looping() && d)
                speed = (anim->get_duration()/Time::sec)/d;
-       player->play(*target, *anim, speed);
+       if(target_obj)
+       {
+               if(stacked)
+                       player->play_stacked(*target_obj, *anim, speed);
+               else
+                       player->play(*target_obj, *anim, speed);
+       }
+       else
+       {
+               if(stacked)
+                       player->play_stacked(*target, *anim, speed);
+               else
+                       player->play(*target, *anim, speed);
+       }
 }
 
 
@@ -42,6 +59,7 @@ Animate::Loader::Loader(Animate &a, Demo &d):
 {
        a.player = &demo.get_animation_player();
        add("animation", &Loader::animation);
+       add("stacked", &Animate::stacked);
        add("target", &Loader::target);
 }
 
@@ -53,6 +71,7 @@ void Animate::Loader::animation(const string &n)
 void Animate::Loader::target(const string &n)
 {
        obj.target = &demo.get_thing<GL::Placeable>(n);
+       obj.target_obj = dynamic_cast<GL::AnimatedObject *>(obj.target);
 }
 
 } // namespace DemoScene