namespace Msp {
namespace GL {
+class AnimationEventObserver;
class Armature;
class Matrix;
class Pose;
private:
void init();
+ void event(const std::string &);
+ void event1i(const std::string &, int);
+ void event1f(const std::string &, float);
+ void event2f(const std::string &, float, float);
+ void event3f(const std::string &, float, float, float);
+ void event4f(const std::string &, float, float, float, float);
+ void interval(float);
void keyframe(const std::string &);
void keyframe_inline();
- void interval(float);
};
private:
struct TimedKeyFrame
{
- const Animation &animation;
const TimedKeyFrame *prev;
Time::TimeDelta time;
Time::TimeDelta delta_t;
std::vector<KeyFrame::AnimatedUniform> uniforms;
std::vector<MatrixInterpolation> pose_matrices;
- TimedKeyFrame(const Animation &);
- void prepare();
+ TimedKeyFrame();
+ void prepare(const Animation &);
+ };
+
+ struct Event
+ {
+ Time::TimeDelta time;
+ std::string name;
+ Variant value;
};
struct UniformInfo
private:
const Animation *animation;
std::vector<TimedKeyFrame>::const_iterator iter;
+ std::vector<Event>::const_iterator event_iter;
Time::TimeDelta time_since_keyframe;
bool end;
Iterator(const Animation &);
Iterator &operator+=(const Time::TimeDelta &);
+ void dispatch_events(AnimationEventObserver &);
bool is_end() const { return end; }
Matrix get_matrix() const;
private:
const Armature *armature;
std::vector<TimedKeyFrame> keyframes;
+ std::vector<Event> events;
bool looping;
std::vector<UniformInfo> uniforms;
void add_keyframe(const Time::TimeDelta &, const KeyFrame &);
private:
+ void add_keyframe(const Time::TimeDelta &, const RefPtr<const KeyFrame> &);
void prepare_keyframe(TimedKeyFrame &);
-
public:
+ void add_event(const Time::TimeDelta &, const std::string &, const Variant & = Variant());
+
void set_looping(bool);
};