]> git.tdb.fi Git - libs/gl.git/blobdiff - source/animationplayer.cpp
Refactor AnimationPlayer ticking
[libs/gl.git] / source / animationplayer.cpp
index a3676ac90543331ddcba021b60d1c1f2c038f10b..cd71679800fffea672ebea6c4ef84ed796622104 100644 (file)
@@ -70,20 +70,19 @@ void AnimationPlayer::tick(const Time::TimeDelta &dt)
 {
        for(ObjectMap::iterator i=objects.begin(); i!=objects.end(); )
        {
-               bool keep = false;
                if(i->second.stacked)
-                       keep = tick_stacked(i->second, dt);
+                       tick_stacked(i->second, dt);
                else
-                       keep = tick_single(i->second, dt);
+                       tick_single(i->second, dt);
 
-               if(!keep)
+               if(i->second.animations.empty())
                        objects.erase(i++);
                else
                        ++i;
        }
 }
 
-bool AnimationPlayer::tick_single(Target &target, const Time::TimeDelta &dt)
+void AnimationPlayer::tick_single(Target &target, const Time::TimeDelta &dt)
 {
        PlayingAnimation &anim = target.animations.front();
        anim.iterator += dt;
@@ -100,10 +99,11 @@ bool AnimationPlayer::tick_single(Target &target, const Time::TimeDelta &dt)
                        target.object.set_pose_matrix(i, anim.iterator.get_pose_matrix(i));
        }
 
-       return !anim.iterator.is_end();
+       if(!anim.iterator.is_end())
+               target.animations.clear();
 }
 
-bool AnimationPlayer::tick_stacked(Target &target, const Time::TimeDelta &dt)
+void AnimationPlayer::tick_stacked(Target &target, const Time::TimeDelta &dt)
 {
        Matrix matrix = target.base_matrix;
        for(vector<PlayingAnimation>::iterator i=target.animations.begin(); i!=target.animations.end(); ++i)
@@ -140,7 +140,8 @@ bool AnimationPlayer::tick_stacked(Target &target, const Time::TimeDelta &dt)
                        ++i;
        }
 
-       return !target.animations.empty();
+       if(target.animations.empty())
+               target.stacked = false;
 }
 
 void AnimationPlayer::set_object_uniform(AnimatedObject &obj, const string &name, const KeyFrame::AnimatedUniform &uni)