X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fanimation.h;h=6845d23ee3e1652c9f7e49a86e5145f3faa6aa52;hp=3404f45bd9f8c446f5110844e2cae7114fffe6ea;hb=HEAD;hpb=00cc52f21b5ae29fb1b25c162552c851a0559e66 diff --git a/source/animation.h b/source/animation.h deleted file mode 100644 index 3404f45b..00000000 --- a/source/animation.h +++ /dev/null @@ -1,150 +0,0 @@ -#ifndef MSP_GL_ANIMATION_H_ -#define MSP_GL_ANIMATION_H_ - -#include -#include -#include -#include "keyframe.h" - -namespace Msp { -namespace GL { - -class AnimationEventObserver; -class Armature; -class Matrix; -class Pose; - -/** -An Animation is a sequence of KeyFrames combined with timing information. The -state at any point in the animation can be interpolated from the keyframes. -*/ -class Animation -{ -public: - class Loader: public DataFile::CollectionObjectLoader - { - private: - Time::TimeDelta current_time; - - public: - Loader(Animation &); - Loader(Animation &, Collection &); - 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(); - }; - -private: - struct AxisInterpolation - { - float slope; - float scale; - - AxisInterpolation(); - AxisInterpolation(const float *, const float *); - }; - - struct MatrixInterpolation - { - const Matrix *matrix1; - const Matrix *matrix2; - AxisInterpolation axes[3]; - - MatrixInterpolation(); - MatrixInterpolation(const Matrix &, const Matrix &); - - Matrix get(float) const; - }; - - struct TimedKeyFrame - { - const TimedKeyFrame *prev; - Time::TimeDelta time; - Time::TimeDelta delta_t; - RefPtr keyframe; - MatrixInterpolation matrix; - std::vector uniforms; - std::vector pose_matrices; - - TimedKeyFrame(); - void prepare(const Animation &); - }; - - struct Event - { - Time::TimeDelta time; - std::string name; - Variant value; - }; - - struct UniformInfo - { - std::string name; - unsigned size; - - UniformInfo(const std::string &, unsigned); - }; - -public: - class Iterator - { - private: - const Animation *animation; - std::vector::const_iterator iter; - std::vector::const_iterator event_iter; - Time::TimeDelta time_since_keyframe; - 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; - KeyFrame::AnimatedUniform get_uniform(unsigned) const; - Matrix get_pose_matrix(unsigned) const; - }; - -private: - const Armature *armature; - std::vector keyframes; - std::vector events; - bool looping; - std::vector uniforms; - -public: - Animation(); - ~Animation(); - - void set_armature(const Armature &); - const Armature *get_armature() const { return armature; } - - unsigned get_n_uniforms() const { return uniforms.size(); } - unsigned get_slot_for_uniform(const std::string &) const; - const std::string &get_uniform_name(unsigned) const; - - void add_keyframe(const Time::TimeDelta &, const KeyFrame &); -private: - void add_keyframe(const Time::TimeDelta &, const RefPtr &); - void prepare_keyframe(TimedKeyFrame &); -public: - void add_event(const Time::TimeDelta &, const std::string &, const Variant & = Variant()); - - void set_looping(bool); -}; - -} // namespace GL -} // namespace Msp - -#endif