KartenKaufen.cpp 30 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052
  1. #include "KartenKaufen.h"
  2. #include <AlphaFeld.h>
  3. #include <DateiSystem.h>
  4. #include <Globals.h>
  5. #include <KSGTDatei.h>
  6. #include <Punkt.h>
  7. #include <Rahmen.h>
  8. #include "../../../Global/Initialisierung.h"
  9. #include "../../../Global/Variablen.h"
  10. void KarteKaufenKSGSAktion(
  11. void* p, RCArray<KSGSVariable>* parameter, KSGSVariable** retVal)
  12. {
  13. if (!p) return;
  14. ((KartenKaufenAuswahl*)p)->ksgsAktion(parameter, retVal);
  15. }
  16. // Inhalt der KartenKaufenAuswahl Klasse aus KartenKaufen.h
  17. // Konstruktor
  18. KartenKaufenAuswahl::KartenKaufenAuswahl()
  19. : Thread()
  20. {
  21. karteId = 0;
  22. alpha = 0;
  23. ksgs = Framework::getDLLRegister()->ladeDLL(
  24. "KSGScript.dll", "data/bin/KSGScript.dll");
  25. if (ksgs)
  26. {
  27. KSGSGetZeichnung getKSGScript
  28. = (KSGSGetZeichnung)GetProcAddress(ksgs, KSGS_START_FUNKTION);
  29. if (getKSGScript)
  30. {
  31. fenster = getKSGScript();
  32. fenster->setSchriftZ(
  33. dynamic_cast<Schrift*>(uiFactory.initParam.schrift->getThis()));
  34. fenster->setSize(555, 380);
  35. fenster->setCallbackParam(this);
  36. fenster->setCallbackFunktion(KarteKaufenKSGSAktion);
  37. }
  38. else
  39. {
  40. fenster = 0;
  41. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  42. new Text(
  43. "Der Einstiegspunkt '" KSGS_START_FUNKTION
  44. "' in der DLL-Datei "
  45. "'data/bin/KSGScript.dll' konnte nicht gefunden werden."),
  46. new Text("Ok"),
  47. 0);
  48. }
  49. }
  50. else
  51. {
  52. fenster = 0;
  53. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  54. new Text("Die DLL-Datei 'data/bin/KSGScript.dll' konnte nicht "
  55. "geladen werden."),
  56. new Text("Ok"),
  57. 0);
  58. }
  59. ram = new LRahmen();
  60. ram->setSize(555, 380);
  61. ram->setFarbe(0xFFFFFFFF);
  62. laden = (Framework::Animation2D*)ladeAnimation->dublizieren();
  63. laden->setPosition(252, 165);
  64. laden->setSichtbar(0);
  65. pos = Punkt(220, 55);
  66. aktion = 0;
  67. }
  68. // Destruktor
  69. KartenKaufenAuswahl::~KartenKaufenAuswahl()
  70. {
  71. if (fenster)
  72. {
  73. fenster->reset();
  74. fenster->release();
  75. }
  76. ram->release();
  77. laden->release();
  78. if (ksgs) Framework::getDLLRegister()->releaseDLL("KSGScript.dll");
  79. }
  80. // nicht constant
  81. void KartenKaufenAuswahl::ladeKarteSeite(int id)
  82. {
  83. if (run) warteAufThread(2000);
  84. if (run) return;
  85. karteId = id;
  86. aktion = 1;
  87. start();
  88. }
  89. void KartenKaufenAuswahl::reset()
  90. {
  91. if (run) warteAufThread(2000);
  92. if (run) return;
  93. aktion = 0;
  94. start();
  95. }
  96. void KartenKaufenAuswahl::thread()
  97. {
  98. laden->setSichtbar(1);
  99. if (!aktion || karteId)
  100. {
  101. while (alpha)
  102. Sleep(100);
  103. if (!aktion) karteId = 0;
  104. if (fenster) fenster->reset();
  105. }
  106. if (aktion)
  107. {
  108. while (alpha)
  109. Sleep(100);
  110. if (!shopClient) shopClient = mainClient->createShopServerClient();
  111. if (shopClient && shopClient->verbinde())
  112. {
  113. shopClient->ladeKarteSeite(karteId);
  114. shopClient->trenne(0);
  115. }
  116. Text* pfad = new Text("data/tmp/shop/kaufen/karten/");
  117. pfad->append(karteId);
  118. pfad->append("/seite.ksgs");
  119. if (fenster)
  120. {
  121. fenster->setScriptDatei(pfad);
  122. fenster->neuLaden();
  123. }
  124. }
  125. laden->setSichtbar(0);
  126. run = 0;
  127. }
  128. void KartenKaufenAuswahl::ksgsAktion(
  129. RCArray<KSGSVariable>* parameter, KSGSVariable** retVal)
  130. {
  131. KSGSVariable* befehl = parameter->z(0);
  132. if (!befehl) return;
  133. Text* b = befehl->getText();
  134. if (!b) return;
  135. if (b->istGleich("GetBesitzStatus"))
  136. {
  137. int besitz = 0;
  138. if (!shopClient) shopClient = mainClient->createShopServerClient();
  139. if (shopClient && shopClient->verbinde())
  140. {
  141. besitz = shopClient->getKarteBesitzStatus(karteId);
  142. shopClient->trenne(0);
  143. }
  144. KSGSGetVariable getKSGSVariable
  145. = (KSGSGetVariable)GetProcAddress(ksgs, KSGS_VARIABLE_FUNKTION);
  146. if (getKSGSVariable)
  147. {
  148. KSGSVariableDef def
  149. = {KSGS_INT, 0, 3, (Text() += besitz).getText()};
  150. *retVal = getKSGSVariable(fenster, &def);
  151. }
  152. else
  153. {
  154. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  155. new Text(
  156. "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION
  157. "' in der DLL-Datei "
  158. "'data/bin/KSGScript.dll' konnte nicht gefunden werden."),
  159. new Text("Ok"),
  160. 0);
  161. }
  162. b->release();
  163. return;
  164. }
  165. if (b->istGleich("GetPreis"))
  166. {
  167. KSGSVariable* version = parameter->z(1);
  168. if (!version)
  169. {
  170. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  171. new Text(
  172. "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
  173. "Sie könnte eventuell nicht richtig funktionieren."),
  174. new Text("Ok"),
  175. 0);
  176. }
  177. else
  178. {
  179. bool testVersion = !version->getInt();
  180. int preis = 0;
  181. if (!shopClient) shopClient = mainClient->createShopServerClient();
  182. if (shopClient && shopClient->verbinde())
  183. {
  184. preis = shopClient->getKartePreis(karteId, testVersion);
  185. shopClient->trenne(0);
  186. }
  187. KSGSGetVariable getKSGSVariable
  188. = (KSGSGetVariable)GetProcAddress(ksgs, KSGS_VARIABLE_FUNKTION);
  189. if (getKSGSVariable)
  190. {
  191. KSGSVariableDef def
  192. = {KSGS_INT, 0, 3, (Text() += preis).getText()};
  193. *retVal = getKSGSVariable(fenster, &def);
  194. }
  195. else
  196. {
  197. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  198. new Text("Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION
  199. "' in der DLL-Datei "
  200. "'data/bin/KSGScript.dll' konnte nicht gefunden "
  201. "werden."),
  202. new Text("Ok"),
  203. 0);
  204. }
  205. }
  206. b->release();
  207. return;
  208. }
  209. if (b->istGleich("GetTestVersionVerbleibend"))
  210. {
  211. int verbleibend = 0;
  212. if (!shopClient) shopClient = mainClient->createShopServerClient();
  213. if (shopClient && shopClient->verbinde())
  214. {
  215. verbleibend = shopClient->getKarteTestversion(karteId);
  216. shopClient->trenne(0);
  217. }
  218. KSGSGetVariable getKSGSVariable
  219. = (KSGSGetVariable)GetProcAddress(ksgs, KSGS_VARIABLE_FUNKTION);
  220. if (getKSGSVariable)
  221. {
  222. KSGSVariableDef def
  223. = {KSGS_INT, 0, 3, (Text() += verbleibend).getText()};
  224. *retVal = getKSGSVariable(fenster, &def);
  225. }
  226. else
  227. {
  228. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  229. new Text(
  230. "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION
  231. "' in der DLL-Datei "
  232. "'data/bin/KSGScript.dll' konnte nicht gefunden werden."),
  233. new Text("Ok"),
  234. 0);
  235. }
  236. b->release();
  237. return;
  238. }
  239. if (b->istGleich("GetErwerbbarStatus"))
  240. {
  241. int erwerbbar = 0;
  242. if (!shopClient) shopClient = mainClient->createShopServerClient();
  243. if (shopClient && shopClient->verbinde())
  244. {
  245. erwerbbar = shopClient->istKarteErwerbbar(karteId);
  246. shopClient->trenne(0);
  247. }
  248. KSGSGetVariable getKSGSVariable
  249. = (KSGSGetVariable)GetProcAddress(ksgs, KSGS_VARIABLE_FUNKTION);
  250. if (getKSGSVariable)
  251. {
  252. KSGSVariableDef def
  253. = {KSGS_INT, 0, 3, (Text() += erwerbbar).getText()};
  254. *retVal = getKSGSVariable(fenster, &def);
  255. }
  256. else
  257. {
  258. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  259. new Text(
  260. "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION
  261. "' in der DLL-Datei "
  262. "'data/bin/KSGScript.dll' konnte nicht gefunden werden."),
  263. new Text("Ok"),
  264. 0);
  265. }
  266. b->release();
  267. return;
  268. }
  269. if (b->istGleich("GetKupfer"))
  270. {
  271. int kupfer = infoClient->getKupfer();
  272. KSGSGetVariable getKSGSVariable
  273. = (KSGSGetVariable)GetProcAddress(ksgs, KSGS_VARIABLE_FUNKTION);
  274. if (getKSGSVariable)
  275. {
  276. KSGSVariableDef def
  277. = {KSGS_INT, 0, 3, (Text() += kupfer).getText()};
  278. *retVal = getKSGSVariable(fenster, &def);
  279. }
  280. else
  281. {
  282. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  283. new Text(
  284. "Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION
  285. "' in der DLL-Datei "
  286. "'data/bin/KSGScript.dll' konnte nicht gefunden werden."),
  287. new Text("Ok"),
  288. 0);
  289. }
  290. b->release();
  291. return;
  292. }
  293. if (b->istGleich("Kaufen"))
  294. {
  295. KSGSVariable* version = parameter->z(1);
  296. if (!version)
  297. {
  298. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  299. new Text(
  300. "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
  301. "Sie könnte eventuell nicht richtig funktionieren."),
  302. new Text("Ok"),
  303. 0);
  304. }
  305. else
  306. {
  307. bool testVersion = !version->getInt();
  308. if (!shopClient) shopClient = mainClient->createShopServerClient();
  309. if (shopClient && shopClient->verbinde())
  310. {
  311. if (!shopClient->karteErwerben(karteId, testVersion))
  312. {
  313. nachLogin->zNachrichtenListe()->addNachricht(
  314. new Text("Fehler"),
  315. new Text(shopClient->getLetzterFehler()),
  316. new Text("Ok"),
  317. 0);
  318. }
  319. shopClient->trenne(0);
  320. }
  321. else if (shopClient)
  322. {
  323. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  324. new Text(shopClient->getLetzterFehler()),
  325. new Text("Ok"),
  326. 0);
  327. }
  328. else
  329. {
  330. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  331. new Text(mainClient->getLetzterFehler()),
  332. new Text("Ok"),
  333. 0);
  334. }
  335. if (run) warteAufThread(2000);
  336. if (run)
  337. {
  338. b->release();
  339. return;
  340. }
  341. aktion = 1;
  342. start();
  343. }
  344. b->release();
  345. return;
  346. }
  347. if (b->istGleich("GetBild"))
  348. {
  349. KSGSVariable* pfad = parameter->z(1);
  350. KSGSVariable* name = parameter->z(2);
  351. if (!pfad || !name)
  352. {
  353. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  354. new Text(
  355. "Auf dieser Seite befindet sich ein Fehler im KSG-Script. "
  356. "Sie könnte eventuell nicht richtig funktionieren."),
  357. new Text("Ok"),
  358. 0);
  359. }
  360. else
  361. {
  362. Text* pf = pfad->getText();
  363. Text* n = name->getText();
  364. if (!pf || !n)
  365. {
  366. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  367. new Text(
  368. "Auf dieser Seite befindet sich ein Fehler im "
  369. "KSG-Script. "
  370. "Sie könnte eventuell nicht richtig funktionieren."),
  371. new Text("Ok"),
  372. 0);
  373. }
  374. else
  375. {
  376. KSGSGetVariable getKSGSVariable
  377. = (KSGSGetVariable)GetProcAddress(
  378. ksgs, KSGS_VARIABLE_FUNKTION);
  379. if (getKSGSVariable)
  380. {
  381. int p = n->positionVon(".ltdb/");
  382. if (p < 0)
  383. p = 0;
  384. else
  385. p += 6;
  386. Text nn = Text(pf->getText()) + "/"
  387. + (const char*)(n->getText() + p);
  388. Bild* b = bilder->get(nn);
  389. if (b)
  390. {
  391. KSGSVariableDef def = {KSGS_BILD, 0, 3, ""};
  392. KSGSVariable* ret = getKSGSVariable(fenster, &def);
  393. KSGSSetBild setKSGSBild = (KSGSSetBild)GetProcAddress(
  394. ksgs, KSGS_SET_BILD_FUNKTION);
  395. if (!setKSGSBild)
  396. {
  397. nachLogin->zNachrichtenListe()->addNachricht(
  398. new Text("Fehler"),
  399. new Text("Der Einstiegspunkt "
  400. "'" KSGS_SET_BILD_FUNKTION
  401. "' in der DLL-Datei "
  402. "'data/bin/KSGScript.dll' konnte "
  403. "nicht gefunden werden."),
  404. new Text("Ok"),
  405. 0);
  406. b->release();
  407. }
  408. else
  409. setKSGSBild(ret, b);
  410. *retVal = ret;
  411. }
  412. }
  413. else
  414. {
  415. nachLogin->zNachrichtenListe()->addNachricht(
  416. new Text("Fehler"),
  417. new Text("Der Einstiegspunkt '" KSGS_VARIABLE_FUNKTION
  418. "' in der DLL-Datei "
  419. "'data/bin/KSGScript.dll' konnte nicht "
  420. "gefunden werden."),
  421. new Text("Ok"),
  422. 0);
  423. }
  424. }
  425. if (pf) pf->release();
  426. if (n) n->release();
  427. }
  428. b->release();
  429. return;
  430. }
  431. }
  432. void KartenKaufenAuswahl::doPublicMausEreignis(MausEreignis& me)
  433. {
  434. if (run) return;
  435. me.mx -= pos.x;
  436. me.my -= pos.y;
  437. if (fenster) fenster->doPublicMausEreignis(me);
  438. me.mx += pos.x;
  439. me.my += pos.y;
  440. }
  441. void KartenKaufenAuswahl::doTastaturEreignis(TastaturEreignis& te)
  442. {
  443. if (run) return;
  444. if (fenster) fenster->doTastaturEreignis(te);
  445. }
  446. bool KartenKaufenAuswahl::tick(double zeit)
  447. {
  448. bool rend = (fenster && !run) ? fenster->tick(zeit) : 0;
  449. rend |= laden->tick(zeit);
  450. if ((run || !karteId) && alpha > 0)
  451. {
  452. if (alpha - zeit * 150 < 0)
  453. alpha = 0;
  454. else
  455. alpha -= (unsigned char)(zeit * 150);
  456. rend = 1;
  457. }
  458. if (!run && karteId && alpha < 255)
  459. {
  460. if (alpha + zeit * 150 > 255)
  461. alpha = 255;
  462. else
  463. alpha += (unsigned char)(zeit * 150);
  464. rend = 1;
  465. }
  466. return rend;
  467. }
  468. void KartenKaufenAuswahl::render(Bild& zRObj)
  469. {
  470. if (!zRObj.setDrawOptions(pos.x, pos.y, ram->getBreite(), ram->getHeight()))
  471. return;
  472. zRObj.setAlpha(alpha);
  473. ram->render(zRObj);
  474. if (fenster) fenster->render(zRObj);
  475. zRObj.releaseAlpha();
  476. laden->render(zRObj);
  477. zRObj.releaseDrawOptions();
  478. }
  479. // Inhalt der KartenKaufenListeEintrag Klasse aus KartenKaufen.h
  480. // Konstruktor
  481. KartenKaufenListeEintrag::KartenKaufenListeEintrag(int id)
  482. : ReferenceCounter()
  483. {
  484. karteId = id;
  485. auswählen = initKnopf(173, 73, 22, 22, 0, "");
  486. auswählen->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt
  487. | Knopf::Style::Rahmen | Knopf::Style::Hintergrund
  488. | Knopf::Style::HBild | Knopf::Style::KlickBuffer);
  489. auswählen->setHintergrundBildZ(
  490. bilder->get("data/client/bilder/shop.ltdb/weiter.png"));
  491. initToolTip(auswählen, "Karte auswählen.");
  492. auswählen->setRahmenBreite(1);
  493. LTDBDatei* datei = new LTDBDatei();
  494. Text* bdpf = new Text("data/tmp/shop/kaufen/karten/");
  495. bdpf->append(id);
  496. bdpf->append("/titelbg.ltdb");
  497. datei->setDatei(bdpf);
  498. hintergrund = datei->laden(0, new Text("auswbg.jpg"));
  499. datei->release();
  500. ausgewählt = new AlphaFeld();
  501. ausgewählt->setPosition(1, 1);
  502. ausgewählt->setSize(198, 98);
  503. ausgewählt->setFarbe(0x0000FF00);
  504. ausgewählt->setStrength(10);
  505. ram = new LRahmen();
  506. ram->setSize(200, 100);
  507. ram->setFarbe(0xFFFFFFFF);
  508. ausw = 0;
  509. rend = 0;
  510. }
  511. // Destruktor
  512. KartenKaufenListeEintrag::~KartenKaufenListeEintrag()
  513. {
  514. auswählen->release();
  515. if (hintergrund) hintergrund->release();
  516. ausgewählt->release();
  517. ram->release();
  518. }
  519. // nicht constant
  520. void KartenKaufenListeEintrag::resetAuswahl()
  521. {
  522. ausw = 0;
  523. }
  524. bool KartenKaufenListeEintrag::doPublicMausEreignis(MausEreignis& me)
  525. {
  526. bool vera = me.verarbeitet;
  527. auswählen->doPublicMausEreignis(me);
  528. if (!vera && me.verarbeitet && me.id == ME_RLinks)
  529. {
  530. ausw = 1;
  531. return 1;
  532. }
  533. return 0;
  534. }
  535. bool KartenKaufenListeEintrag::tick(double zeit)
  536. {
  537. rend |= ausgewählt->tick(zeit);
  538. rend |= auswählen->tick(zeit);
  539. int a = (ausgewählt->getFarbe() >> 24) & 0xFF;
  540. if (ausw && a < 255)
  541. {
  542. if (a + 150 * zeit > 255)
  543. a = 255;
  544. else
  545. a += (int)(zeit * 150);
  546. ausgewählt->setFarbe(
  547. ((a << 24) & 0xFF000000) | (ausgewählt->getFarbe() & 0xFFFFFF));
  548. rend = 1;
  549. }
  550. if (!ausw && a > 0)
  551. {
  552. if (a - 150 * zeit < 0)
  553. a = 0;
  554. else
  555. a += (int)(zeit * 150);
  556. ausgewählt->setFarbe(
  557. ((a << 24) & 0xFF000000) | (ausgewählt->getFarbe() & 0xFFFFFF));
  558. rend = 1;
  559. }
  560. bool ret = rend;
  561. rend = 0;
  562. return ret;
  563. }
  564. void KartenKaufenListeEintrag::render(int yOff, Bild& zRObj)
  565. {
  566. if (!zRObj.setDrawOptions(0, yOff, 200, 100)) return;
  567. ram->render(zRObj);
  568. if (hintergrund) zRObj.drawBild(1, 1, 198, 98, *hintergrund);
  569. ausgewählt->render(zRObj);
  570. auswählen->render(zRObj);
  571. zRObj.releaseDrawOptions();
  572. }
  573. // constant
  574. int KartenKaufenListeEintrag::getKarteId() const
  575. {
  576. return karteId;
  577. }
  578. // Inhalt der KartenKaufenListe Klasse aus KartenKaufen.h
  579. // Konstruktor
  580. KartenKaufenListe::KartenKaufenListe()
  581. : ReferenceCounter()
  582. {
  583. pos = Punkt(5, 55);
  584. ram = new LRahmen();
  585. ram->setSize(215, 380);
  586. ram->setFarbe(0xFFFFFFFF);
  587. einträge = new RCArray<KartenKaufenListeEintrag>();
  588. vScroll = new VScrollBar();
  589. vScroll->setKlickScroll(10);
  590. vScroll->update(0, 380);
  591. rend = 0;
  592. }
  593. // Destruktor
  594. KartenKaufenListe::~KartenKaufenListe()
  595. {
  596. ram->release();
  597. einträge->release();
  598. vScroll->release();
  599. }
  600. // nicht constant
  601. void KartenKaufenListe::ladeKarten(Array<int>* karten)
  602. {
  603. leeren();
  604. int anz = karten->getEintragAnzahl();
  605. if (!shopClient) shopClient = mainClient->createShopServerClient();
  606. if (shopClient && shopClient->verbinde())
  607. {
  608. for (int i = 0; i < anz; i++)
  609. {
  610. if (shopClient->ladeKarteTitel(karten->hat(i) ? karten->get(i) : 0))
  611. einträge->add(new KartenKaufenListeEintrag(
  612. karten->hat(i) ? karten->get(i) : 0));
  613. }
  614. shopClient->trenne(0);
  615. }
  616. vScroll->update(anz * 100, 380);
  617. rend = 1;
  618. }
  619. void KartenKaufenListe::leeren()
  620. {
  621. cs.lock();
  622. einträge->leeren();
  623. cs.unlock();
  624. vScroll->update(0, 380);
  625. rend = 1;
  626. }
  627. int KartenKaufenListe::doPublicMausEreignis(MausEreignis& me)
  628. {
  629. int mx = me.mx;
  630. int my = me.my;
  631. me.mx -= pos.x;
  632. me.my -= pos.y;
  633. vScroll->doMausMessage(200, 0, 15, 380, me);
  634. me.my += vScroll->getScroll();
  635. int ret = 0;
  636. cs.lock();
  637. int anz = einträge->getEintragAnzahl();
  638. for (int i = 0; i < anz; i++)
  639. {
  640. if (einträge->z(i)->doPublicMausEreignis(me))
  641. ret = einträge->z(i)->getKarteId();
  642. me.my += 100;
  643. }
  644. if (ret)
  645. {
  646. for (int i = 0; i < anz; i++)
  647. {
  648. if (einträge->z(i)->getKarteId() != ret)
  649. einträge->z(i)->resetAuswahl();
  650. }
  651. }
  652. cs.unlock();
  653. me.mx = mx;
  654. me.my = my;
  655. return ret;
  656. }
  657. bool KartenKaufenListe::tick(double zeit)
  658. {
  659. rend |= vScroll->getRend();
  660. cs.lock();
  661. int anz = einträge->getEintragAnzahl();
  662. for (int i = 0; i < anz; i++)
  663. rend |= einträge->z(i)->tick(zeit);
  664. cs.unlock();
  665. bool ret = rend;
  666. rend = 0;
  667. return ret;
  668. }
  669. void KartenKaufenListe::render(Bild& zRObj)
  670. {
  671. int br = ram->getBreite();
  672. int hö = ram->getHeight();
  673. if (!zRObj.setDrawOptions(pos.x, pos.y, br, hö)) return;
  674. ram->render(zRObj);
  675. cs.lock();
  676. int anz = einträge->getEintragAnzahl();
  677. for (int i = 0; i < anz; i++)
  678. einträge->z(i)->render(i * 100 - vScroll->getScroll(), zRObj);
  679. cs.unlock();
  680. vScroll->render(200, 0, 15, 380, zRObj);
  681. zRObj.releaseDrawOptions();
  682. }
  683. // constant
  684. int KartenKaufenListe::getEintragAnzahl()
  685. {
  686. return einträge->getEintragAnzahl();
  687. }
  688. // Inhalt der KartenKaufen Klasse aus KartenKaufen.h
  689. // Konstruktor
  690. KartenKaufen::KartenKaufen()
  691. : Thread()
  692. {
  693. Bild* shopZurück = bilder->get("data/client/bilder/shop.ltdb/zurück.png");
  694. Bild* shopWeiter = bilder->get("data/client/bilder/shop.ltdb/weiter.png");
  695. alpha = 255;
  696. sichtbar = 0;
  697. suchText = new Text("");
  698. ram = new LRahmen();
  699. ram->setSize(780, 440);
  700. ram->setFarbe(0xFFFFFFFF);
  701. pos = Punkt(10, 50);
  702. spielArt = uiFactory.createAuswahlBox(uiFactory.initParam);
  703. spielArt->setStyle(
  704. AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MausBuffer
  705. | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Hintergrund
  706. | AuswahlBox::Style::Rahmen | AuswahlBox::Style::Sichtbar
  707. | AuswahlBox::Style::VScroll | AuswahlBox::Style::MaxHeight);
  708. spielArt->setSize(200, 20);
  709. spielArt->setPosition(5, 5);
  710. spielArt->setEintragHeight(20);
  711. spielArt->addEintrag("Spiel Art wählen");
  712. suchFilterT
  713. = initTextFeld(210, 5, 70, 20, TextFeld::Style::Text, "Suchfilter:");
  714. suchFilter = initTextFeld(285, 5, 225, 20, TextFeld::Style::TextFeld, "");
  715. initToolTip(
  716. suchFilter, "Gebe etwas vom Namen der Karte ein, nach der du suchst.");
  717. suchen = initKnopf(515, 5, 100, 20, Knopf::Style::Sichtbar, "suchen");
  718. seiten = initTextFeld(55,
  719. 30,
  720. 250,
  721. 20,
  722. TextFeld::Style::Text | TextFeld::Style::VCenter,
  723. "Seite 0 von 0, 0 Funde.");
  724. zurück = initKnopf(5, 30, 20, 20, 0, "");
  725. zurück->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Hintergrund
  726. | Knopf::Style::HBild | Knopf::Style::KlickBuffer);
  727. zurück->setHintergrundBildZ(shopZurück);
  728. initToolTip(zurück, "Seite zurück blättern.");
  729. weiter = initKnopf(30, 30, 20, 20, 0, "");
  730. weiter->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Hintergrund
  731. | Knopf::Style::HBild | Knopf::Style::KlickBuffer);
  732. weiter->setHintergrundBildZ(shopWeiter);
  733. initToolTip(weiter, "Seite weiter blättern.");
  734. liste = new KartenKaufenListe();
  735. auswahl = new KartenKaufenAuswahl();
  736. laden = (Framework::Animation2D*)ladeAnimation->dublizieren();
  737. laden->setPosition(365, 195);
  738. laden->setSichtbar(0);
  739. tickVal = 0;
  740. seite = 0;
  741. maxSeite = 0;
  742. rend = 0;
  743. aktion = 0;
  744. start();
  745. }
  746. // Destruktor
  747. KartenKaufen::~KartenKaufen()
  748. {
  749. spielArt->release();
  750. suchText->release();
  751. ram->release();
  752. suchFilterT->release();
  753. suchFilter->release();
  754. suchen->release();
  755. seiten->release();
  756. weiter->release();
  757. zurück->release();
  758. liste->release();
  759. auswahl->warteAufThread(10000);
  760. auswahl->ende();
  761. auswahl->release();
  762. laden->release();
  763. }
  764. // nicht constant
  765. void KartenKaufen::setSichtbar(bool sicht)
  766. {
  767. sichtbar = sicht;
  768. if (!run && sichtbar)
  769. {
  770. aktion = 0;
  771. start();
  772. }
  773. }
  774. void KartenKaufen::thread()
  775. {
  776. laden->setSichtbar(1);
  777. if (!aktion)
  778. {
  779. Array<int>* saList = infoClient->getAccountSpielArtListe();
  780. if (saList)
  781. {
  782. RCArray<Text>* saNamen = new RCArray<Text>();
  783. int anz = saList->getEintragAnzahl();
  784. for (int i = 0; i < anz; i++)
  785. {
  786. if (!saList->hat(i)) continue;
  787. Text* name = infoClient->getSpielName(
  788. saList->hat(i) ? saList->get(i) : 0);
  789. if (name) saNamen->add(name);
  790. }
  791. spielArt->lockZeichnung();
  792. spielArt->setAuswahl(0);
  793. anz = spielArt->getEintragAnzahl();
  794. for (int i = 1; i < anz; i++)
  795. spielArt->removeEintrag(1);
  796. anz = saNamen->getEintragAnzahl();
  797. for (int i = 0; i < anz; i++)
  798. {
  799. if (saNamen->z(i))
  800. spielArt->addEintrag(saNamen->z(i)->getText());
  801. }
  802. spielArt->unlockZeichnung();
  803. saNamen->release();
  804. saList->release();
  805. }
  806. if (!liste->getEintragAnzahl())
  807. {
  808. uiFactory.initParam.bildschirm->lock();
  809. suchText->setText(suchFilter->zText()->getText());
  810. seite = 1;
  811. maxSeite = 1;
  812. aktion = 1;
  813. uiFactory.initParam.bildschirm->unlock();
  814. }
  815. if (!aktion)
  816. {
  817. laden->setSichtbar(0);
  818. return;
  819. }
  820. }
  821. int spielArtId = 0;
  822. if (spielArt->getAuswahl() > 0)
  823. spielArtId = infoClient->getSpielId(
  824. spielArt->zEintrag(spielArt->getAuswahl())->zText()->getText());
  825. Array<int>* list = 0;
  826. if (!shopClient) shopClient = mainClient->createShopServerClient();
  827. if (shopClient && shopClient->verbinde())
  828. {
  829. list = shopClient->suchKarten(suchText->getText(), spielArtId);
  830. shopClient->trenne(0);
  831. }
  832. if (!list)
  833. {
  834. laden->setSichtbar(0);
  835. run = 0;
  836. return;
  837. }
  838. Array<int>* slist = new Array<int>();
  839. int anz = list->getEintragAnzahl();
  840. maxSeite = anz / 10 + 1;
  841. if (!(anz % 10)) maxSeite--;
  842. while (anz <= seite * 10 && seite > 0)
  843. seite--;
  844. for (int i = seite * 10; i < anz && i < seite * 10 + 10; i++)
  845. slist->add(list->hat(i) ? list->get(i) : 0);
  846. list->release();
  847. auswahl->reset();
  848. liste->ladeKarten(slist);
  849. slist->release();
  850. Text* t = new Text("Seite ");
  851. t->append(maxSeite ? seite + 1 : 0);
  852. t->append(" von ");
  853. t->append(maxSeite);
  854. t->append(", ");
  855. t->append(anz);
  856. if (anz == 1)
  857. t->append(" Fund.");
  858. else
  859. t->append(" Funde.");
  860. seiten->setText(t);
  861. zurück->setStyle(TextFeld::Style::Erlaubt, seite > 0);
  862. weiter->setStyle(TextFeld::Style::Erlaubt, seite + 1 < maxSeite);
  863. laden->setSichtbar(0);
  864. }
  865. void KartenKaufen::doPublicMausEreignis(MausEreignis& me)
  866. {
  867. if (!sichtbar || run) return;
  868. int mx = me.mx;
  869. int my = me.my;
  870. me.mx -= pos.x;
  871. me.my -= pos.y;
  872. spielArt->doPublicMausEreignis(me);
  873. suchFilter->doPublicMausEreignis(me);
  874. int auswId = liste->doPublicMausEreignis(me);
  875. if (auswId) auswahl->ladeKarteSeite(auswId);
  876. auswahl->doPublicMausEreignis(me);
  877. int ak = 0;
  878. bool tmp = me.verarbeitet;
  879. suchen->doPublicMausEreignis(me);
  880. ak = me.verarbeitet ? 1 : 0;
  881. zurück->doPublicMausEreignis(me);
  882. ak = me.verarbeitet && !ak ? 2 : ak;
  883. weiter->doPublicMausEreignis(me);
  884. ak = me.verarbeitet && !ak ? 3 : ak;
  885. if (tmp) ak = 0;
  886. if (me.id == ME_RLinks)
  887. {
  888. switch (ak)
  889. {
  890. case 1: // Suchen
  891. suchText->setText(suchFilter->zText()->getText());
  892. seite = 1;
  893. maxSeite = 1;
  894. aktion = 1;
  895. start();
  896. break;
  897. case 2: // Seite zurück blättern
  898. seite--;
  899. if (seite < 1) seite = 1;
  900. aktion = 1;
  901. start();
  902. break;
  903. case 3: // Seite vorwärts blättern
  904. seite++;
  905. if (seite > maxSeite) seite = maxSeite;
  906. aktion = 1;
  907. start();
  908. break;
  909. }
  910. }
  911. me.mx = mx;
  912. me.my = my;
  913. }
  914. void KartenKaufen::doTastaturEreignis(TastaturEreignis& te)
  915. {
  916. if (!sichtbar || run) return;
  917. bool vera = te.verarbeitet;
  918. suchFilter->doTastaturEreignis(te);
  919. if (!vera && te.verarbeitet && te.virtualKey == T_Enter
  920. && te.id == TE_Release)
  921. {
  922. MausEreignis me;
  923. me.id = ME_RLinks;
  924. me.verarbeitet = 0;
  925. me.mx = suchen->getX() + 1 + pos.x;
  926. me.my = suchen->getY() + 1 + pos.y;
  927. doPublicMausEreignis(me);
  928. }
  929. auswahl->doTastaturEreignis(te);
  930. }
  931. bool KartenKaufen::tick(double zeit)
  932. {
  933. rend |= spielArt->tick(zeit);
  934. rend |= suchFilter->tick(zeit);
  935. rend |= suchen->tick(zeit);
  936. rend |= weiter->tick(zeit);
  937. rend |= zurück->tick(zeit);
  938. rend |= liste->tick(zeit);
  939. rend |= auswahl->tick(zeit);
  940. rend |= laden->tick(zeit);
  941. tickVal += zeit * 250;
  942. int val = (int)tickVal;
  943. if (val < 1)
  944. {
  945. bool ret = rend;
  946. rend = 0;
  947. return ret;
  948. }
  949. if (val > 10) val = 10;
  950. tickVal -= val;
  951. if (sichtbar && alpha != 255 && !run)
  952. {
  953. if (alpha + val > 255)
  954. alpha = 255;
  955. else
  956. alpha += val;
  957. rend = 1;
  958. }
  959. if (sichtbar && alpha != 125 && run)
  960. {
  961. if (alpha > 125)
  962. {
  963. if (alpha - val < 125)
  964. alpha = 125;
  965. else
  966. alpha -= val;
  967. rend = 1;
  968. }
  969. else
  970. {
  971. if (alpha + val > 125)
  972. alpha = 125;
  973. else
  974. alpha += 125;
  975. rend = 1;
  976. }
  977. }
  978. if (!sichtbar && alpha != 0)
  979. {
  980. if (alpha - val < 0)
  981. alpha = 0;
  982. else
  983. alpha -= val;
  984. rend = 1;
  985. }
  986. bool ret = rend;
  987. rend = 0;
  988. return ret;
  989. }
  990. void KartenKaufen::render(Bild& zRObj)
  991. {
  992. if (!alpha) return;
  993. int br = ram->getBreite();
  994. int hö = ram->getHeight();
  995. if (!zRObj.setDrawOptions(pos.x, pos.y, br, hö)) return;
  996. zRObj.setAlpha(alpha);
  997. ram->render(zRObj);
  998. suchFilterT->render(zRObj);
  999. suchFilter->render(zRObj);
  1000. suchen->render(zRObj);
  1001. seiten->render(zRObj);
  1002. weiter->render(zRObj);
  1003. zurück->render(zRObj);
  1004. liste->render(zRObj);
  1005. auswahl->render(zRObj);
  1006. spielArt->render(zRObj);
  1007. zRObj.releaseAlpha();
  1008. laden->render(zRObj);
  1009. zRObj.releaseDrawOptions();
  1010. }
  1011. // constant
  1012. bool KartenKaufen::istSichtbar() const
  1013. {
  1014. return sichtbar;
  1015. }