Render.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. #include "Variablen.h"
  2. #include "Render.h"
  3. #include <Globals.h>
  4. #include <TastaturEreignis.h>
  5. #include "..\Aktionen\AktionsThread.h"
  6. // Inhalt der Render Klasse aus Render.h
  7. // Konstruktor
  8. Render::Render( Schrift *schrift )
  9. {
  10. exit = 0;
  11. bildschirm = 0;
  12. ref = 1;
  13. time = new ZeitMesser();
  14. tickval = 1.0 / 60;
  15. fps = new Fps();
  16. fps->setSchriftZ( schrift );
  17. fps->setSFarbe( 0xFFFFFFFF );
  18. deckAlpha = 0;
  19. inAnimation = 0;
  20. exit = 0;
  21. }
  22. // Destruktor
  23. Render::~Render()
  24. {
  25. if( bildschirm )
  26. bildschirm = bildschirm->release();
  27. time = time->release();
  28. fps = fps->release();
  29. }
  30. // nicht constant
  31. void Render::setBildschirm( Bildschirm *bildschirm ) // setzt den Bildschirm
  32. {
  33. this->bildschirm = bildschirm;
  34. }
  35. void Render::thread() // Render Schleife
  36. {
  37. bool fpsAdd = 0;
  38. time->messungStart();
  39. double ausgleich = 0;
  40. while( !exit )
  41. {
  42. if( bildschirm )
  43. {
  44. if( Framework::getTastenStand( T_F1 ) )
  45. {
  46. if( !fpsAdd )
  47. {
  48. bildschirm->addMember( fps );
  49. fpsAdd = 1;
  50. }
  51. }
  52. else
  53. {
  54. if( fpsAdd )
  55. {
  56. bildschirm->removeMember( fps );
  57. fpsAdd = 0;
  58. }
  59. }
  60. if( _render == 1 )
  61. {
  62. bildschirm->render();
  63. bildschirm->tick( tickval );
  64. }
  65. else
  66. Sleep( 100 );
  67. }
  68. else
  69. Sleep( 100 );
  70. ausgleich += 1.0 / 30 - tickval;
  71. if( ausgleich > 0 )
  72. Sleep( (int)( ausgleich * 1000 ) );
  73. time->messungEnde();
  74. time->messungStart();
  75. tickval = time->getSekunden();
  76. switch( aktion )
  77. {
  78. case 1: // Chat Client neu verbinden
  79. if( 1 )
  80. {
  81. bool verbunden = chatKlient->istVerbunden();
  82. chatKlient = chatKlient->release();
  83. chatKlient = new ChatKlient();
  84. if( verbunden )
  85. chatKlient->verbinde();
  86. aktion = 0;
  87. }
  88. break;
  89. case 2: // Login Oberfläche erschenen lassen (Programmstart)
  90. if( !inAnimation )
  91. {
  92. deckAlpha = 250;
  93. bildschirm->setdeckFarbe( deckAlpha << 24 );
  94. bildschirm->setOnTop( 1 );
  95. vorLogin->setSichtbar( 1 );
  96. inAnimation = 1;
  97. aktion = 0;
  98. }
  99. break;
  100. case 3: // Ausloggen
  101. new AktionsThread( 4, 0, 0, 0, 0, 0 );
  102. aktion = 0;
  103. break;
  104. case 4: // Client wurde gekickt, zur login Oberfläche wechseln
  105. new AktionsThread( 5, 0, 0, 0, 0, 0 );
  106. aktion = 0;
  107. break;
  108. case 5: // Spiel Laden
  109. new AktionsThread( 19, 0, 0, 0, 0, 0 );
  110. aktion = 0;
  111. break;
  112. case 6: // Nach dem Spiel die Statistik laden
  113. new AktionsThread( 20, 0, 0, 0, 0, 0 );
  114. aktion = 0;
  115. break;
  116. case 7: // Spiel Aufzeichnung betreten
  117. new AktionsThread( 21, 0, 0, 0, 0, 0 );
  118. aktion = 0;
  119. break;
  120. case 8: // Spiel Aufzeichnung / Editor verlassen
  121. new AktionsThread( 22, 0, 0, 0, 0, 0 );
  122. aktion = 0;
  123. break;
  124. case 9: // Editor betreten
  125. new AktionsThread( 23, 0, 0, 0, 0, 0 );
  126. aktion = 0;
  127. break;
  128. }
  129. if( inAnimation )
  130. {
  131. deckAlpha -= 25;
  132. bildschirm->setdeckFarbe( deckAlpha << 24 );
  133. if( deckAlpha == 0 )
  134. {
  135. bildschirm->setOnTop( 0 );
  136. inAnimation = 0;
  137. }
  138. }
  139. }
  140. time->messungEnde();
  141. }
  142. void Render::beginn() // beginnt rendering
  143. {
  144. exit = 0;
  145. start();
  146. }
  147. void Render::beenden() // exit = 1;
  148. {
  149. exit = 1;
  150. WaitForSingleObject( threadHandle, 5000 );
  151. }
  152. // constant
  153. Bildschirm *Render::getBildschirm() // gibt den Bildschirm zurück
  154. {
  155. return bildschirm ? bildschirm->getThis() : 0;
  156. }
  157. Bildschirm *Render::zBildschirm()
  158. {
  159. return bildschirm;
  160. }
  161. // Reference Counting
  162. Render *Render::getThis()
  163. {
  164. ref++;
  165. return this;
  166. }
  167. Render *Render::release()
  168. {
  169. ref--;
  170. if( !ref )
  171. delete this;
  172. return 0;
  173. }