X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fgraphics%2FAnimation.h;h=208f6bdb19e7b95d9dbc20a417498608f14dc64b;hb=d20fa78a0dcbc95a69bb6077d2081d42b74a2d1a;hp=14966e90df4e1abac938a3d73dc3c976e918afec;hpb=843c216fec572902bfae1fce95671b0d17aef946;p=l2e.git diff --git a/src/graphics/Animation.h b/src/graphics/Animation.h index 14966e9..208f6bd 100644 --- a/src/graphics/Animation.h +++ b/src/graphics/Animation.h @@ -12,8 +12,6 @@ #include "../app/Application.h" #include "../app/State.h" #include "../app/Timer.h" -#include "../geometry/operators.h" -#include "../geometry/Point.h" #include "../geometry/Vector.h" #include @@ -32,7 +30,6 @@ public: public: const Sprite *GetSprite() const { return sprite; } - void ChangeSprite(const Sprite *s) { sprite = s; } int FrameTime() const { return frameTime; } bool Repeat() const { return repeat; } @@ -53,11 +50,13 @@ private: class AnimationRunner { public: - explicit AnimationRunner(const Animation *a = 0) - : animation(a), colOffset(0), rowOffset(0) { } + explicit AnimationRunner(const Animation *a = 0, int colOffset = 0, int rowOffset = 0) + : animation(a), sprite(a ? a->GetSprite() : 0), colOffset(colOffset), rowOffset(rowOffset) { } public: bool Valid() const { return animation; } + void Clear() { animation = 0; timer = app::Timer(); } + void Start(app::State &ctrl) { timer = ctrl.GraphicsTimers().StartInterval(animation->FrameTime()); } @@ -87,19 +86,21 @@ public: void SetRowOffset(int offset) { rowOffset = offset; } int RowOffset() const { return rowOffset; } - void Draw(SDL_Surface *dest, geometry::Point position) const { - animation->GetSprite()->Draw(dest, position + animation->Offset(Frame()), animation->Col(Frame()) + ColOffset(), animation->Row(Frame()) + RowOffset()); + void ChangeSprite(const Sprite *s) { sprite = s; } + const Sprite *GetSprite() const { return sprite; } + + void Draw(SDL_Surface *dest, geometry::Vector position) const { + sprite->Draw(dest, position + animation->Offset(Frame()), animation->Col(Frame()) + ColOffset(), animation->Row(Frame()) + RowOffset()); } - void DrawTopRight(SDL_Surface *dest, geometry::Point position) const { - geometry::Vector offset(-animation->GetSprite()->Width(), 0); + void DrawTopRight(SDL_Surface *dest, geometry::Vector position) const { + geometry::Vector offset(-sprite->Width(), 0); Draw(dest, position + offset); } - void DrawCenter(SDL_Surface *dest, geometry::Point position) const { - geometry::Vector offset(-animation->GetSprite()->Width() / 2, -animation->GetSprite()->Height() / 2); - Draw(dest, position + offset); + void DrawCenter(SDL_Surface *dest, geometry::Vector position) const { + Draw(dest, position - (sprite->Size() / 2)); } - void DrawCenterBottom(SDL_Surface *dest, geometry::Point position) const { - geometry::Vector offset(-animation->GetSprite()->Width() / 2, -animation->GetSprite()->Height()); + void DrawCenterBottom(SDL_Surface *dest, geometry::Vector position) const { + geometry::Vector offset(-sprite->Width() / 2, -sprite->Height()); Draw(dest, position + offset); } @@ -107,6 +108,7 @@ public: private: const Animation *animation; + const graphics::Sprite *sprite; app::Timer timer; int colOffset; int rowOffset;