/********************************************************
 *	SpriteFont.h										*
 *														*
 *	XFX SpriteFont definition file						*
 *	Copyright (c) XFX Team. All Rights Reserved			*
 ********************************************************/
#ifndef _XFX_GRAPHICS_SPRITEFONT_
#define _XFX_GRAPHICS_SPRITEFONT_

#include <Rectangle.h>
#include "Texture2D.h"
#include <Vector3.h>
#include <System/Collections/Generic/List.h>
#include <System/Object.h>
#include <System/Types.h>

using namespace System;
using namespace System::Collections::Generic;

namespace XFX
{
	struct Vector2;

	namespace Graphics
	{
		class SpriteBatch;

		// Represents a font texture.
		class SpriteFont : public virtual Object
		{
		private:
			friend class SpriteBatch;

			List<char> characterMap;
			List<Rectangle> croppingData;
			List<Rectangle> glyphData;
			List<Vector3> kerning;
			int lineSpacing;
			float spacing;
			Texture2D* textureValue;

			int GetIndexForCharacter(char character);

			SpriteFont(Texture2D * const texture, const List<Rectangle>& glyphs, const List<Rectangle>& cropping, const List<char>& charMap, const int lineSpacing, const float spacing, const List<Vector3>& kerning);

			void Draw(String& text, SpriteBatch * const spriteBatch, const Vector2 textblockPosition, const Color color, const float rotation, const Vector2 origin, const Vector2 scale, const SpriteEffects_t spriteEffects, const float depth);

		public:
			int LineSpacing();
			float Spacing;

			virtual ~SpriteFont();

			Vector2 MeasureString(String& text) const;
		};
	}
}

#endif //_XFX_GRAPHICS_SPRITEFONT_