]> git.tdb.fi Git - libs/gl.git/blobdiff - source/animationplayer.cpp
Use vector when there's no reason to use some other container
[libs/gl.git] / source / animationplayer.cpp
index e73d1113f2a1443948e082d44258f2f39208bc8a..95b45dfd0ef5fc5869be3f62755f46888d04d27d 100644 (file)
@@ -55,8 +55,8 @@ void AnimationPlayer::stop(AnimatedObject &obj, const Animation &anim)
        if(i==objects.end())
                return;
 
-       for(AnimationList::iterator j=i->second.animations.begin(); j!=i->second.animations.end(); ++j)
-               if(&j->animation==&anim)
+       for(vector<AnimationSlot>::iterator j=i->second.animations.begin(); j!=i->second.animations.end(); ++j)
+               if(j->animation==&anim)
                {
                        i->second.animations.erase(j);
                        break;
@@ -89,9 +89,9 @@ bool AnimationPlayer::tick_single(ObjectSlot &slot, const Time::TimeDelta &dt)
        anim.iterator += dt;
        slot.object.set_matrix(anim.iterator.get_matrix());
 
-       unsigned n_uniforms = anim.animation.get_n_uniforms();
+       unsigned n_uniforms = anim.animation->get_n_uniforms();
        for(unsigned i=0; i<n_uniforms; ++i)
-               set_object_uniform(slot.object, anim.animation.get_uniform_name(i), anim.iterator.get_uniform(i));
+               set_object_uniform(slot.object, anim.animation->get_uniform_name(i), anim.iterator.get_uniform(i));
 
        if(slot.armature)
        {
@@ -106,14 +106,14 @@ bool AnimationPlayer::tick_single(ObjectSlot &slot, const Time::TimeDelta &dt)
 bool AnimationPlayer::tick_stacked(ObjectSlot &slot, const Time::TimeDelta &dt)
 {
        Matrix matrix = slot.base_matrix;
-       for(AnimationList::iterator i=slot.animations.begin(); i!=slot.animations.end(); ++i)
+       for(vector<AnimationSlot>::iterator i=slot.animations.begin(); i!=slot.animations.end(); ++i)
        {
                i->iterator += dt;
                matrix *= i->iterator.get_matrix();
 
-               unsigned n_uniforms = i->animation.get_n_uniforms();
+               unsigned n_uniforms = i->animation->get_n_uniforms();
                for(unsigned j=0; j<n_uniforms; ++j)
-                       set_object_uniform(slot.object, i->animation.get_uniform_name(j), i->iterator.get_uniform(j));
+                       set_object_uniform(slot.object, i->animation->get_uniform_name(j), i->iterator.get_uniform(j));
        }
        slot.object.set_matrix(matrix);
 
@@ -125,17 +125,17 @@ bool AnimationPlayer::tick_stacked(ObjectSlot &slot, const Time::TimeDelta &dt)
                        matrix = Matrix();
                        /* XXX This is in all likelihood incorrect.  The stacking should be
                        performed on local matrices. */
-                       for(AnimationList::iterator j=slot.animations.begin(); j!=slot.animations.end(); ++j)
-                               if(j->animation.get_armature())
+                       for(vector<AnimationSlot>::iterator j=slot.animations.begin(); j!=slot.animations.end(); ++j)
+                               if(j->animation->get_armature())
                                        matrix *= j->iterator.get_pose_matrix(i);
                        slot.object.set_pose_matrix(i, matrix);
                }
        }
 
-       for(AnimationList::iterator i=slot.animations.begin(); i!=slot.animations.end(); )
+       for(vector<AnimationSlot>::iterator i=slot.animations.begin(); i!=slot.animations.end(); )
        {
                if(i->iterator.is_end())
-                       slot.animations.erase(i++);
+                       i = slot.animations.erase(i);
                else
                        ++i;
        }
@@ -166,8 +166,8 @@ AnimationPlayer::ObjectSlot::ObjectSlot(AnimatedObject &o):
 
 
 AnimationPlayer::AnimationSlot::AnimationSlot(const Animation &a):
-       animation(a),
-       iterator(animation)
+       animation(&a),
+       iterator(*animation)
 { }
 
 } // namespace GL