Blame | Last modification | View Log | RSS feed
//#include "stdafx.h"#include "RenderText.h"#include "../Hook/MyDirect3DDevice9.h"CRenderText::CRenderText ( int size ) : CRenderObject (){m_iSize = size;m_font = NULL;m_iX = m_iY = 0;m_iWidth = 520;m_iHeight = size;m_iAlign = DT_LEFT;m_bBreakLine = false;m_iColour[0] = 0;m_iColour[1] = 0;m_iColour[2] = 255;}CRenderText::~CRenderText (){if ( m_font )m_font->Release ();m_font = NULL;}bool CRenderText::CheckMouse ( int x, int y, int offsetx, int offsety ){int iX = offsetx + m_iX;int iY = offsety + m_iY;if ( x < iX )return false;if ( y < iY )return false;if ( x > (iX + m_iWidth) )return false;if ( y > (iY + m_iHeight) )return false;return true;}void CRenderText::ParseSetting ( COverlay *overlay, CyString cmd, CyString rest, CyString section ){cmd.ToUpper();if ( section == "ANIMATE" ){if ( cmd == "TEXT" ){SAnimateText *text = new SAnimateText;text->iStartTime = ConvertAnimationTime ( rest.GetToken ( ",", 1, 1 ) );text->sText = rest.GetToken ( ",", 2 );m_lAnimations.push_back ( text );}else if ( cmd == "COLOUR" ){SAnimateColour *c = new SAnimateColour;c->iStartTime = ConvertAnimationTime ( rest.GetToken ( ",", 1, 1 ) );c->iR = rest.GetToken ( ",", 2, 2 ).ConvertEquation();c->iG = rest.GetToken ( ",", 3, 3 ).ConvertEquation();c->iB = rest.GetToken ( ",", 4, 4 ).ConvertEquation();m_lAnimations.push_back ( c );}elseCRenderObject::ParseSetting ( overlay, cmd, rest, section );}else if ( (section == "MOUSEOVER") || (section == "ONCLICK") ){if ( cmd == "APPEND" ){SMOTextAppend *c = new SMOTextAppend;c->sText = rest;AddMouseEvent ( section, c );}else if ( cmd == "PREPEND" ){SMOTextPrepend *c = new SMOTextPrepend;c->sText = rest;AddMouseEvent ( section, c );}elseCRenderObject::ParseSetting ( overlay, cmd, rest, section );}else if ( section.Empty() ){if ( cmd == "LENGTH" )m_iWidth = rest.ConvertEquation();else if ( cmd == "FONT" )InitFont ( m_pDevice, TEXT(rest.c_str()), m_iSize );else if ( cmd == "ALIGN" ){rest.ToUpper();if ( rest == "CENTER" )m_iAlign = DT_CENTER;else if ( rest == "LEFT" )m_iAlign = DT_LEFT;else if ( rest == "RIGHT" )m_iAlign = DT_RIGHT;}else if ( (cmd == "SIZE") && (m_iSize == -1) )m_iSize = rest.ConvertEquation();else if ( cmd == "LINES" ){int l = rest.ConvertEquation();if ( l < 1 )l = 1;m_iHeight = m_iSize * l;if ( l > 1 )m_bBreakLine = true;}else if ( cmd == "COLOUR" ){m_iColour[0] = rest.GetToken ( ",", 1, 1 ).ConvertEquation();m_iColour[1] = rest.GetToken ( ",", 2, 2 ).ConvertEquation();m_iColour[2] = rest.GetToken ( ",", 3, 3 ).ConvertEquation();}else if ( cmd == "TEXT" )m_sText = rest;elseCRenderObject::ParseSetting ( overlay, cmd, rest, section );}elseCRenderObject::ParseSetting ( overlay, cmd, rest, section );}void CRenderText::render ( MyDirect3DDevice9 *device, int x, int y, LPD3DXSPRITE sprite ){// set size of textRECT rct;rct.left = m_iX + x;rct.right = rct.left + m_iWidth;rct.top = m_iY + y;rct.bottom = rct.top + m_iHeight;// set the colour for the textshort *c = m_iColour;CyString text = m_sText;CLinkList<SMouseOver> *mouseList = NULL;for ( int i = 0; i < 2; i++ ){mouseList = NULL;if ( (i == 1) && (m_bClicked) )mouseList = &m_lMouseClick;else if ( (i == 0) && (m_bMouseOver) )mouseList = &m_lMouseOver;if ( mouseList ){for ( SMouseOver *mo = mouseList->First(); mo; mo = mouseList->Next() ){if ( mo->iType == MO_COLOUR )c = ((SMOColour *)mo)->iColour;else if ( mo->iType == MO_TEXTAPPEND )text += ((SMOTextAppend *)mo)->sText;else if ( mo->iType == MO_TEXTPREPEND )text = ((SMOTextPrepend *)mo)->sText + text;}}}if ( text.IsIn("$") )text = ParseVaribles ( text, &m_lVaribles );D3DCOLOR fontColor = D3DCOLOR_ARGB ( m_iAlpha, c[0], c[1], c[2] );// set the alignmentint align = m_iAlign;if ( m_bBreakLine )align += DT_WORDBREAK;// set the transformation positionD3DXMATRIX mat;D3DXMatrixIdentity ( &mat );sprite->SetTransform ( &mat );// draw the textm_font->DrawText( sprite, text.c_str(), -1, &rct, align, fontColor );}void CRenderText::InitFont ( MyDirect3DDevice9 *device, LPCTSTR fontStr, int size ){D3DXCreateFont( device, size, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, fontStr, &m_font );m_iHeight = size;}void CRenderText::StartAnimation ( SAnimate *anim ){if ( anim->iType == ANIM_CHANGETEXT ){SAnimateText *text = (SAnimateText *)anim;m_sText = text->sText;EndAnimation ( anim );}else if ( anim->iType == ANIM_CHANGECOLOUR ){SAnimateColour *colour = (SAnimateColour *)anim;m_iColour[0] = colour->iR;m_iColour[1] = colour->iG;m_iColour[2] = colour->iB;EndAnimation ( anim );}elseCRenderObject::StartAnimation ( anim );}/*####################################################################### Render Text Header ########################################################################*/CRenderTextHeader::CRenderTextHeader ( MyDirect3DDevice9 *device, LPCTSTR fontStr, CyString header ) : CRenderText (){InitFont ( device, fontStr, 50 );m_iAlign = DT_CENTER;m_sText = header;}CRenderTextNormal::CRenderTextNormal ( MyDirect3DDevice9 *device, LPCTSTR fontStr, CyString header ) : CRenderText (){InitFont ( device, fontStr, 20 );m_iAlign = DT_CENTER | DT_WORDBREAK;m_sText = header;}