Render.cpp 4.2 KB

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