Render.cpp 4.6 KB

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