KartenKaufen.cpp 34 KB

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