+
+ const Sprite *GetSprite() const { return sprite; }
+ void ChangeSprite(const Sprite *s) { sprite = s; }
+ int FrameTime() const { return frameTime; }
+ bool Repeat() const { return repeat; }
+
+public:
+ virtual int NumFrames() const = 0;
+ virtual int Col(int frame) const = 0;
+ virtual int Row(int frame) const = 0;
+ virtual geometry::Vector<int> Offset(int frame) const { return geometry::Vector<int>(); }
+
+private:
+ const Sprite *sprite;
+ int frameTime;
+ bool repeat;
+
+};
+
+
+class AnimationRunner {
+
+public:
+ explicit AnimationRunner(const Animation *a = 0)
+ : animation(a), colOffset(0), rowOffset(0) { }
+
+public:
+ bool Valid() const { return animation; }