#include "SpielStatistik.h" #include #include "../../../Global/Variablen.h" typedef SpielStatistikV* (*GetStatistikKlasse)(void); // Inhalt der SpielStatistik Klasse aus SpielStatistik.h // Konstruktor SpielStatistik::SpielStatistik() : ReferenceCounter(), pos(10, 10), gr(780, 480) { stat = 0; spielDll = 0; la = (Animation2D*)ladeAnimation->dublizieren(); la->setPosition(365, 215); la->setSichtbar(0); tickVal = 0; sichtbar = 0; alpha = 0; spielArt = 0; rend = 0; } // Destruktor SpielStatistik::~SpielStatistik() { if (stat) stat->release(); if (spielDll) FreeLibrary(spielDll); la->release(); } // nicht constant void SpielStatistik::setSpielArt(int spielArt) { if (this->spielArt) return; this->spielArt = spielArt; la->setSichtbar(1); Text* name = infoClient->getSpielName(spielArt); if (!name) { this->spielArt = 0; la->setSichtbar(0); nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text("Die Spiel Statistik konnte nicht geladen werden."), new Text("Ok")); return; } Text* pfad = new Text("data/spiele/"); pfad->append(name->getText()); pfad->append("/bin/"); pfad->append(name); pfad->append(".dll"); spielDll = LoadLibrary(pfad->getText()); pfad->release(); if (!spielDll) { this->spielArt = 0; la->setSichtbar(0); nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text("Die Spiel Statistik konnte nicht geladen werden."), new Text("Ok")); return; } GetStatistikKlasse gsk = (GetStatistikKlasse)GetProcAddress(spielDll, "GetStatistikKlasse"); if (!gsk) { FreeLibrary(spielDll); this->spielArt = 0; la->setSichtbar(0); nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text("Die Spiel Statistik konnte nicht geladen werden."), new Text("Ok")); return; } stat = gsk(); if (!stat) { FreeLibrary(spielDll); this->spielArt = 0; la->setSichtbar(0); nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text("Die Spiel Statistik konnte nicht geladen werden."), new Text("Ok")); return; } stat->setAccountId(loginClient->getAccountId()); stat->setBilder(bilder); stat->setRückrufFunktionen(spielStatistikAddNachrichtF, spielStatistikAddChatF, spielStatistikAddFreundF, spielStatistikAccountAnsehenF, spielStatistikIstFreundF, this); stat->setUIFactory(uiFactory); stat->setKlients(dynamic_cast(infoClient->getThis()), dynamic_cast(spielClient->getThis())); stat->bereit(); } void SpielStatistik::nachricht(int län, const char* bytes) { if (stat) stat->nachricht(län, bytes); } void SpielStatistik::reset() { spielArt = 0; la->setSichtbar(0); sichtbar = 0; alpha = 0; stat = (SpielStatistikV*)stat->release(); FreeLibrary(spielDll); spielDll = 0; } void SpielStatistik::doPublicMausEreignis(MausEreignis& me) { me.mx -= pos.x; me.my -= pos.y; if (stat) stat->doPublicMausEreignis(me); me.mx += pos.x; me.my += pos.y; } void SpielStatistik::doTastaturEreignis(TastaturEreignis& te) { if (stat) stat->doTastaturEreignis(te); } bool SpielStatistik::tick(double zeit) { if (stat && stat->getStatus() == 1) { sichtbar = 1; la->setSichtbar(0); } else sichtbar = 0; tickVal += zeit * 250; int val = (int)tickVal; if (val > 10) val = 10; tickVal -= val; if (val) { if (sichtbar && alpha != 255) { if (alpha + val > 255) alpha = 255; else alpha += val; rend = 1; } if (!sichtbar && alpha != 0) { if (alpha - val < 0) alpha = 0; else alpha -= val; rend = 1; } } if (stat && sichtbar) rend |= stat->tick(zeit); rend |= la->tick(zeit); bool ret = rend; rend = 0; return ret; } void SpielStatistik::render(Bild& zRObj) { if (!zRObj.setDrawOptions(pos, gr)) return; la->render(zRObj); zRObj.setAlpha(alpha); if (stat) stat->render(zRObj); zRObj.releaseAlpha(); zRObj.releaseDrawOptions(); } void SpielStatistik::addNachrichtF(Text* t, Text* n, Text* rp, Text* rn) { nachLogin->zNachrichtenListe()->addNachricht(t, n, rp, rn); } void SpielStatistik::addChatF(int acc) { nachLogin->zChatLeiste()->addChat(acc, 0); } void SpielStatistik::addFreundF(int acc) { if (!chatClient->freundesAnfrage(acc)) nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text("Die Freundesanfrage konnte nicht gesendet werden."), new Text("Ok")); else nachLogin->zNachrichtenListe()->addNachricht(new Text("Freundesanfrage"), new Text("Es wurde eine Freundesanfrage an den Spieler gesendet."), new Text("Ok")); } void SpielStatistik::accountAnsehenF(int acc) { if (nachLogin->zAccountAnsehenFenster()->setSpielerDetails(acc, 2)) { MausEreignis me = { ME_RLinks, 0, 0, 0, 1 }; nachLogin->zTitelLeiste()->druckAccountAnsehen(me); } } bool SpielStatistik::istFreundF(int acc) { return nachLogin->zFreundesListe()->istFreund(acc); } void SpielStatistik::verlassen() { if (stat) stat->verlassen(); } // constant bool SpielStatistik::istSichtbar() { return sichtbar || alpha || la->istSichtbar(); } // Rückruf Funktionen void spielStatistikAddNachrichtF(void* p, Text* t, Text* n, Text* rp, Text* rn) { if (p) ((SpielStatistik*)p)->addNachrichtF(t, n, rp, rn); } void spielStatistikAddChatF(void* p, int acc) { if (p) ((SpielStatistik*)p)->addChatF(acc); } void spielStatistikAddFreundF(void* p, int acc) { if (p) ((SpielStatistik*)p)->addFreundF(acc); } void spielStatistikAccountAnsehenF(void* p, int acc) { if (p) ((SpielStatistik*)p)->accountAnsehenF(acc); } bool spielStatistikIstFreundF(void* p, int acc) { if (p) return ((SpielStatistik*)p)->istFreundF(acc); return 0; }