Clone of Akilla's ac2d @ https://github.com/deregtd/AC2D

cPictureBox.h 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #pragma once
  2. #include "WindowLib/cWindow.h"
  3. class cPictureBox : public CWindow, private RenderEventAbstractor< cPictureBox > {
  4. public:
  5. cPictureBox()
  6. {
  7. m_dwPicture = 0;
  8. m_dwGLTexID = 0;
  9. m_fTrans = 1.0f;
  10. m_iRotNum = 0;
  11. AddRenderEventHandler( *(RenderEventAbstractor< cPictureBox > *)this );
  12. }
  13. private:
  14. bool RenderEventAbstractor< cPictureBox >::OnRender( IWindow & Window, double TimeSlice )
  15. {
  16. float iLeft = GetAbsoluteLeft(),
  17. iRight = iLeft + GetWidth(),
  18. iTop = GetAbsoluteTop(),
  19. iBottom = iTop + GetHeight(),
  20. iWidth = GetWidth(),
  21. iHeight = GetHeight();
  22. glBindTexture(GL_TEXTURE_2D, m_dwGLTexID);
  23. float texels[][2] = {
  24. {0, 0},
  25. {m_pAdj.x, 0},
  26. {m_pAdj.x, m_pAdj.y},
  27. {0, m_pAdj.y}
  28. };
  29. int iTexNum = m_iRotNum;
  30. while (iTexNum < 0) iTexNum += 4;
  31. while (iTexNum > 3) iTexNum -= 4;
  32. glBegin(GL_QUADS);
  33. glColor4f(1,1,1,m_fTrans);
  34. glTexCoord2f(texels[iTexNum][0],texels[iTexNum][1]);
  35. iTexNum++; if (iTexNum > 3) iTexNum -= 4;
  36. glVertex2f(iLeft,iTop);
  37. glTexCoord2f(texels[iTexNum][0],texels[iTexNum][1]);
  38. iTexNum++; if (iTexNum > 3) iTexNum -= 4;
  39. glVertex2f(iRight,iTop);
  40. glTexCoord2f(texels[iTexNum][0],texels[iTexNum][1]);
  41. iTexNum++; if (iTexNum > 3) iTexNum -= 4;
  42. glVertex2f(iRight,iBottom);
  43. glTexCoord2f(texels[iTexNum][0],texels[iTexNum][1]);
  44. iTexNum++; if (iTexNum > 3) iTexNum -= 4;
  45. glVertex2f(iLeft,iBottom);
  46. glEnd();
  47. return true;
  48. }
  49. public:
  50. void SetPicture(DWORD Picture)
  51. {
  52. m_dwPicture = Picture;
  53. if ((Picture & 0xFF000000) == 0x06000000)
  54. m_dwGLTexID = m_Portal->FindGraphic(m_dwPicture);
  55. else if ((Picture & 0xFF000000) == 0x05000000)
  56. m_dwGLTexID = m_Portal->FindTexturePalette(m_dwPicture, 0);
  57. m_pAdj = m_Portal->GetGraphicEdges(m_dwPicture);
  58. }
  59. DWORD GetPicture() const
  60. {
  61. return m_dwPicture;
  62. }
  63. void SetTransparency( float fTrans )
  64. {
  65. m_fTrans = fTrans;
  66. }
  67. void SetRotNum(int RN)
  68. {
  69. m_iRotNum = RN;
  70. }
  71. private:
  72. float m_fTrans;
  73. int m_iRotNum;
  74. DWORD m_dwPicture;
  75. POINTf m_pAdj;
  76. DWORD m_dwGLTexID;
  77. };