X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fanimate.cpp;h=a7e406d73ae80c3428b5fe91d214820dffc645bf;hb=4b2708d0a743f74dfc44ea4e4c08344e09c624a6;hp=f30281d7b33401a745e621462dbe32d7c8ebfa1d;hpb=462cb9fc40ae7fec26615c652e95991be89ea8ae;p=libs%2Fdemoscene.git diff --git a/source/animate.cpp b/source/animate.cpp index f30281d..a7e406d 100644 --- a/source/animate.cpp +++ b/source/animate.cpp @@ -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) { } @@ -30,8 +34,23 @@ void Animate::validate() const void Animate::start(float, float d) { - float speed = (d ? (anim->get_duration()/Time::sec)/d : 1.0f); - player->play(*target, *anim, speed); + float speed = 1.0f; + if(!anim->is_looping() && d) + speed = (anim->get_duration()/Time::sec)/d; + 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); + } } @@ -40,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); } @@ -51,6 +71,7 @@ void Animate::Loader::animation(const string &n) void Animate::Loader::target(const string &n) { obj.target = &demo.get_thing(n); + obj.target_obj = dynamic_cast(obj.target); } } // namespace DemoScene