12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052 |
- #include "KartenKaufen.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 KarteKaufenKSGSAktion(
- void* p, RCArray<KSGSVariable>* parameter, KSGSVariable** retVal)
- {
- if (!p) return;
- ((KartenKaufenAuswahl*)p)->ksgsAktion(parameter, retVal);
- }
- // Inhalt der KartenKaufenAuswahl Klasse aus KartenKaufen.h
- // Konstruktor
- KartenKaufenAuswahl::KartenKaufenAuswahl()
- : Thread()
- {
- karteId = 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->setSchriftZ(
- dynamic_cast<Schrift*>(uiFactory.initParam.schrift->getThis()));
- fenster->setSize(555, 380);
- fenster->setCallbackParam(this);
- fenster->setCallbackFunktion(KarteKaufenKSGSAktion);
- }
- 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
- KartenKaufenAuswahl::~KartenKaufenAuswahl()
- {
- if (fenster)
- {
- fenster->reset();
- fenster->release();
- }
- ram->release();
- laden->release();
- if (ksgs) Framework::getDLLRegister()->releaseDLL("KSGScript.dll");
- }
- // nicht constant
- void KartenKaufenAuswahl::ladeKarteSeite(int id)
- {
- if (run) warteAufThread(2000);
- if (run) return;
- karteId = id;
- aktion = 1;
- start();
- }
- void KartenKaufenAuswahl::reset()
- {
- if (run) warteAufThread(2000);
- if (run) return;
- aktion = 0;
- start();
- }
- void KartenKaufenAuswahl::thread()
- {
- laden->setSichtbar(1);
- if (!aktion || karteId)
- {
- while (alpha)
- Sleep(100);
- if (!aktion) karteId = 0;
- if (fenster) fenster->reset();
- }
- if (aktion)
- {
- while (alpha)
- Sleep(100);
- if (!shopClient) shopClient = mainClient->createShopServerClient();
- if (shopClient && shopClient->verbinde())
- {
- shopClient->ladeKarteSeite(karteId);
- shopClient->trenne(0);
- }
- Text* pfad = new Text("data/tmp/shop/kaufen/karten/");
- pfad->append(karteId);
- pfad->append("/seite.ksgs");
- if (fenster)
- {
- fenster->setScriptDatei(pfad);
- fenster->neuLaden();
- }
- }
- laden->setSichtbar(0);
- run = 0;
- }
- void KartenKaufenAuswahl::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->getKarteBesitzStatus(karteId);
- 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->getKartePreis(karteId, 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->getKarteTestversion(karteId);
- 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->istKarteErwerbbar(karteId);
- 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->karteErwerben(karteId, testVersion))
- {
- nachLogin->zNachrichtenListe()->addNachricht(
- new Text("Fehler"),
- new Text(shopClient->getLetzterFehler()),
- new Text("Ok"),
- 0);
- }
- 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 KartenKaufenAuswahl::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 KartenKaufenAuswahl::doTastaturEreignis(TastaturEreignis& te)
- {
- if (run) return;
- if (fenster) fenster->doTastaturEreignis(te);
- }
- bool KartenKaufenAuswahl::tick(double zeit)
- {
- bool rend = (fenster && !run) ? fenster->tick(zeit) : 0;
- rend |= laden->tick(zeit);
- if ((run || !karteId) && alpha > 0)
- {
- if (alpha - zeit * 150 < 0)
- alpha = 0;
- else
- alpha -= (unsigned char)(zeit * 150);
- rend = 1;
- }
- if (!run && karteId && alpha < 255)
- {
- if (alpha + zeit * 150 > 255)
- alpha = 255;
- else
- alpha += (unsigned char)(zeit * 150);
- rend = 1;
- }
- return rend;
- }
- void KartenKaufenAuswahl::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 KartenKaufenListeEintrag Klasse aus KartenKaufen.h
- // Konstruktor
- KartenKaufenListeEintrag::KartenKaufenListeEintrag(int id)
- : ReferenceCounter()
- {
- karteId = 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, "Karte auswählen.");
- auswählen->setRahmenBreite(1);
- LTDBDatei* datei = new LTDBDatei();
- Text* bdpf = new Text("data/tmp/shop/kaufen/karten/");
- 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
- KartenKaufenListeEintrag::~KartenKaufenListeEintrag()
- {
- auswählen->release();
- if (hintergrund) hintergrund->release();
- ausgewählt->release();
- ram->release();
- }
- // nicht constant
- void KartenKaufenListeEintrag::resetAuswahl()
- {
- ausw = 0;
- }
- bool KartenKaufenListeEintrag::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 KartenKaufenListeEintrag::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)(zeit * 150);
- 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)(zeit * 150);
- ausgewählt->setFarbe(
- ((a << 24) & 0xFF000000) | (ausgewählt->getFarbe() & 0xFFFFFF));
- rend = 1;
- }
- bool ret = rend;
- rend = 0;
- return ret;
- }
- void KartenKaufenListeEintrag::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 KartenKaufenListeEintrag::getKarteId() const
- {
- return karteId;
- }
- // Inhalt der KartenKaufenListe Klasse aus KartenKaufen.h
- // Konstruktor
- KartenKaufenListe::KartenKaufenListe()
- : ReferenceCounter()
- {
- pos = Punkt(5, 55);
- ram = new LRahmen();
- ram->setSize(215, 380);
- ram->setFarbe(0xFFFFFFFF);
- einträge = new RCArray<KartenKaufenListeEintrag>();
- vScroll = new VScrollBar();
- vScroll->setKlickScroll(10);
- vScroll->update(0, 380);
- rend = 0;
- }
- // Destruktor
- KartenKaufenListe::~KartenKaufenListe()
- {
- ram->release();
- einträge->release();
- vScroll->release();
- }
- // nicht constant
- void KartenKaufenListe::ladeKarten(Array<int>* karten)
- {
- leeren();
- int anz = karten->getEintragAnzahl();
- if (!shopClient) shopClient = mainClient->createShopServerClient();
- if (shopClient && shopClient->verbinde())
- {
- for (int i = 0; i < anz; i++)
- {
- if (shopClient->ladeKarteTitel(karten->hat(i) ? karten->get(i) : 0))
- einträge->add(new KartenKaufenListeEintrag(
- karten->hat(i) ? karten->get(i) : 0));
- }
- shopClient->trenne(0);
- }
- vScroll->update(anz * 100, 380);
- rend = 1;
- }
- void KartenKaufenListe::leeren()
- {
- cs.lock();
- einträge->leeren();
- cs.unlock();
- vScroll->update(0, 380);
- rend = 1;
- }
- int KartenKaufenListe::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)->getKarteId();
- me.my += 100;
- }
- if (ret)
- {
- for (int i = 0; i < anz; i++)
- {
- if (einträge->z(i)->getKarteId() != ret)
- einträge->z(i)->resetAuswahl();
- }
- }
- cs.unlock();
- me.mx = mx;
- me.my = my;
- return ret;
- }
- bool KartenKaufenListe::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 KartenKaufenListe::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 KartenKaufenListe::getEintragAnzahl()
- {
- return einträge->getEintragAnzahl();
- }
- // Inhalt der KartenKaufen Klasse aus KartenKaufen.h
- // Konstruktor
- KartenKaufen::KartenKaufen()
- : 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);
- spielArt = uiFactory.createAuswahlBox(uiFactory.initParam);
- spielArt->setStyle(
- AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MausBuffer
- | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Hintergrund
- | AuswahlBox::Style::Rahmen | AuswahlBox::Style::Sichtbar
- | AuswahlBox::Style::VScroll | AuswahlBox::Style::MaxHeight);
- spielArt->setSize(200, 20);
- spielArt->setPosition(5, 5);
- spielArt->setEintragHeight(20);
- spielArt->addEintrag("Spiel Art wählen");
- suchFilterT
- = initTextFeld(210, 5, 70, 20, TextFeld::Style::Text, "Suchfilter:");
- suchFilter = initTextFeld(285, 5, 225, 20, TextFeld::Style::TextFeld, "");
- initToolTip(
- suchFilter, "Gebe etwas vom Namen der Karte ein, nach der du suchst.");
- suchen = initKnopf(515, 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 KartenKaufenListe();
- auswahl = new KartenKaufenAuswahl();
- laden = (Framework::Animation2D*)ladeAnimation->dublizieren();
- laden->setPosition(365, 195);
- laden->setSichtbar(0);
- tickVal = 0;
- seite = 0;
- maxSeite = 0;
- rend = 0;
- aktion = 0;
- start();
- }
- // Destruktor
- KartenKaufen::~KartenKaufen()
- {
- spielArt->release();
- suchText->release();
- ram->release();
- suchFilterT->release();
- suchFilter->release();
- suchen->release();
- seiten->release();
- weiter->release();
- zurück->release();
- liste->release();
- auswahl->warteAufThread(10000);
- auswahl->ende();
- auswahl->release();
- laden->release();
- }
- // nicht constant
- void KartenKaufen::setSichtbar(bool sicht)
- {
- sichtbar = sicht;
- if (!run && sichtbar)
- {
- aktion = 0;
- start();
- }
- }
- void KartenKaufen::thread()
- {
- laden->setSichtbar(1);
- if (!aktion)
- {
- Array<int>* saList = infoClient->getAccountSpielArtListe();
- if (saList)
- {
- RCArray<Text>* saNamen = new RCArray<Text>();
- int anz = saList->getEintragAnzahl();
- for (int i = 0; i < anz; i++)
- {
- if (!saList->hat(i)) continue;
- Text* name = infoClient->getSpielName(
- saList->hat(i) ? saList->get(i) : 0);
- if (name) saNamen->add(name);
- }
- spielArt->lockZeichnung();
- spielArt->setAuswahl(0);
- anz = spielArt->getEintragAnzahl();
- for (int i = 1; i < anz; i++)
- spielArt->removeEintrag(1);
- anz = saNamen->getEintragAnzahl();
- for (int i = 0; i < anz; i++)
- {
- if (saNamen->z(i))
- spielArt->addEintrag(saNamen->z(i)->getText());
- }
- spielArt->unlockZeichnung();
- saNamen->release();
- saList->release();
- }
- if (!liste->getEintragAnzahl())
- {
- uiFactory.initParam.bildschirm->lock();
- suchText->setText(suchFilter->zText()->getText());
- seite = 1;
- maxSeite = 1;
- aktion = 1;
- uiFactory.initParam.bildschirm->unlock();
- }
- if (!aktion)
- {
- laden->setSichtbar(0);
- return;
- }
- }
- int spielArtId = 0;
- if (spielArt->getAuswahl() > 0)
- spielArtId = infoClient->getSpielId(
- spielArt->zEintrag(spielArt->getAuswahl())->zText()->getText());
- Array<int>* list = 0;
- if (!shopClient) shopClient = mainClient->createShopServerClient();
- if (shopClient && shopClient->verbinde())
- {
- list = shopClient->suchKarten(suchText->getText(), spielArtId);
- 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->ladeKarten(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);
- }
- void KartenKaufen::doPublicMausEreignis(MausEreignis& me)
- {
- if (!sichtbar || run) return;
- int mx = me.mx;
- int my = me.my;
- me.mx -= pos.x;
- me.my -= pos.y;
- spielArt->doPublicMausEreignis(me);
- suchFilter->doPublicMausEreignis(me);
- int auswId = liste->doPublicMausEreignis(me);
- if (auswId) auswahl->ladeKarteSeite(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;
- aktion = 1;
- start();
- break;
- case 2: // Seite zurück blättern
- seite--;
- if (seite < 1) seite = 1;
- aktion = 1;
- start();
- break;
- case 3: // Seite vorwärts blättern
- seite++;
- if (seite > maxSeite) seite = maxSeite;
- aktion = 1;
- start();
- break;
- }
- }
- me.mx = mx;
- me.my = my;
- }
- void KartenKaufen::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 KartenKaufen::tick(double zeit)
- {
- rend |= spielArt->tick(zeit);
- rend |= suchFilter->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 KartenKaufen::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);
- spielArt->render(zRObj);
- zRObj.releaseAlpha();
- laden->render(zRObj);
- zRObj.releaseDrawOptions();
- }
- // constant
- bool KartenKaufen::istSichtbar() const
- {
- return sichtbar;
- }
|