X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fanimation%2Fanimation.cpp;h=a9278e3de00836b3eb9e2ebe56ff908e2da207ed;hp=b62f5dd9c74e035ed7fe0ab39ef69c46b3cbf714;hb=e9a898f;hpb=bdef3de6559629f25121de2e014383d7f773266b diff --git a/source/animation/animation.cpp b/source/animation/animation.cpp index b62f5dd9..a9278e3d 100644 --- a/source/animation/animation.cpp +++ b/source/animation/animation.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -22,11 +23,11 @@ Animation::Animation(): Animation::~Animation() { - for(vector::iterator i=keyframes.begin(); i!=keyframes.end(); ++i) - if(i->owned) - delete i->keyframe; - for(vector::iterator i=curves.begin(); i!=curves.end(); ++i) - delete *i; + for(TimedKeyFrame &k: keyframes) + if(k.owned) + delete k.keyframe; + for(Curve *c: curves) + delete c; } void Animation::set_armature(const Armature &a) @@ -116,17 +117,17 @@ void Animation::add_keyframe(const Time::TimeDelta &t, const KeyFrame *kf, float ctrn.set_scale(last_trn.get_scale()*(1-x)+trn.get_scale()*x); ckf->set_transform(ctrn); - for(KeyFrame::UniformMap::const_iterator j=kf_unis.begin(); j!=kf_unis.end(); ++j) + for(const auto &kvp: kf_unis) { - KeyFrame::UniformMap::const_iterator k = last_unis.find(j->first); + auto k = last_unis.find(kvp.first); if(k==last_unis.end()) continue; - KeyFrame::AnimatedUniform uni(j->second.size, 0.0f); + KeyFrame::AnimatedUniform uni(kvp.second.size, 0.0f); for(unsigned c=0; csecond.values[c]*(1-x)+j->second.values[c]*x; + uni.values[c] = k->second.values[c]*(1-x)+kvp.second.values[c]*x; - ckf->set_uniform(j->first, uni); + ckf->set_uniform(kvp.first, uni); } add_keyframe(t, ckf, true, true); @@ -147,10 +148,10 @@ void Animation::add_keyframe(const Time::TimeDelta &t, const KeyFrame *kf, bool throw invalid_argument("Animation::add_keyframe"); const KeyFrame::UniformMap &kf_uniforms = kf->get_uniforms(); - for(vector::const_iterator i=uniforms.begin(); i!=uniforms.end(); ++i) + for(const UniformInfo &u: uniforms) { - KeyFrame::UniformMap::const_iterator j = kf_uniforms.find(i->name); - if(j!=kf_uniforms.end() && j->second.size!=i->size) + auto j = kf_uniforms.find(u.name); + if(j!=kf_uniforms.end() && j->second.size!=u.size) throw invalid_argument("Animation::add_keyframe"); } @@ -165,21 +166,17 @@ void Animation::add_keyframe(const Time::TimeDelta &t, const KeyFrame *kf, bool keyframes.push_back(tkf); - for(KeyFrame::UniformMap::const_iterator i=kf_uniforms.begin(); i!=kf_uniforms.end(); ++i) + for(const auto &kvp: kf_uniforms) { - bool found = false; - for(vector::const_iterator j=uniforms.begin(); (!found && j!=uniforms.end()); ++j) - found = (j->name==i->first); - - if(!found) - uniforms.push_back(UniformInfo(i->first, i->second.size)); + if(find_member(uniforms, kvp.first, &UniformInfo::name)==uniforms.end()) + uniforms.push_back(UniformInfo(kvp.first, kvp.second.size)); } } void Animation::create_curves() { - for(vector::iterator i=curves.begin(); i!=curves.end(); ++i) - delete *i; + for(Curve *c: curves) + delete c; curves.clear(); curves.reserve(6+uniforms.size()); @@ -188,16 +185,16 @@ void Animation::create_curves() create_curve(SCALE, Transform::SCALE, &extract_scale); uniform_curve_offset = curves.size(); - for(vector::const_iterator i=uniforms.begin(); i!=uniforms.end(); ++i) + for(const UniformInfo &u: uniforms) { - if(i->size==1) - create_curve<1>(UNIFORM, -1, ExtractUniform<1>(i->name)); - else if(i->size==2) - create_curve<2>(UNIFORM, -1, ExtractUniform<2>(i->name)); - else if(i->size==3) - create_curve<3>(UNIFORM, -1, ExtractUniform<3>(i->name)); - else if(i->size==4) - create_curve<4>(UNIFORM, -1, ExtractUniform<4>(i->name)); + if(u.size==1) + create_curve<1>(UNIFORM, -1, ExtractUniform<1>(u.name)); + else if(u.size==2) + create_curve<2>(UNIFORM, -1, ExtractUniform<2>(u.name)); + else if(u.size==3) + create_curve<3>(UNIFORM, -1, ExtractUniform<3>(u.name)); + else if(u.size==4) + create_curve<4>(UNIFORM, -1, ExtractUniform<4>(u.name)); } } @@ -205,10 +202,10 @@ void Animation::create_curve(CurveTarget target, Transform::ComponentMask mask, { Transform::ComponentMask all = mask; Transform::ComponentMask any = Transform::NONE; - for(vector::const_iterator i=keyframes.begin(); i!=keyframes.end(); ++i) + for(const TimedKeyFrame &k: keyframes) { - all = all&i->keyframe->get_transform().get_mask(); - any = any|i->keyframe->get_transform().get_mask(); + all = all&k.keyframe->get_transform().get_mask(); + any = any|k.keyframe->get_transform().get_mask(); } if(all==mask) @@ -232,17 +229,17 @@ void Animation::create_curve(CurveTarget target, int component, const T &extract vector knots; unsigned n_control = 0; - for(vector::const_iterator i=keyframes.begin(); i!=keyframes.end(); ++i) + for(const TimedKeyFrame &k: keyframes) { - if(i->control && knots.empty()) + if(k.control && knots.empty()) continue; typename Interpolate::SplineValue::Type value; - if(extract(*i->keyframe, value)) + if(extract(*k.keyframe, value)) { typename Knot::Value dvalue = value; - float x = i->time/Time::sec; - if(i->control) + float x = k.time/Time::sec; + if(k.control) { ++n_control; if(n_control>2) @@ -414,7 +411,7 @@ template bool Animation::ExtractUniform::operator()(const KeyFrame &kf, typename Interpolate::SplineValue::Type &value) const { const KeyFrame::UniformMap &kf_uniforms = kf.get_uniforms(); - const KeyFrame::UniformMap::const_iterator i = kf_uniforms.find(name); + auto i = kf_uniforms.find(name); if(i==kf_uniforms.end()) return false;