X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fgraphics%2FSprite.h;h=257d2dfd6007fba92d2eacd3f2354da2e61ce9d4;hb=edfc8aae94284af20df348a23b48afeb5971a230;hp=5710ee58639b3eebf439dd975794968c03e39620;hpb=5421c812b9fc64371c7f8ce3886b0b091eef458f;p=l2e.git diff --git a/src/graphics/Sprite.h b/src/graphics/Sprite.h index 5710ee5..257d2df 100644 --- a/src/graphics/Sprite.h +++ b/src/graphics/Sprite.h @@ -8,6 +8,8 @@ #ifndef GRAPHICS_SPRITE_H_ #define GRAPHICS_SPRITE_H_ +#include "../geometry/Vector.h" + #include namespace graphics { @@ -15,18 +17,38 @@ namespace graphics { class Sprite { public: - Sprite(SDL_Surface *s, int width, int height) - : surface(s), width(width), height(height) { } + Sprite() : surface(0), size(64, 64), offset() { } + Sprite(SDL_Surface *s, int width, int height, int xOffset = 0, int yOffset = 0) + : surface(s), size(width, height), offset(xOffset, yOffset) { } + +public: + int Width() const { return size.X(); } + int Height() const { return size.Y(); } + const geometry::Vector &Size() const { return size; } + void Draw(SDL_Surface *dest, const geometry::Vector &position, int col = 0, int row = 0) const; + void DrawTopRight(SDL_Surface *dest, const geometry::Vector &position, int col = 0, int row = 0) const { + geometry::Vector offset(-Width(), 0); + Draw(dest, position + offset, col, row); + } + void DrawCenter(SDL_Surface *dest, const geometry::Vector &position, int col = 0, int row = 0) const { + Draw(dest, position - (Size() / 2), col, row); + } + void DrawCenterBottom(SDL_Surface *dest, const geometry::Vector &position, int col = 0, int row = 0) const { + geometry::Vector offset(-Width() / 2, -Height()); + Draw(dest, position + offset, col, row); + } public: - int Width() const { return width; } - int Height() const { return height; } - void Draw(SDL_Surface *dest, int x, int y, int col = 0, int row = 0) const; + void SetSurface(SDL_Surface *s) { surface = s; } + void SetSize(const geometry::Vector &s) { size = s; } + void SetOffset(const geometry::Vector &o) { offset = o; } + + static void CreateTypeDescription(); private: SDL_Surface *surface; - int width; - int height; + geometry::Vector size; + geometry::Vector offset; };