#ifndef GAMEFONT_INCLUDE_H
#define GAMEFONT_INCLUDE_H

#define MAX_VARGS_BUFFER_FONT 4096
#define MAX_FONT_CACHABLE_CHARS 255

#include "Loader.h"
#include "PFrogConsole.h"
#include <PocketFrog/PocketFrog.h>

using namespace Frog;

class Loader;

class GameFont
{
private:

	// surface con la strip
	Surface *strip;
	Rasterizer *raster;

	char *charset;
	bool _mustFreeStrip;

	// colore trasparenza
	Pixel transColor;

	// puntatore alla classe LOADER
	Loader *LOADER;

	// struct usata per cachare le posizioni dei caratteri, per ogni colore voluto
	struct font {
		Pixel color;
		Surface *surf[MAX_FONT_CACHABLE_CHARS];
		struct font *next;
	};
	struct font *FONTS;
	
	// interi usati per cachare le posizioni dei caratteri nel caso il font da disegnare sia totalmente grafico
	// (taglia dalla strip senza processare i colori)
	unsigned short STARTX[MAX_FONT_CACHABLE_CHARS], ENDX[MAX_FONT_CACHABLE_CHARS];
	void _CacheFontsetWidths(Display *display);

	// disegna il carattere specificato, nella posizione specificata col colore specificato
	int _DrawCharColor(Display *display, char c, int x, int y, Pixel color);
	int _DrawCharDirect(Display *display, char c, int x, int y);

	// separatore
	unsigned char _separator;

	// rect temporaneo usato per le operazioni di cutting dalla strip
	Rect tmprect;

public:
	
	GameFont(Loader *loader, Display *display, Surface *strip, char *charset, Pixel transcolor);
	GameFont(Loader *loader, Display *display, const TCHAR *datfile, const TCHAR *filename, char *charset, Pixel transcolor);

	// recupera la larghezza di un carattere
	unsigned long GetTextWidth(const char *text);

	void GameFont::DrawText(Display *display, int x, int y, Pixel color, bool directmode, char *fmt, ...);
	void SetSeparator(unsigned char sep);
	~GameFont(void);
};

#endif
