#include "Variablen.h" #include "Render.h" #include #include #include #include "..\Aktionen\AktionsThread.h" // Inhalt der Render Klasse aus Render.h // Konstruktor Render::Render() : Thread() { exit = 0; time = new ZeitMesser(); tickval = 1.0 / 60; fps = new Fps(); fps->setSFarbe(0xFFFFFFFF); deckAlpha = 0; inAnimation = 0; exit = 0; } // Destruktor Render::~Render() { time->release(); fps = (Fps*)fps->release(); } void Render::thread() // Render Schleife { bool fpsAdd = 0; time->messungStart(); double ausgleich = 0; int maxFPS = 0; while (!exit) { if (Framework::getTastenStand(T_F1)) { if (!fpsAdd) { uiFactory.initParam.bildschirm->addMember(dynamic_cast(fps->getThis())); fpsAdd = 1; } } else { if (fpsAdd) { uiFactory.initParam.bildschirm->removeMember(fps); fpsAdd = 0; } } if (_render == 1) { uiFactory.initParam.bildschirm->render(); uiFactory.initParam.bildschirm->tick(tickval); } else Sleep(100); uiFactory.initParam.bildschirm->lock(); maxFPS = userOptions->wertExistiert("MaxFPS") ? (int)*userOptions->zWert("MaxFPS") : 30; uiFactory.initParam.bildschirm->unlock(); ausgleich += 1.0 / maxFPS - tickval; if (ausgleich > 0) Sleep((int)(ausgleich * 1000)); time->messungEnde(); time->messungStart(); tickval = time->getSekunden(); switch (aktion) { case 1: // Chat Client neu verbinden if (1) { bool verbunden = chatClient && chatClient->istVerbunden(); if (verbunden) { chatClient->trenne(0); if (cmProcessor) cmProcessor = (ChatMessageProcessor*)cmProcessor->release(); chatClient->verbinde(); cmProcessor = new ChatMessageProcessor(); } aktion = 0; } break; case 2: // Login Oberfläche erschenen lassen (Programmstart) if (!inAnimation) { deckAlpha = 250; uiFactory.initParam.bildschirm->setdeckFarbe(deckAlpha << 24); uiFactory.initParam.bildschirm->setOnTop(1); vorLogin->setSichtbar(1); inAnimation = 1; aktion = 0; } break; case 3: // Ausloggen new AktionsThread(4, 0, 0, 0, 0, 0); aktion = 0; break; case 4: // Client wurde gekickt, zur login Oberfläche wechseln new AktionsThread(5, 0, 0, 0, 0, 0); aktion = 0; break; case 5: // Spiel Laden new AktionsThread(19, 0, 0, 0, 0, 0); aktion = 0; break; case 6: // Nach dem Spiel die Statistik laden new AktionsThread(20, 0, 0, 0, 0, 0); aktion = 0; break; case 7: // Spiel Aufzeichnung betreten new AktionsThread(21, 0, 0, 0, 0, 0); aktion = 0; break; case 8: // Spiel Aufzeichnung / Editor verlassen new AktionsThread(22, 0, 0, 0, 0, 0); aktion = 0; break; case 9: // Editor betreten new AktionsThread(23, 0, 0, 0, 0, 0); aktion = 0; break; } if (inAnimation) { deckAlpha -= 25; uiFactory.initParam.bildschirm->setdeckFarbe(deckAlpha << 24); if (deckAlpha == 0) { uiFactory.initParam.bildschirm->setOnTop(0); inAnimation = 0; } } } time->messungEnde(); } void Render::beginn() // beginnt rendering { exit = 0; start(); } void Render::beenden() // exit = 1; { exit = 1; WaitForSingleObject(threadHandle, 5000); }