#include "SpieleKaufen.h" #include #include #include #include #include #include #include "../../../Global/Initialisierung.h" #include "../../../Global/Variablen.h" void SpielKaufenKSGSAktion( void* p, RCArray* parameter, KSGSVariable** retVal) { if (!p) return; ((SpieleKaufenAuswahl*)p)->ksgsAktion(parameter, retVal); } // Inhalt der SpieleKaufenAuswahl Klasse aus SpieleKaufen.h // Konstruktor SpieleKaufenAuswahl::SpieleKaufenAuswahl() : Thread() { spielId = 0; alpha = 0; ksgs = Framework::getDLLRegister()->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll"); if (ksgs) { KSGSGetZeichnung getKSGScript = (KSGSGetZeichnung)GetProcAddress(ksgs, KSGS_START_FUNKTION); if (getKSGScript) { fenster = getKSGScript(); fenster->setBildschirmZ(dynamic_cast( uiFactory.initParam.bildschirm->getThis())); fenster->setSchriftZ( dynamic_cast(uiFactory.initParam.schrift->getThis())); fenster->setSize(555, 380); fenster->setCallbackParam(this); fenster->setCallbackFunktion(SpielKaufenKSGSAktion); } else { fenster = 0; nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei " "'data/bin/KSGScript.dll' konnte nicht gefunden werden."), new Text("Ok"), 0); } } else { fenster = 0; nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text("Die DLL-Datei 'data/bin/KSGScript.dll' konnte nicht " "geladen werden."), new Text("Ok"), 0); } ram = new LRahmen(); ram->setSize(555, 380); ram->setFarbe(0xFFFFFFFF); laden = (Framework::Animation2D*)ladeAnimation->dublizieren(); laden->setPosition(252, 165); laden->setSichtbar(0); pos = Punkt(220, 55); aktion = 0; } // Destruktor SpieleKaufenAuswahl::~SpieleKaufenAuswahl() { if (fenster) { fenster->reset(); fenster->release(); } ram->release(); laden->release(); if (ksgs) Framework::getDLLRegister()->releaseDLL("KSGScript.dll"); } // nicht constant void SpieleKaufenAuswahl::ladeSpielSeite(int id) { if (run) warteAufThread(2000); if (run) return; spielId = id; aktion = 1; start(); } void SpieleKaufenAuswahl::reset() { if (run) warteAufThread(2000); if (run) return; aktion = 0; start(); } void SpieleKaufenAuswahl::thread() { laden->setSichtbar(1); if (!aktion || spielId) { while (alpha) Sleep(100); if (!aktion) spielId = 0; if (fenster) fenster->reset(); } if (aktion) { while (alpha) Sleep(100); if (!shopClient) shopClient = mainClient->createShopServerClient(); if (shopClient && shopClient->verbinde()) { shopClient->ladeSpielSeite(spielId); shopClient->trenne(0); } Text* pfad = new Text("data/tmp/shop/kaufen/spiele/"); pfad->append(spielId); pfad->append("/seite.ksgs"); if (fenster) { fenster->setScriptDatei(pfad); fenster->neuLaden(); } } laden->setSichtbar(0); run = 0; } void SpieleKaufenAuswahl::ksgsAktion( RCArray* parameter, KSGSVariable** retVal) { KSGSVariable* befehl = parameter->z(0); if (!befehl) return; Text* b = befehl->getText(); if (!b) return; if (b->istGleich("GetBesitzStatus")) { int besitz = 0; if (!shopClient) shopClient = mainClient->createShopServerClient(); if (shopClient && shopClient->verbinde()) { besitz = shopClient->getSpielBesitzStatus(spielId); shopClient->trenne(0); } KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress(ksgs, KSGS_VARIABLE_FUNKTION); if (getKSGSVariable) { KSGSVariableDef def = {KSGS_INT, 0, 3, (Text() += besitz).getText()}; *retVal = getKSGSVariable(fenster, &def); } else { nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei " "'data/bin/KSGScript.dll' konnte nicht gefunden werden."), new Text("Ok"), 0); } b->release(); return; } if (b->istGleich("GetPreis")) { KSGSVariable* version = parameter->z(1); if (!version) { nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. " "Sie könnte eventuell nicht richtig funktionieren."), new Text("Ok"), 0); } else { bool testVersion = !version->getInt(); int preis = 0; if (!shopClient) shopClient = mainClient->createShopServerClient(); if (shopClient && shopClient->verbinde()) { preis = shopClient->getSpielPreis(spielId, testVersion); shopClient->trenne(0); } KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress(ksgs, KSGS_VARIABLE_FUNKTION); if (getKSGSVariable) { KSGSVariableDef def = {KSGS_INT, 0, 3, (Text() += preis).getText()}; *retVal = getKSGSVariable(fenster, &def); } else { nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text("Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei " "'data/bin/KSGScript.dll' konnte nicht gefunden " "werden."), new Text("Ok"), 0); } } b->release(); return; } if (b->istGleich("GetTestVersionVerbleibend")) { int verbleibend = 0; if (!shopClient) shopClient = mainClient->createShopServerClient(); if (shopClient && shopClient->verbinde()) { verbleibend = shopClient->getSpielTestversion(spielId); shopClient->trenne(0); } KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress(ksgs, KSGS_VARIABLE_FUNKTION); if (getKSGSVariable) { KSGSVariableDef def = {KSGS_INT, 0, 3, (Text() += verbleibend).getText()}; *retVal = getKSGSVariable(fenster, &def); } else { nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei " "'data/bin/KSGScript.dll' konnte nicht gefunden werden."), new Text("Ok"), 0); } b->release(); return; } if (b->istGleich("GetErwerbbarStatus")) { int erwerbbar = 0; if (!shopClient) shopClient = mainClient->createShopServerClient(); if (shopClient && shopClient->verbinde()) { erwerbbar = shopClient->istSpielErwerbbar(spielId); shopClient->trenne(0); } KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress(ksgs, KSGS_VARIABLE_FUNKTION); if (getKSGSVariable) { KSGSVariableDef def = {KSGS_INT, 0, 3, (Text() += erwerbbar).getText()}; *retVal = getKSGSVariable(fenster, &def); } else { nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei " "'data/bin/KSGScript.dll' konnte nicht gefunden werden."), new Text("Ok"), 0); } b->release(); return; } if (b->istGleich("GetKupfer")) { int kupfer = infoClient->getKupfer(); KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress(ksgs, KSGS_VARIABLE_FUNKTION); if (getKSGSVariable) { KSGSVariableDef def = {KSGS_INT, 0, 3, (Text() += kupfer).getText()}; *retVal = getKSGSVariable(fenster, &def); } else { nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text( "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei " "'data/bin/KSGScript.dll' konnte nicht gefunden werden."), new Text("Ok"), 0); } b->release(); return; } if (b->istGleich("Kaufen")) { KSGSVariable* version = parameter->z(1); if (!version) { nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. " "Sie könnte eventuell nicht richtig funktionieren."), new Text("Ok"), 0); } else { bool testVersion = !version->getInt(); if (!shopClient) shopClient = mainClient->createShopServerClient(); if (shopClient && shopClient->verbinde()) { if (!shopClient->spielErwerben(spielId, testVersion)) { nachLogin->zNachrichtenListe()->addNachricht( new Text("Fehler"), new Text(shopClient->getLetzterFehler()), new Text("Ok"), 0); } else { int dgId = infoClient->getDateiGruppeIdVonSpiel(spielId); if (dgId) { KSGTDatei* dg = new KSGTDatei("data/dg.ksgt"); dg->laden(); bool gefunden = 0; for (int i = 0; i < dg->getZeilenAnzahl(); i++) { if (dg->zFeld(i, 0) && TextZuInt(dg->zFeld(i, 0)->getText(), 10) == dgId) { gefunden = 1; break; } } if (!gefunden) { for (int i = 0; i < dg->getZeilenAnzahl(); i++) { if (dg->zFeld(i, 3) && !dg->zFeld(i, 3)->istGleich("SOFORT") && !dg->zFeld(i, 3)->istGleich("NICHT")) { int platz = TextZuInt( dg->zFeld(i, 3)->getText(), 10) + 1; Text* plT = new Text(); plT->append(platz); dg->zFeld(i, 3)->setText(plT); } } Text* idT = new Text(); idT->append(dgId); Text* pfad = infoClient->getDateiGruppePfad(dgId); if (pfad) { RCArray* zeile = new RCArray(); zeile->add(idT); zeile->add(pfad); zeile->add(new Text("0")); zeile->add(new Text("0")); dg->addZeile(4, zeile); } else idT->release(); } dg->speichern(); dg->release(); } } shopClient->trenne(0); } else if (shopClient) { nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text(shopClient->getLetzterFehler()), new Text("Ok"), 0); } else { nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text(mainClient->getLetzterFehler()), new Text("Ok"), 0); } if (run) warteAufThread(2000); if (run) { b->release(); return; } aktion = 1; start(); } b->release(); return; } if (b->istGleich("GetBild")) { KSGSVariable* pfad = parameter->z(1); KSGSVariable* name = parameter->z(2); if (!pfad || !name) { nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text( "Auf dieser Seite befindet sich ein Fehler im KSG-Script. " "Sie könnte eventuell nicht richtig funktionieren."), new Text("Ok"), 0); } else { Text* pf = pfad->getText(); Text* n = name->getText(); if (!pf || !n) { nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"), new Text( "Auf dieser Seite befindet sich ein Fehler im " "KSG-Script. " "Sie könnte eventuell nicht richtig funktionieren."), new Text("Ok"), 0); } else { KSGSGetVariable getKSGSVariable = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION); if (getKSGSVariable) { int p = n->positionVon(".ltdb/"); if (p < 0) p = 0; else p += 6; Text nn = Text(pf->getText()) + "/" + (const char*)(n->getText() + p); Bild* b = bilder->get(nn); if (b) { KSGSVariableDef def = {KSGS_BILD, 0, 3, ""}; KSGSVariable* ret = getKSGSVariable(fenster, &def); KSGSSetBild setKSGSBild = (KSGSSetBild)GetProcAddress( ksgs, KSGS_SET_BILD_FUNKTION); if (!setKSGSBild) { nachLogin->zNachrichtenListe()->addNachricht( new Text("Fehler"), new Text("Der Einstiegspunkt " "'" KSGS_SET_BILD_FUNKTION "' in der DLL-Datei " "'data/bin/KSGScript.dll' konnte " "nicht gefunden werden."), new Text("Ok"), 0); b->release(); } else setKSGSBild(ret, b); *retVal = ret; } } else { nachLogin->zNachrichtenListe()->addNachricht( new Text("Fehler"), new Text("Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION "' in der DLL-Datei " "'data/bin/KSGScript.dll' konnte nicht " "gefunden werden."), new Text("Ok"), 0); } } if (pf) pf->release(); if (n) n->release(); } b->release(); return; } } void SpieleKaufenAuswahl::doPublicMausEreignis(MausEreignis& me) { if (run) return; me.mx -= pos.x; me.my -= pos.y; if (fenster) fenster->doPublicMausEreignis(me); me.mx += pos.x; me.my += pos.y; } void SpieleKaufenAuswahl::doTastaturEreignis(TastaturEreignis& te) { if (run) return; if (fenster) fenster->doTastaturEreignis(te); } bool SpieleKaufenAuswahl::tick(double zeit) { bool rend = (fenster && !run) ? fenster->tick(zeit) : 0; rend |= laden->tick(zeit); if ((run || !spielId) && alpha > 0) { if (alpha - zeit * 150 < 0) alpha = 0; else alpha -= (unsigned char)(zeit * 150); rend = 1; } if (!run && spielId && alpha < 255) { if (alpha + zeit * 150 > 255) alpha = 255; else alpha += (unsigned char)(zeit * 150); rend = 1; } return rend; } void SpieleKaufenAuswahl::render(Bild& zRObj) { if (!zRObj.setDrawOptions(pos.x, pos.y, ram->getBreite(), ram->getHeight())) return; zRObj.setAlpha(alpha); ram->render(zRObj); if (fenster) fenster->render(zRObj); zRObj.releaseAlpha(); laden->render(zRObj); zRObj.releaseDrawOptions(); } // Inhalt der SpieleKaufenListeEintrag Klasse aus SpieleKaufen.h // Konstruktor SpieleKaufenListeEintrag::SpieleKaufenListeEintrag(int id) : ReferenceCounter() { spielId = id; auswählen = initKnopf(173, 73, 22, 22, 0, ""); auswählen->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Rahmen | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer); auswählen->setHintergrundBildZ( bilder->get("data/client/bilder/shop.ltdb/weiter.png")); initToolTip(auswählen, "Spiel auswählen."); auswählen->setRahmenBreite(1); LTDBDatei* datei = new LTDBDatei(); Text* bdpf = new Text("data/tmp/shop/kaufen/spiele/"); bdpf->append(id); bdpf->append("/titelbg.ltdb"); datei->setDatei(bdpf); hintergrund = datei->laden(0, new Text("auswbg.jpg")); datei->release(); ausgewählt = new AlphaFeld(); ausgewählt->setPosition(1, 1); ausgewählt->setSize(198, 98); ausgewählt->setFarbe(0x0000FF00); ausgewählt->setStrength(10); ram = new LRahmen(); ram->setSize(200, 100); ram->setFarbe(0xFFFFFFFF); ausw = 0; rend = 0; } // Destruktor SpieleKaufenListeEintrag::~SpieleKaufenListeEintrag() { auswählen->release(); if (hintergrund) hintergrund->release(); ausgewählt->release(); ram->release(); } // nicht constant void SpieleKaufenListeEintrag::resetAuswahl() { ausw = 0; } bool SpieleKaufenListeEintrag::doPublicMausEreignis(MausEreignis& me) { bool vera = me.verarbeitet; auswählen->doPublicMausEreignis(me); if (!vera && me.verarbeitet && me.id == ME_RLinks) { ausw = 1; return 1; } return 0; } bool SpieleKaufenListeEintrag::tick(double zeit) { rend |= ausgewählt->tick(zeit); rend |= auswählen->tick(zeit); int a = (ausgewählt->getFarbe() >> 24) & 0xFF; if (ausw && a < 255) { if (a + 150 * zeit > 255) a = 255; else a += (int)(150 * zeit); ausgewählt->setFarbe( ((a << 24) & 0xFF000000) | (ausgewählt->getFarbe() & 0xFFFFFF)); rend = 1; } if (!ausw && a > 0) { if (a - 150 * zeit < 0) a = 0; else a -= (int)(150 * zeit); ausgewählt->setFarbe( ((a << 24) & 0xFF000000) | (ausgewählt->getFarbe() & 0xFFFFFF)); rend = 1; } bool ret = rend; rend = 0; return ret; } void SpieleKaufenListeEintrag::render(int yOff, Bild& zRObj) { if (!zRObj.setDrawOptions(0, yOff, 200, 100)) return; ram->render(zRObj); if (hintergrund) zRObj.drawBild(1, 1, 198, 98, *hintergrund); ausgewählt->render(zRObj); auswählen->render(zRObj); zRObj.releaseDrawOptions(); } // constant int SpieleKaufenListeEintrag::getSpielId() const { return spielId; } // Inhalt der SpieleKaufenListe Klasse aus SpieleKaufen.h // Konstruktor SpieleKaufenListe::SpieleKaufenListe() : ReferenceCounter() { pos = Punkt(5, 55); ram = new LRahmen(); ram->setSize(215, 380); ram->setFarbe(0xFFFFFFFF); einträge = new RCArray(); vScroll = new VScrollBar(); vScroll->setKlickScroll(10); vScroll->update(0, 380); rend = 0; } // Destruktor SpieleKaufenListe::~SpieleKaufenListe() { ram->release(); einträge->release(); vScroll->release(); } // nicht constant void SpieleKaufenListe::ladeSpiele(Array* spiele) { leeren(); int anz = spiele->getEintragAnzahl(); if (!shopClient) shopClient = mainClient->createShopServerClient(); if (shopClient && shopClient->verbinde()) { for (int i = 0; i < anz; i++) { if (shopClient->ladeSpielTitel(spiele->hat(i) ? spiele->get(i) : 0)) einträge->add(new SpieleKaufenListeEintrag( spiele->hat(i) ? spiele->get(i) : 0)); } shopClient->trenne(0); } vScroll->update(anz * 100, 380); rend = 1; } void SpieleKaufenListe::leeren() { cs.lock(); einträge->leeren(); cs.unlock(); vScroll->update(0, 380); rend = 1; } int SpieleKaufenListe::doPublicMausEreignis(MausEreignis& me) { int mx = me.mx; int my = me.my; me.mx -= pos.x; me.my -= pos.y; vScroll->doMausMessage(200, 0, 15, 380, me); me.my += vScroll->getScroll(); int ret = 0; cs.lock(); int anz = einträge->getEintragAnzahl(); for (int i = 0; i < anz; i++) { if (einträge->z(i)->doPublicMausEreignis(me)) ret = einträge->z(i)->getSpielId(); me.my -= 100; } if (ret) { for (int i = 0; i < anz; i++) { if (einträge->z(i)->getSpielId() != ret) einträge->z(i)->resetAuswahl(); } } cs.unlock(); me.mx = mx; me.my = my; return ret; } bool SpieleKaufenListe::tick(double zeit) { rend |= vScroll->getRend(); cs.lock(); int anz = einträge->getEintragAnzahl(); for (int i = 0; i < anz; i++) rend |= einträge->z(i)->tick(zeit); cs.unlock(); bool ret = rend; rend = 0; return ret; } void SpieleKaufenListe::render(Bild& zRObj) { int br = ram->getBreite(); int hö = ram->getHeight(); if (!zRObj.setDrawOptions(pos.x, pos.y, br, hö)) return; ram->render(zRObj); cs.lock(); int anz = einträge->getEintragAnzahl(); for (int i = 0; i < anz; i++) einträge->z(i)->render(i * 100 - vScroll->getScroll(), zRObj); cs.unlock(); vScroll->render(200, 0, 15, 380, zRObj); zRObj.releaseDrawOptions(); } // constant int SpieleKaufenListe::getEintragAnzahl() { return einträge->getEintragAnzahl(); } // Inhalt der SpieleKaufen Klasse aus SpieleKaufen.h // Konstruktor SpieleKaufen::SpieleKaufen() : Thread() { Bild* shopZurück = bilder->get("data/client/bilder/shop.ltdb/zurück.png"); Bild* shopWeiter = bilder->get("data/client/bilder/shop.ltdb/weiter.png"); alpha = 255; sichtbar = 0; suchText = new Text(""); ram = new LRahmen(); ram->setSize(780, 440); ram->setFarbe(0xFFFFFFFF); pos = Punkt(10, 50); suchFilterT = initTextFeld(5, 5, 70, 20, TextFeld::Style::Text, "Suchfilter:"); suchFilter = initTextFeld(80, 5, 225, 20, TextFeld::Style::TextFeld, ""); initToolTip(suchFilter, "Gebe etwas vom Namen des Spieles ein, nach dem du suchst."); suchen = initKnopf(310, 5, 100, 20, Knopf::Style::Sichtbar, "suchen"); seiten = initTextFeld(55, 30, 250, 20, TextFeld::Style::Text | TextFeld::Style::VCenter, "Seite 0 von 0, 0 Funde."); zurück = initKnopf(5, 30, 20, 20, 0, ""); zurück->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer); zurück->setHintergrundBildZ(shopZurück); initToolTip(zurück, "Seite zurück blättern."); weiter = initKnopf(30, 30, 20, 20, 0, ""); weiter->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer); weiter->setHintergrundBildZ(shopWeiter); initToolTip(weiter, "Seite weiter blättern."); liste = new SpieleKaufenListe(); auswahl = new SpieleKaufenAuswahl(); laden = (Framework::Animation2D*)ladeAnimation->dublizieren(); laden->setPosition(365, 195); laden->setSichtbar(0); tickVal = 0; seite = 0; maxSeite = 0; rend = 0; } // Destruktor SpieleKaufen::~SpieleKaufen() { suchText->release(); ram->release(); suchFilter->release(); suchFilterT->release(); suchen->release(); seiten->release(); weiter->release(); zurück->release(); liste->release(); auswahl->warteAufThread(10000); auswahl->ende(); auswahl->release(); laden->release(); } // nicht constant void SpieleKaufen::setSichtbar(bool sicht) { sichtbar = sicht; if (sichtbar && !liste->getEintragAnzahl()) { MausEreignis me; me.id = ME_RLinks; me.verarbeitet = 0; me.mx = suchen->getX() + 1 + pos.x; me.my = suchen->getY() + 1 + pos.y; doPublicMausEreignis(me); } } void SpieleKaufen::thread() { laden->setSichtbar(1); Array* list = 0; if (!shopClient) shopClient = mainClient->createShopServerClient(); if (shopClient && shopClient->verbinde()) { list = shopClient->suchSpiele(suchText->getText()); shopClient->trenne(0); } if (!list) { laden->setSichtbar(0); run = 0; return; } Array* slist = new Array(); int anz = list->getEintragAnzahl(); maxSeite = anz / 10 + 1; if (!(anz % 10)) maxSeite--; while (anz <= seite * 10 && seite > 0) seite--; for (int i = seite * 10; i < anz && i < seite * 10 + 10; i++) slist->add(list->hat(i) ? list->get(i) : 0); list->release(); auswahl->reset(); liste->ladeSpiele(slist); slist->release(); Text* t = new Text("Seite "); t->append(maxSeite ? seite + 1 : 0); t->append(" von "); t->append(maxSeite); t->append(", "); t->append(anz); if (anz == 1) t->append(" Fund."); else t->append(" Funde."); seiten->setText(t); zurück->setStyle(TextFeld::Style::Erlaubt, seite > 0); weiter->setStyle(TextFeld::Style::Erlaubt, seite + 1 < maxSeite); laden->setSichtbar(0); run = 0; } void SpieleKaufen::doPublicMausEreignis(MausEreignis& me) { if (!sichtbar || run) return; int mx = me.mx; int my = me.my; me.mx -= pos.x; me.my -= pos.y; suchFilter->doPublicMausEreignis(me); int auswId = liste->doPublicMausEreignis(me); if (auswId) auswahl->ladeSpielSeite(auswId); auswahl->doPublicMausEreignis(me); int ak = 0; bool tmp = me.verarbeitet; suchen->doPublicMausEreignis(me); ak = me.verarbeitet ? 1 : 0; zurück->doPublicMausEreignis(me); ak = me.verarbeitet && !ak ? 2 : ak; weiter->doPublicMausEreignis(me); ak = me.verarbeitet && !ak ? 3 : ak; if (tmp) ak = 0; if (me.id == ME_RLinks) { switch (ak) { case 1: // Suchen suchText->setText(suchFilter->zText()->getText()); seite = 1; maxSeite = 1; start(); break; case 2: // Seite zurück blättern seite--; if (seite < 1) seite = 1; start(); break; case 3: // Seite vorwärts blättern seite++; if (seite > maxSeite) seite = maxSeite; start(); break; } } me.mx = mx; me.my = my; } void SpieleKaufen::doTastaturEreignis(TastaturEreignis& te) { if (!sichtbar || run) return; bool vera = te.verarbeitet; suchFilter->doTastaturEreignis(te); if (!vera && te.verarbeitet && te.virtualKey == T_Enter && te.id == TE_Release) { MausEreignis me; me.id = ME_RLinks; me.verarbeitet = 0; me.mx = suchen->getX() + 1 + pos.x; me.my = suchen->getY() + 1 + pos.y; doPublicMausEreignis(me); } auswahl->doTastaturEreignis(te); } bool SpieleKaufen::tick(double zeit) { rend |= suchFilter->tick(zeit); rend |= suchFilterT->tick(zeit); rend |= suchen->tick(zeit); rend |= weiter->tick(zeit); rend |= zurück->tick(zeit); rend |= liste->tick(zeit); rend |= auswahl->tick(zeit); rend |= laden->tick(zeit); tickVal += zeit * 250; int val = (int)tickVal; if (val < 1) { bool ret = rend; rend = 0; return ret; } if (val > 10) val = 10; tickVal -= val; if (sichtbar && alpha != 255 && !run) { if (alpha + val > 255) alpha = 255; else alpha += val; rend = 1; } if (sichtbar && alpha != 125 && run) { if (alpha > 125) { if (alpha - val < 125) alpha = 125; else alpha -= val; rend = 1; } else { if (alpha + val > 125) alpha = 125; else alpha += 125; rend = 1; } } if (!sichtbar && alpha != 0) { if (alpha - val < 0) alpha = 0; else alpha -= val; rend = 1; } bool ret = rend; rend = 0; return ret; } void SpieleKaufen::render(Bild& zRObj) { if (!alpha) return; int br = ram->getBreite(); int hö = ram->getHeight(); if (!zRObj.setDrawOptions(pos.x, pos.y, br, hö)) return; zRObj.setAlpha(alpha); ram->render(zRObj); suchFilterT->render(zRObj); suchFilter->render(zRObj); suchen->render(zRObj); seiten->render(zRObj); weiter->render(zRObj); zurück->render(zRObj); liste->render(zRObj); auswahl->render(zRObj); zRObj.releaseAlpha(); laden->render(zRObj); zRObj.releaseDrawOptions(); } // constant bool SpieleKaufen::istSichtbar() const { return sichtbar; }