#ifndef GRAPHICS_SPRITE_H_
#define GRAPHICS_SPRITE_H_
-#include "../geometry/operators.h"
-#include "../geometry/Point.h"
#include "../geometry/Vector.h"
#include <SDL.h>
class Sprite {
public:
+ Sprite() : surface(0), size(64, 64), offset() { }
Sprite(SDL_Surface *s, int width, int height, int xOffset = 0, int yOffset = 0)
- : surface(s), width(width), height(height), xOffset(xOffset), yOffset(yOffset) { }
+ : surface(s), size(width, height), offset(xOffset, yOffset) { }
public:
- int Width() const { return width; }
- int Height() const { return height; }
- void Draw(SDL_Surface *dest, geometry::Point<int> position, int col = 0, int row = 0) const;
- void DrawTopRight(SDL_Surface *dest, geometry::Point<int> position, int col = 0, int row = 0) const {
+ int Width() const { return size.X(); }
+ int Height() const { return size.Y(); }
+ const geometry::Vector<int> &Size() const { return size; }
+ void Draw(SDL_Surface *dest, const geometry::Vector<int> &position, int col = 0, int row = 0) const;
+ void DrawTopRight(SDL_Surface *dest, const geometry::Vector<int> &position, int col = 0, int row = 0) const {
geometry::Vector<int> offset(-Width(), 0);
Draw(dest, position + offset, col, row);
}
- void DrawCenter(SDL_Surface *dest, geometry::Point<int> position, int col = 0, int row = 0) const {
- geometry::Vector<int> offset(-Width() / 2, -Height() / 2);
- Draw(dest, position + offset, col, row);
+ void DrawCenter(SDL_Surface *dest, const geometry::Vector<int> &position, int col = 0, int row = 0) const {
+ Draw(dest, position - (Size() / 2), col, row);
}
- void DrawCenterBottom(SDL_Surface *dest, geometry::Point<int> position, int col = 0, int row = 0) const {
+ void DrawCenterBottom(SDL_Surface *dest, const geometry::Vector<int> &position, int col = 0, int row = 0) const {
geometry::Vector<int> offset(-Width() / 2, -Height());
Draw(dest, position + offset, col, row);
}
+public:
+ void SetSurface(SDL_Surface *s) { surface = s; }
+ void SetSize(const geometry::Vector<int> &s) { size = s; }
+ void SetOffset(const geometry::Vector<int> &o) { offset = o; }
+
private:
SDL_Surface *surface;
- int width;
- int height;
- int xOffset;
- int yOffset;
+ geometry::Vector<int> size;
+ geometry::Vector<int> offset;
};