home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 July & August / PCWorld_2006-07-08_cd.bin / temacd / planearcade / planearcade.exe / Tank3.bmp / font2D.cpp < prev    next >
C/C++ Source or Header  |  2004-10-03  |  5KB  |  200 lines

  1. #include "main.h"
  2.  
  3. //------------------------------------------------------------------
  4. // Name: FONT2D()
  5. // Desc: Konstruktor
  6. //------------------------------------------------------------------
  7. FONT2D::FONT2D()
  8. {
  9.     g_pTexture = NULL;
  10.     
  11.     Vertex = NULL;
  12.  
  13.     //nastavenie vlastnosti
  14.     Color = GetColor(1.0f,1.0f,1.0f,1.0f);
  15.  
  16. }
  17.  
  18.  
  19. //------------------------------------------------------------------
  20. // Name: ~FONT2D()
  21. // Desc: Destructor
  22. //------------------------------------------------------------------
  23. FONT2D::~FONT2D()
  24. {
  25.     if (g_pTexture != NULL) 
  26.         g_pTexture->Release();
  27.  
  28.     if (Vertex != NULL)
  29.         delete [] Vertex;
  30. }
  31.  
  32. //------------------------------------------------------------------
  33. // Name: LoadFont() 
  34. // Desc: inicializacia fontu 
  35. //------------------------------------------------------------------
  36. void FONT2D::LoadFont(char *FileName,COLOR ColorKey,int WidthChar,int HeightChar)
  37. {
  38.     
  39.     Width  = WidthChar;
  40.     Height = HeightChar;
  41.  
  42.     ActVer = 0;
  43.     ActChar = 0;
  44.  
  45.     //vertex pole
  46.     Vertex = new CUSTOMVERTEXFONT[1200];
  47.  
  48.     //log
  49.     char cBuf[80];
  50.     LogPrint("Vytvaram 2D Font");
  51.     sprintf(cBuf,"  Font: %s",FileName);
  52.     LogPrint(cBuf);
  53.     
  54.     if (FAILED(D3DXCreateTextureFromFileEx(g_pd3dDevice, 
  55.                                   FileName,    
  56.                                   D3DX_DEFAULT, 
  57.                                   D3DX_DEFAULT, 
  58.                                   0,            //MipLevels
  59.                                   0,            
  60.                                   Engine.TextureFormat, 
  61.                                   Engine.TextureCreatingFlag,
  62.                                   D3DX_DEFAULT, //Filter
  63.                                   D3DX_DEFAULT, //MipFilter
  64.                                   D3DXCOLOR    (ColorKey.R,
  65.                                                 ColorKey.G,
  66.                                                 ColorKey.B,
  67.                                                 ColorKey.A),   //ColourKey
  68.                                   NULL,         
  69.                                   NULL,         
  70.                                   &g_pTexture)))  
  71.     {
  72.         sprintf(cBuf,"  chyba pri vytvarani textury: %s",FileName);
  73.         LogPrint(cBuf);
  74.     }
  75.     else
  76.     {
  77.         LogPrint("  Textura fontu vytvorena");
  78.     }    
  79. }
  80.  
  81. //------------------------------------------------------------------
  82. // Name: Print()
  83. // Desc: Vytlaci text
  84. //------------------------------------------------------------------
  85. void FONT2D::Print(float X,float Y,char *Text)
  86.     for (int i=0;i < (strlen(Text));i=i+1) 
  87.     {
  88.         PrintCharacter(X+(i*(Width*0.75f)),Y,Text[i]);
  89.     }
  90.  
  91. }
  92.  
  93. //------------------------------------------------------------------
  94. // Name: PrintCharacter()
  95. // Desc: Vytlaci znak
  96. //------------------------------------------------------------------
  97. void FONT2D::PrintCharacter(float X,float Y,char Pis)
  98. {
  99.  
  100.     float StartX,StartY;  //suradnice zaciatku pismena na BMP
  101.     float EndX,EndY;      //suradnice na konci
  102.  
  103.     float Asci;   //acikod
  104.  
  105.     float Riadok; 
  106.     float Stlpec;
  107.  
  108.     Asci =(float) Pis;
  109.     Asci = Asci / 16.0f;
  110.     
  111.     Riadok =((float)  ((int)(Asci))) * 16.0f;
  112.     Stlpec = (Asci - Riadok) * 16.0f * 16.0f;
  113.  
  114.     StartX = Stlpec / 256.0f;
  115.     EndX  = (Stlpec + 16.0f) / 256.0f;
  116.  
  117.     StartY = (Riadok + 1.0f) / 256.0f;
  118.     EndY  = ((Riadok + 16.0f) / 256.0f) ;
  119.  
  120.     //spolocne vlastnosti
  121.     for (int i=ActVer;i<ActVer+6;i=i+1)
  122.     {
  123.         Vertex[i].z = 0.0f;
  124.         Vertex[i].rhw = 1.0f;
  125.         Vertex[i].color = D3DXCOLOR(Color.R,Color.G,Color.B,Color.A);
  126.  
  127.     }
  128.  
  129.  
  130.     //
  131.     //1
  132.     //
  133.     Vertex[ActVer].x = X;
  134.     Vertex[ActVer].y = Y;
  135.     Vertex[ActVer].tu = StartX;
  136.     Vertex[ActVer].tv = StartY;
  137.     ActVer = ActVer + 1;
  138.  
  139.     Vertex[ActVer].x = X+Width;
  140.     Vertex[ActVer].y = Y;
  141.     Vertex[ActVer].tu = EndX;
  142.     Vertex[ActVer].tv = StartY;
  143.     ActVer = ActVer + 1;
  144.  
  145.     Vertex[ActVer].x = X;
  146.     Vertex[ActVer].y = Y+Height;
  147.     Vertex[ActVer].tu = StartX;
  148.     Vertex[ActVer].tv = EndY;
  149.     ActVer = ActVer + 1;
  150.  
  151.     ActChar = ActChar + 1;
  152.  
  153.     //
  154.     //2
  155.     //
  156.     Vertex[ActVer].x = X+Width;
  157.     Vertex[ActVer].y = Y;
  158.     Vertex[ActVer].tu = EndX;
  159.     Vertex[ActVer].tv = StartY;
  160.     ActVer = ActVer + 1;
  161.  
  162.     Vertex[ActVer].x = X+Width;
  163.     Vertex[ActVer].y = Y+Height;
  164.     Vertex[ActVer].tu = EndX;
  165.     Vertex[ActVer].tv = EndY;
  166.     ActVer = ActVer + 1;
  167.  
  168.     Vertex[ActVer].x = X;
  169.     Vertex[ActVer].y = Y+Height;
  170.     Vertex[ActVer].tu = StartX;
  171.     Vertex[ActVer].tv = EndY;
  172.     ActVer = ActVer + 1;
  173.  
  174.  
  175.  
  176.     ActChar = ActChar + 1;
  177.  
  178. }
  179.  
  180. //------------------------------------------------------------------
  181. // Name: Render()
  182. // Desc: Vyrenderuje vytlaceny text
  183. //------------------------------------------------------------------
  184. void FONT2D::Render()
  185. {
  186.     //ak nieje napisany ziadny text koniec funckie
  187.     if(ActChar==0) return;
  188.  
  189.     g_pd3dDevice->SetTexture( 0, g_pTexture);
  190.  
  191.     // Render the vertex buffer contents
  192.     g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEXFONT );
  193.     g_pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLELIST,ActChar,(BYTE**)&Vertex[0], sizeof(CUSTOMVERTEXFONT));
  194.         
  195.     ActVer = 0;
  196.     ActChar = 0;
  197.  
  198. }
  199.