
#include "stdafx.h"
#include "C3dText.h"
#include <math.h>

//////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////
C_3D_TEXT::C_3D_TEXT()
{
	_smycka = 0;
	_max_citac = 15;
	_citac=0;
	_num_pismeno = 0;
	_ink_z=-_max_citac;
}

//////////////////////////////////////////////////////////////////////////
// 
//////////////////////////////////////////////////////////////////////////
C_3D_TEXT::~C_3D_TEXT()
{
	glDeleteLists(base, 256);	
}

//////////////////////////////////////////////////////////////////////////
// 
//////////////////////////////////////////////////////////////////////////
void C_3D_TEXT::print3dText(char *string)
{
  if (string == NULL) return;	
	glEnable(GL_TEXTURE_GEN_S);
	glEnable(GL_TEXTURE_GEN_T);
	glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D,texture_id[0]);
	
	glPushMatrix();
	glPushAttrib(GL_LIST_BIT);							
    glListBase(base);
	glColor3ub(255,255,255);

	int delka =	strlen(string);

	for(int n=0;n < _num_pismeno+1;n++)
	{
		TCHAR pis[1];
		pis[0] = string[n];
		if(n == _num_pismeno)
		{
			if(_ink_z == 1) _ink_z = -_max_citac;
			glTranslatef(0,0,_ink_z);
			_ink_z++;
		}
		
		
		glCallLists(1, GL_UNSIGNED_BYTE, pis);	
	}
 
	if(_smycka/((delka-1)) >= TEXT_OPAKOVANI)
	{
		_max_citac = 0;
		_citac=0;
	}
	_citac++;
	if(_citac > _max_citac && ((_smycka/(delka-1)) < TEXT_OPAKOVANI))
	{
		_citac = 0;
		_num_pismeno++;
		if(_num_pismeno >=delka) _num_pismeno = -1;
		_smycka++;
	}
	glPopAttrib();	
	glPopMatrix();
  
	glDisable(GL_TEXTURE_2D);
	glDisable(GL_TEXTURE_GEN_S);
	glDisable(GL_TEXTURE_GEN_T);
}

//////////////////////////////////////////////////////////////////////////
// 
//////////////////////////////////////////////////////////////////////////
void C_3D_TEXT::Build3dText(HWND hWnd)
{
	GLYPHMETRICSFLOAT	gmf[256];						// Address Buffer For Font Storage
	HFONT	font;										// Windows Font ID

	base = glGenLists(256);								// Storage For 256 Characters
	font = CreateFont(	-12,							// Height Of Font
						0,								// Width Of Font
						0,								// Angle Of Escapement
						0,								// Orientation Angle
						FW_BOLD,						// Font Weight
						FALSE,							// Italic
						FALSE,							// Underline
						FALSE,							// Strikeout
						ANSI_CHARSET,					// Character Set Identifier
						OUT_TT_PRECIS,					// Output Precision
						CLIP_DEFAULT_PRECIS,			// Clipping Precision
						ANTIALIASED_QUALITY,			// Output Quality
						FF_DONTCARE|DEFAULT_PITCH,		// Family And Pitch
						"Wingdings");					// Font Name

	HDC hDC = GetDC(hWnd);
	SelectObject(hDC, font);							// Selects The Font We Created
	wglUseFontOutlines(	hDC,							// Select The Current DC
						0,								// Starting Character
						255,							// Number Of Display Lists To Build
						base,							// Starting Display Lists
						0.0f,							// Deviation From The True Outlines
						0.2f,							// Font Thickness In The Z Direction
						WGL_FONT_POLYGONS,				// Use Polygons, Not Lines
						gmf);							// Address Of Buffer To Recieve Data
}
