#pragma once

class TexFont
{
public:
	TexFont();

	bool IsLoaded() const
	{
		return mTexture != nullptr;
	}

	lcTexture* GetTexture() const
	{
		return mTexture;
	}

	bool Initialize(lcContext* Context);
	void Reset();

	void PrintText(lcContext* Context, float Left, float Top, float Z, const char* Text) const;
	void GetTriangles(const lcMatrix44& Transform, const char* Text, float* Buffer) const;
	void GetGlyphTriangles(float Left, float Top, float Z, int Glyph, float* Buffer) const;
	void GetStringDimensions(int* cx, int* cy, const char* Text) const;

protected:
	struct
	{
		unsigned char width;
		float left, right, top, bottom;
	} mGlyphs[256];

	lcTexture* mTexture = nullptr;
	int mTextureWidth;
	int mTextureHeight;
	int mFontHeight;
};

extern TexFont gTexFont;