Render.cpp 3.6 KB

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