struct PlayingAnimation
{
const Animation *animation;
+ float speed;
Animation::Iterator iterator;
- PlayingAnimation(const Animation &);
+ PlayingAnimation(const Animation &, float);
};
struct Target: AnimationEventObserver
{
- AnimatedObject &object;
+ Placeable &placeable;
+ AnimatedObject *object;
Matrix base_matrix;
const Armature *armature;
std::vector<PlayingAnimation> animations;
bool stacked;
std::vector<AnimationEventObserver *> event_observers;
- Target(AnimatedObject &);
+ Target(Placeable &);
- virtual void animation_event(AnimatedObject *, const std::string &, const Variant &);
+ virtual void animation_event(Placeable *, const std::string &, const Variant &);
};
- typedef std::map<const AnimatedObject *, Target> ObjectMap;
+ typedef std::map<const Placeable *, Target> ObjectMap;
ObjectMap objects;
private:
- Target &get_slot(AnimatedObject &);
+ Target &get_slot(Placeable &);
+ Target &play_(Placeable &, const Animation &, bool, float);
public:
/// Plays an animation on an object. Any previous animations are replaced.
- void play(AnimatedObject &, const Animation &);
+ void play(AnimatedObject &, const Animation &, float = 1.0f);
+
+ void play(Placeable &, const Animation &, float = 1.0f);
/** Plays an animation, stacked with other animations. If no animations are
playing yet, the object's current matrix is used as the base. */
- void play_stacked(AnimatedObject &, const Animation &);
+ void play_stacked(AnimatedObject &, const Animation &, float = 1.0f);
+
+ void play_stacked(Placeable &, const Animation &, float = 1.0f);
/// Returns the number of animations currently affecting an object.
unsigned get_n_active_animations(const AnimatedObject &) const;