]> git.tdb.fi Git - libs/gl.git/blobdiff - source/animationplayer.cpp
Check the flat qualifier from the correct member
[libs/gl.git] / source / animationplayer.cpp
diff --git a/source/animationplayer.cpp b/source/animationplayer.cpp
deleted file mode 100644 (file)
index 6148ed0..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-#include "animatedobject.h"
-#include "animationplayer.h"
-#include "armature.h"
-
-using namespace std;
-
-namespace Msp {
-namespace GL {
-
-AnimationPlayer::ObjectSlot &AnimationPlayer::get_slot(AnimatedObject &obj)
-{
-       ObjectMap::iterator i = objects.find(&obj);
-       if(i!=objects.end())
-               return i->second;
-
-       return objects.insert(ObjectMap::value_type(&obj, ObjectSlot(obj))).first->second;
-}
-
-void AnimationPlayer::play(AnimatedObject &obj, const Animation &anim)
-{
-       ObjectSlot &obj_slot = get_slot(obj);
-       obj_slot.animations.clear();
-       obj_slot.base_matrix = Matrix();
-       obj_slot.stacked = false;
-       obj_slot.armature = anim.get_armature();
-       obj_slot.animations.push_back(AnimationSlot(anim));
-}
-
-void AnimationPlayer::play_stacked(AnimatedObject &obj, const Animation &anim)
-{
-       ObjectSlot &obj_slot = get_slot(obj);
-       if(obj_slot.animations.empty())
-               obj_slot.base_matrix = *obj.get_matrix();
-       // TODO check for incompatible armature
-       obj_slot.stacked = true;
-       obj_slot.armature = anim.get_armature();
-       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::tick(const Time::TimeDelta &dt)
-{
-       for(ObjectMap::iterator i=objects.begin(); i!=objects.end(); )
-       {
-               bool keep = false;
-               if(i->second.stacked)
-                       keep = tick_stacked(i->second, dt);
-               else
-                       keep = tick_single(i->second, dt);
-
-               if(!keep)
-                       objects.erase(i++);
-               else
-                       ++i;
-       }
-}
-
-bool AnimationPlayer::tick_single(ObjectSlot &slot, const Time::TimeDelta &dt)
-{
-       AnimatedObject &obj = slot.object;
-       AnimationSlot &anim = slot.animations.front();
-       anim.iterator += dt;
-       obj.set_matrix(anim.iterator.get_matrix());
-       if(slot.armature)
-       {
-               unsigned max_index = slot.armature->get_max_link_index();
-               for(unsigned i=0; i<=max_index; ++i)
-                       obj.set_pose_matrix(i, anim.iterator.get_pose_matrix(i));
-       }
-
-       return !anim.iterator.is_end();
-}
-
-bool AnimationPlayer::tick_stacked(ObjectSlot &slot, const Time::TimeDelta &dt)
-{
-       Matrix matrix = slot.base_matrix;
-       for(AnimationList::iterator i=slot.animations.begin(); i!=slot.animations.end(); ++i)
-       {
-               i->iterator += dt;
-               matrix *= i->iterator.get_matrix();
-       }
-       slot.object.set_matrix(matrix);
-
-       if(slot.armature)
-       {
-               unsigned max_index = slot.armature->get_max_link_index();
-               for(unsigned i=0; i<=max_index; ++i)
-               {
-                       matrix = Matrix();
-                       /* XXX This is in all likelihood incorrect.  The stacking should be
-                       performed on local matrices. */
-                       for(AnimationList::iterator j=slot.animations.begin(); j!=slot.animations.end(); ++j)
-                               if(j->animation.get_armature())
-                                       matrix *= j->iterator.get_pose_matrix(i);
-                       slot.object.set_pose_matrix(i, matrix);
-               }
-       }
-
-       for(AnimationList::iterator i=slot.animations.begin(); i!=slot.animations.end(); )
-       {
-               if(i->iterator.is_end())
-                       slot.animations.erase(i++);
-               else
-                       ++i;
-       }
-
-       return !slot.animations.empty();
-}
-
-
-AnimationPlayer::ObjectSlot::ObjectSlot(AnimatedObject &o):
-       object(o),
-       armature(0),
-       stacked(false)
-{ }
-
-
-AnimationPlayer::AnimationSlot::AnimationSlot(const Animation &a):
-       animation(a),
-       iterator(animation)
-{ }
-
-} // namespace GL
-} // namespace Msp