]> git.tdb.fi Git - libs/gl.git/commitdiff
Add a function to stop a single animation
authorMikko Rasa <tdb@tdb.fi>
Sun, 2 Aug 2015 09:58:59 +0000 (12:58 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sun, 2 Aug 2015 09:58:59 +0000 (12:58 +0300)
source/animationplayer.cpp
source/animationplayer.h

index ffb902a8f555e51ecd250c9a99422af8e9d35451..59c6f595a0b45cb889b1e7b447084205a26cb22d 100644 (file)
@@ -48,6 +48,23 @@ 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(); )
index 6211fd661c21acd921743644571b1a1d7a45b2d3..34a282d6b5bba2f36dce446a243c84b841176714 100644 (file)
@@ -56,9 +56,12 @@ public:
        /// Returns the number of animations currently affecting an object.
        unsigned get_n_active_animations(const AnimatedObject &) const;
 
-       /// Stops any animations affecting an object.
+       /// Stops all animations affecting an object.
        void stop(AnimatedObject &);
 
+       /// Stops a single animation affecting an object.
+       void stop(AnimatedObject &, const Animation &);
+
        /** Advances all playing animations.  Should be called in a regular manner,
        preferably just before rendering. */
        void tick(const Time::TimeDelta &);