]> git.tdb.fi Git - libs/gl.git/commitdiff
Make Animation::Iterator assignable
authorMikko Rasa <tdb@tdb.fi>
Sat, 28 Apr 2018 14:40:37 +0000 (17:40 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 28 Apr 2018 14:40:37 +0000 (17:40 +0300)
source/animation.cpp
source/animation.h

index 1e2dda900fafc0d580bf84cb648772ccf7747ac3..35d2ae7aca1565f79b6934b76a5b675a89afe1e9 100644 (file)
@@ -218,8 +218,8 @@ Animation::UniformInfo::UniformInfo(const string &n, unsigned s):
 
 
 Animation::Iterator::Iterator(const Animation &a):
-       animation(a),
-       iter(animation.keyframes.begin()),
+       animation(&a),
+       iter(animation->keyframes.begin()),
        end(false)
 { }
 
@@ -230,10 +230,10 @@ Animation::Iterator &Animation::Iterator::operator+=(const Time::TimeDelta &t)
        {
                KeyFrameList::const_iterator next = iter;
                ++next;
-               if(next==animation.keyframes.end())
+               if(next==animation->keyframes.end())
                {
-                       if(animation.looping)
-                               next = animation.keyframes.begin();
+                       if(animation->looping)
+                               next = animation->keyframes.begin();
                        else
                        {
                                end = true;
@@ -264,10 +264,10 @@ KeyFrame::AnimatedUniform Animation::Iterator::get_uniform(unsigned i) const
                if(iter->uniforms.size()>i)
                        return iter->uniforms[i];
                else
-                       return KeyFrame::AnimatedUniform(animation.uniforms[i].size, 0.0f);
+                       return KeyFrame::AnimatedUniform(animation->uniforms[i].size, 0.0f);
        }
 
-       unsigned size = animation.uniforms[i].size;
+       unsigned size = animation->uniforms[i].size;
        float t = time_since_keyframe/iter->delta_t;
        KeyFrame::AnimatedUniform result(size, 0.0f);
        for(unsigned j=0; j<size; ++j)
@@ -277,9 +277,9 @@ KeyFrame::AnimatedUniform Animation::Iterator::get_uniform(unsigned i) const
 
 Matrix Animation::Iterator::get_pose_matrix(unsigned link) const
 {
-       if(!animation.armature)
+       if(!animation->armature)
                throw invalid_operation("Animation::Iterator::get_pose_matrix");
-       if(link>animation.armature->get_max_link_index())
+       if(link>animation->armature->get_max_link_index())
                throw out_of_range("Animation::Iterator::get_pose_matrix");
 
        if(!iter->prev)
@@ -293,7 +293,7 @@ Matrix Animation::Iterator::get_pose_matrix(unsigned link) const
        // We must redo the base point correction since interpolation throws if off
        // XXX This should probably be done on local matrices
        Matrix result = iter->pose_matrices[link].get(time_since_keyframe/iter->delta_t);
-       const Vector3 &base = animation.armature->get_link(link).get_base();
+       const Vector3 &base = animation->armature->get_link(link).get_base();
        Vector3 new_base = result*base;
        result = Matrix::translation(base-new_base)*result;
        return result;
index 1ae571e7db217e8e624c6475dc6c4731ebf08a9d..32a06075ec18269450a9ab329317e1e7551b8994 100644 (file)
@@ -87,7 +87,7 @@ public:
        class Iterator
        {
        private:
-               const Animation &animation;
+               const Animation *animation;
                KeyFrameList::const_iterator iter;
                Time::TimeDelta time_since_keyframe;
                bool end;