X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fanimation.h;h=b9e9fe1f3d1bd25e7a10efd3c0d7648eadd75000;hp=32a06075ec18269450a9ab329317e1e7551b8994;hb=e598e9d8dacad73b7ee1688e2be738e94b07b9fa;hpb=4b4d2a48048268d2ad48bafbce8647af8088573f diff --git a/source/animation.h b/source/animation.h index 32a06075..b9e9fe1f 100644 --- a/source/animation.h +++ b/source/animation.h @@ -9,6 +9,7 @@ namespace Msp { namespace GL { +class AnimationEventObserver; class Armature; class Matrix; class Pose; @@ -24,6 +25,8 @@ public: { private: Time::TimeDelta current_time; + float start_slope; + float end_slope; public: Loader(Animation &); @@ -31,9 +34,16 @@ public: 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); + void slopes(float, float); }; private: @@ -60,20 +70,26 @@ private: struct TimedKeyFrame { - const Animation &animation; const TimedKeyFrame *prev; Time::TimeDelta time; Time::TimeDelta delta_t; + float start_slope; + float end_slope; RefPtr keyframe; MatrixInterpolation matrix; std::vector uniforms; std::vector pose_matrices; - TimedKeyFrame(const Animation &); - void prepare(); + TimedKeyFrame(); + void prepare(const Animation &); }; - typedef std::list KeyFrameList; + struct Event + { + Time::TimeDelta time; + std::string name; + Variant value; + }; struct UniformInfo { @@ -88,14 +104,17 @@ public: { private: const Animation *animation; - KeyFrameList::const_iterator iter; + std::vector::const_iterator iter; + std::vector::const_iterator event_iter; Time::TimeDelta time_since_keyframe; + float x; bool end; public: Iterator(const Animation &); Iterator &operator+=(const Time::TimeDelta &); + void dispatch_events(AnimationEventObserver &); bool is_end() const { return end; } Matrix get_matrix() const; @@ -105,7 +124,8 @@ public: private: const Armature *armature; - KeyFrameList keyframes; + std::vector keyframes; + std::vector events; bool looping; std::vector uniforms; @@ -121,10 +141,16 @@ public: const std::string &get_uniform_name(unsigned) const; void add_keyframe(const Time::TimeDelta &, const KeyFrame &); + void add_keyframe(const Time::TimeDelta &, const KeyFrame &, float); + void add_keyframe(const Time::TimeDelta &, const KeyFrame &, float, float); private: + void add_keyframe(const Time::TimeDelta &, const RefPtr &, float, float); void prepare_keyframe(TimedKeyFrame &); - public: + void add_event(const Time::TimeDelta &, const std::string &, const Variant & = Variant()); + + const Msp::Time::TimeDelta &get_duration() const; + void set_looping(bool); };