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(); )
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; i<n_uniforms; ++i)
+ obj.set_uniform(anim.animation.get_uniform_name(i), anim.iterator.get_uniform(i));
+
if(slot.armature)
{
unsigned max_index = slot.armature->get_max_link_index();
{
i->iterator += dt;
matrix *= i->iterator.get_matrix();
+
+ unsigned n_uniforms = i->animation.get_n_uniforms();
+ for(unsigned j=0; j<n_uniforms; ++j)
+ slot.object.set_uniform(i->animation.get_uniform_name(j), i->iterator.get_uniform(j));
}
slot.object.set_matrix(matrix);