#define GRAPHICS_FONT_H_
#include "Sprite.h"
-#include "../geometry/Point.h"
+#include "../geometry/Vector.h"
-#include <map>
#include <SDL.h>
namespace graphics {
-// TODO: maybe fix fonts to use a 8x8 tile sprite for all chars
class Font {
public:
- explicit Font(const Sprite *sprite, int digitsCol = 0, int digitsRow = 0)
- : sprite(sprite), digitsCol(digitsCol), digitsRow(digitsRow) {
- MapRange('0', '9', digitsCol, digitsRow);
+ explicit Font(const Sprite *sprite = 0, int colOffset = 0, int rowOffset = 0)
+ : sprite(sprite), colOffset(colOffset), rowOffset(rowOffset) {
+
}
public:
int CharWidth() const { return sprite->Width(); }
int CharHeight() const { return sprite->Height(); }
- void DrawChar(char c, SDL_Surface *dest, geometry::Point<int> position) const;
- void DrawString(const char *s, SDL_Surface *dest, geometry::Point<int> position, int maxChars = 0) const;
- void DrawDigit(int d, SDL_Surface *dest, geometry::Point<int> position) const;
- void DrawNumber(int n, SDL_Surface *dest, geometry::Point<int> position, int digits = 0) const;
+ void DrawChar(char c, SDL_Surface *dest, const geometry::Vector<int> &position) const;
+ void DrawString(const char *s, SDL_Surface *dest, const geometry::Vector<int> &position, int maxChars = 0) const;
+ void DrawDigit(int d, SDL_Surface *dest, const geometry::Vector<int> &position) const;
+ void DrawNumber(int n, SDL_Surface *dest, const geometry::Vector<int> &position, int digits = 0) const;
public:
- bool HasChar(char c) const { return map[(unsigned char)c].mapped; };
- void MapChar(char c, int col, int row) { map[(unsigned char)c].mapped = true; map[(unsigned char)c].col = col; map[(unsigned char)c].row = row; };
- void MapRange(char from, char to, int colStart, int row) {
- int col(colStart);
- for (unsigned char c(from); c <= to; ++c, ++col) {
- MapChar(c, col, row);
- }
- }
+ void SetSprite(const Sprite *s) { sprite = s; }
+ void SetColOffset(int n) { colOffset = n; }
+ void SetRowOffset(int n) { rowOffset = n; }
+
+ static void CreateTypeDescription();
+ static void Construct(void *);
private:
- struct Mapping {
- Mapping() : mapped(false), col(0), row(0) { }
- bool mapped;
- int col;
- int row;
- };
const Sprite *sprite;
- Mapping map[256];
- int digitsCol;
- int digitsRow;
+ int colOffset;
+ int rowOffset;
};