+++ /dev/null
-#ifndef MSP_GL_ANIMATION_H_
-#define MSP_GL_ANIMATION_H_
-
-#include <msp/core/refptr.h>
-#include <msp/datafile/objectloader.h>
-#include <msp/time/timedelta.h>
-
-namespace Msp {
-namespace GL {
-
-class KeyFrame;
-class Matrix;
-
-/**
-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<Animation>
- {
- private:
- Time::TimeDelta current_time;
-
- public:
- Loader(Animation &);
- Loader(Animation &, Collection &);
- private:
- void init();
-
- void keyframe(const std::string &);
- void keyframe_inline();
- void interval(float);
- };
-
-private:
- struct AxisInterpolation
- {
- float slope;
- float scale;
-
- AxisInterpolation();
- };
-
- struct TimedKeyFrame
- {
- const TimedKeyFrame *prev;
- Time::TimeDelta time;
- Time::TimeDelta delta_t;
- RefPtr<const KeyFrame> keyframe;
- AxisInterpolation axes[3];
- };
-
- typedef std::list<TimedKeyFrame> KeyFrameList;
-
-public:
- class Iterator
- {
- private:
- const Animation &animation;
- KeyFrameList::const_iterator iter;
- Time::TimeDelta time_since_keyframe;
- bool end;
-
- public:
- Iterator(const Animation &);
-
- Iterator &operator+=(const Time::TimeDelta &);
-
- bool is_end() const { return end; }
- Matrix get_matrix() const;
- };
-
-private:
- KeyFrameList keyframes;
- bool looping;
-
-public:
- Animation();
-
- 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;
-};
-
-} // namespace GL
-} // namespace Msp
-
-#endif