X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fanimationplayer.cpp;h=59c6f595a0b45cb889b1e7b447084205a26cb22d;hp=eb18f0f94b42e43cf49ad8dfa6bbe95232b3a200;hb=6a045019fbd68738b77849629e6dfd3dfd9a4d93;hpb=5ba1446b314ddc914693cb9cbb9a7b54a4d30a45 diff --git a/source/animationplayer.cpp b/source/animationplayer.cpp index eb18f0f9..59c6f595 100644 --- a/source/animationplayer.cpp +++ b/source/animationplayer.cpp @@ -37,11 +37,34 @@ void AnimationPlayer::play_stacked(AnimatedObject &obj, const Animation &anim) obj_slot.animations.push_back(AnimationSlot(anim)); } +unsigned AnimationPlayer::get_n_active_animations(const AnimatedObject &obj) const +{ + ObjectMap::const_iterator i = objects.find(&obj); + return (i!=objects.end() ? i->second.animations.size() : 0); +} + void AnimationPlayer::stop(AnimatedObject &obj) { objects.erase(&obj); } +void AnimationPlayer::stop(AnimatedObject &obj, const Animation &anim) +{ + ObjectMap::iterator i = objects.find(&obj); + if(i==objects.end()) + return; + + for(AnimationList::iterator j=i->second.animations.begin(); j!=i->second.animations.end(); ++j) + if(&j->animation==&anim) + { + i->second.animations.erase(j); + break; + } + + if(i->second.animations.empty()) + objects.erase(i); +} + void AnimationPlayer::tick(const Time::TimeDelta &dt) { for(ObjectMap::iterator i=objects.begin(); i!=objects.end(); ) @@ -65,6 +88,11 @@ bool AnimationPlayer::tick_single(ObjectSlot &slot, const Time::TimeDelta &dt) AnimationSlot &anim = slot.animations.front(); anim.iterator += dt; obj.set_matrix(anim.iterator.get_matrix()); + + unsigned n_uniforms = anim.animation.get_n_uniforms(); + for(unsigned i=0; iget_max_link_index(); @@ -82,6 +110,10 @@ bool AnimationPlayer::tick_stacked(ObjectSlot &slot, const Time::TimeDelta &dt) { i->iterator += dt; matrix *= i->iterator.get_matrix(); + + unsigned n_uniforms = i->animation.get_n_uniforms(); + for(unsigned j=0; janimation.get_uniform_name(j), i->iterator.get_uniform(j)); } slot.object.set_matrix(matrix);