123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047 |
- #include "SpieleKaufen.h"
- #include <AlphaFeld.h>
- #include <DateiSystem.h>
- #include <Globals.h>
- #include <KSGTDatei.h>
- #include <Punkt.h>
- #include <Rahmen.h>
- #include "../../../Global/Initialisierung.h"
- #include "../../../Global/Variablen.h"
- void SpielKaufenKSGSAktion(
- void* p, RCArray<KSGSVariable>* 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<Bildschirm*>(
- uiFactory.initParam.bildschirm->getThis()));
- fenster->setSchriftZ(
- dynamic_cast<Schrift*>(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<KSGSVariable>* 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<Text>* zeile = new RCArray<Text>();
- 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<SpieleKaufenListeEintrag>();
- 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<int>* 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<int>* 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<int>* slist = new Array<int>();
- 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;
- }
|