X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fgraphics%2FAnimation.h;h=6af75d0a64639ae129a803b96f4c5249c4c7afea;hb=00b557a47e47d9410730d47d436f6158a3fb79f5;hp=55a16d99034fb70a30323ed6506514c67cebdfe0;hpb=ebeefe8b81fbb2e69939d67972453c01b023ec22;p=l2e.git diff --git a/src/graphics/Animation.h b/src/graphics/Animation.h index 55a16d9..6af75d0 100644 --- a/src/graphics/Animation.h +++ b/src/graphics/Animation.h @@ -24,9 +24,9 @@ class Animation { public: Animation() - : sprite(0), frameTime(0), repeat(false) { } + : sprite(0), frameTime(0), colOffset(0), rowOffset(0), repeat(false) { } Animation(const Sprite *sprite, int frameTime, bool repeat = false) - : sprite(sprite), frameTime(frameTime), repeat(repeat) { } + : sprite(sprite), frameTime(frameTime), colOffset(0), rowOffset(0), repeat(repeat) { } virtual ~Animation() { }; public: @@ -39,11 +39,31 @@ public: void Stop() { timer = app::Timer(); } + bool Started() const { + return timer.Started(); + } bool Running() const { return timer.Running() && (repeat || timer.Iteration() < NumFrames()); } + bool Finished() const { + return Started() && !Running(); + } + bool JustFinished() const { + return timer.JustHit() && timer.Iteration() == NumFrames(); + } + + const app::Timer &GetTimer() { return timer; } + + void SetColOffset(int offset) { colOffset = offset; } + int ColOffset() const { return colOffset; } + void SetRowOffset(int offset) { rowOffset = offset; } + int RowOffset() const { return rowOffset; } + + const Sprite *GetSprite() const { return sprite; } + void ChangeSprite(const Sprite *s) { sprite = s; } + virtual void Draw(SDL_Surface *dest, geometry::Point position) const { - sprite->Draw(dest, position, Col(), Row()); + sprite->Draw(dest, position, Col() + ColOffset(), Row() + RowOffset()); } void DrawTopRight(SDL_Surface *dest, geometry::Point position) const { geometry::Vector offset(-sprite->Width(), 0); @@ -58,8 +78,9 @@ public: Draw(dest, position + offset); } -protected: int Frame() const { return Running() ? (timer.Iteration() % NumFrames()) : 0; } + +protected: virtual int Col() const = 0; virtual int Row() const = 0; virtual int NumFrames() const = 0; @@ -68,6 +89,8 @@ private: const Sprite *sprite; app::Timer timer; int frameTime; + int colOffset; + int rowOffset; bool repeat; };