KartenKaufen.cpp 32 KB

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