private:
struct AnimationSlot
{
- const Animation &animation;
+ const Animation *animation;
Animation::Iterator iterator;
AnimationSlot(const Animation &);
};
- typedef std::list<AnimationSlot> AnimationList;
-
struct ObjectSlot
{
AnimatedObject &object;
Matrix base_matrix;
const Armature *armature;
- AnimationList animations;
+ std::vector<AnimationSlot> animations;
bool stacked;
ObjectSlot(AnimatedObject &);
/// 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 &);
private:
bool tick_single(ObjectSlot &, const Time::TimeDelta &);
bool tick_stacked(ObjectSlot &, const Time::TimeDelta &);
+ static void set_object_uniform(AnimatedObject &, const std::string &, const KeyFrame::AnimatedUniform &);
};
} // namespace GL