From: Mikko Rasa Date: Sat, 28 Apr 2018 14:40:37 +0000 (+0300) Subject: Make Animation::Iterator assignable X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=commitdiff_plain;h=4b4d2a48048268d2ad48bafbce8647af8088573f Make Animation::Iterator assignable --- diff --git a/source/animation.cpp b/source/animation.cpp index 1e2dda90..35d2ae7a 100644 --- a/source/animation.cpp +++ b/source/animation.cpp @@ -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; jarmature) 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; diff --git a/source/animation.h b/source/animation.h index 1ae571e7..32a06075 100644 --- a/source/animation.h +++ b/source/animation.h @@ -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;