X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fanimation.h;h=63b13f7224269443e9b562572be9447d263d6faf;hb=fa5b232a16e11d7950e80764497f0167ec9e3b41;hp=1460c944894350ed5aa44ea57f5c0465c8da6a44;hpb=4c5ba8f7d3bc755d6256cb6bf75907a1b10fc290;p=libs%2Fgl.git diff --git a/source/animation.h b/source/animation.h index 1460c944..63b13f72 100644 --- a/source/animation.h +++ b/source/animation.h @@ -8,8 +8,10 @@ namespace Msp { namespace GL { +class Armature; class KeyFrame; class Matrix; +class Pose; /** An Animation is a sequence of KeyFrames combined with timing information. The @@ -41,15 +43,33 @@ private: 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 Animation &animation; const TimedKeyFrame *prev; Time::TimeDelta time; Time::TimeDelta delta_t; RefPtr keyframe; - AxisInterpolation axes[3]; + MatrixInterpolation matrix; + std::vector pose_matrices; + + TimedKeyFrame(const Animation &); + void prepare(); }; typedef std::list KeyFrameList; @@ -70,21 +90,27 @@ public: bool is_end() const { return end; } Matrix get_matrix() const; + Matrix get_pose_matrix(unsigned) const; }; private: + const Armature *armature; KeyFrameList keyframes; bool looping; public: Animation(); + ~Animation(); + + void set_armature(const Armature &); + const Armature *get_armature() const { return armature; } void add_keyframe(const Time::TimeDelta &, const KeyFrame &); - void set_looping(bool); private: void prepare_keyframe(TimedKeyFrame &); - Matrix compute_matrix(const TimedKeyFrame &, const Time::TimeDelta &) const; +public: + void set_looping(bool); }; } // namespace GL