Render.cpp 3.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") ? (int)*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. }