123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- #include "Variablen.h"
- #include "Render.h"
- #include <Globals.h>
- #include <TastaturEreignis.h>
- #include <InitDatei.h>
- #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<Zeichnung*>(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);
- }
|