KartenKaufen.cpp 33 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078
  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, 55 );
  58. aktion = 0;
  59. }
  60. // Destruktor
  61. KartenKaufenAuswahl::~KartenKaufenAuswahl()
  62. {
  63. if( fenster )
  64. {
  65. fenster->zurücksetzen();
  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->zurücksetzen();
  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. // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
  443. Thread * KartenKaufenAuswahl::release()
  444. {
  445. if( ref == 2 && run )
  446. {
  447. warteAufThread( 2000 );
  448. if( run )
  449. ende();
  450. }
  451. return Thread::release();
  452. }
  453. // Inhalt der KartenKaufenListeEintrag Klasse aus KartenKaufen.h
  454. // Konstruktor
  455. KartenKaufenListeEintrag::KartenKaufenListeEintrag( int id, Schrift * schrift )
  456. {
  457. karteId = id;
  458. auswählen = initKnopf( 173, 73, 22, 22, 0, 0, "" );
  459. auswählen->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Rahmen | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  460. auswählen->setHintergrundBildZ( bilder->get( "data/client/bilder/shop.ltdb/weiter.png" ) );
  461. initToolTip( auswählen, "Karte auswählen.", schrift, hauptScreen );
  462. schrift->release();
  463. auswählen->setRahmenBreite( 1 );
  464. LTDBDatei * datei = new LTDBDatei();
  465. Text * bdpf = new Text( "data/tmp/shop/kaufen/karten/" );
  466. bdpf->append( id );
  467. bdpf->append( "/titelbg.ltdb" );
  468. datei->setDatei( bdpf );
  469. hintergrund = datei->laden( 0, new Text( "auswbg.jpg" ) );
  470. datei->release();
  471. ausgewählt = new AlphaFeld();
  472. ausgewählt->setPosition( 1, 1 );
  473. ausgewählt->setSize( 198, 98 );
  474. ausgewählt->setFarbe( 0x0000FF00 );
  475. ausgewählt->setStrength( 10 );
  476. ram = new LRahmen();
  477. ram->setSize( 200, 100 );
  478. ram->setFarbe( 0xFFFFFFFF );
  479. ausw = 0;
  480. rend = 0;
  481. ref = 1;
  482. }
  483. // Destruktor
  484. KartenKaufenListeEintrag::~KartenKaufenListeEintrag()
  485. {
  486. auswählen->release();
  487. if( hintergrund )
  488. hintergrund->release();
  489. ausgewählt->release();
  490. ram->release();
  491. }
  492. // nicht constant
  493. void KartenKaufenListeEintrag::resetAuswahl()
  494. {
  495. ausw = 0;
  496. }
  497. bool KartenKaufenListeEintrag::doPublicMausEreignis( MausEreignis & me )
  498. {
  499. bool vera = me.verarbeitet;
  500. auswählen->doPublicMausEreignis( me );
  501. if( !vera && me.verarbeitet &&me.id == ME_RLinks )
  502. {
  503. ausw = 1;
  504. return 1;
  505. }
  506. return 0;
  507. }
  508. bool KartenKaufenListeEintrag::tick( double zeit )
  509. {
  510. rend |= ausgewählt->tick( zeit );
  511. rend |= auswählen->tick( zeit );
  512. int a = ( ausgewählt->getFarbe() >> 24 ) & 0xFF;
  513. if( ausw && a < 255 )
  514. {
  515. if( a + 150 * zeit > 255 )
  516. a = 255;
  517. else
  518. a += (int)( zeit * 150 );
  519. ausgewählt->setFarbe( ( ( a << 24 ) & 0xFF000000 ) | ( ausgewählt->getFarbe() & 0xFFFFFF ) );
  520. rend = 1;
  521. }
  522. if( !ausw && a > 0 )
  523. {
  524. if( a - 150 * zeit < 0 )
  525. a = 0;
  526. else
  527. a += (int)( zeit * 150 );
  528. ausgewählt->setFarbe( ( ( a << 24 ) & 0xFF000000 ) | ( ausgewählt->getFarbe() & 0xFFFFFF ) );
  529. rend = 1;
  530. }
  531. bool ret = rend;
  532. rend = 0;
  533. return ret;
  534. }
  535. void KartenKaufenListeEintrag::render( int yOff, Bild & zRObj )
  536. {
  537. if( !zRObj.setDrawOptions( 0, yOff, 200, 100 ) )
  538. return;
  539. ram->render( zRObj );
  540. if( hintergrund )
  541. zRObj.drawBild( 1, 1, 198, 98, *hintergrund );
  542. ausgewählt->render( zRObj );
  543. auswählen->render( zRObj );
  544. zRObj.releaseDrawOptions();
  545. }
  546. // constant
  547. int KartenKaufenListeEintrag::getKarteId() const
  548. {
  549. return karteId;
  550. }
  551. // Reference Counting
  552. KartenKaufenListeEintrag *KartenKaufenListeEintrag::getThis()
  553. {
  554. ref++;
  555. return this;
  556. }
  557. KartenKaufenListeEintrag *KartenKaufenListeEintrag::release()
  558. {
  559. ref--;
  560. if( !ref )
  561. delete this;
  562. return 0;
  563. }
  564. // Inhalt der KartenKaufenListe Klasse aus KartenKaufen.h
  565. // Konstruktor
  566. KartenKaufenListe::KartenKaufenListe( Schrift * schrift )
  567. {
  568. s = schrift;
  569. pos = Punkt( 5, 55 );
  570. ram = new LRahmen();
  571. ram->setSize( 215, 380 );
  572. ram->setFarbe( 0xFFFFFFFF );
  573. einträge = new RCArray< KartenKaufenListeEintrag >();
  574. vScroll = new VScrollBar();
  575. vScroll->setKlickScroll( 10 );
  576. vScroll->update( 0, 380 );
  577. rend = 0;
  578. ref = 1;
  579. }
  580. // Destruktor
  581. KartenKaufenListe::~KartenKaufenListe()
  582. {
  583. s->release();
  584. ram->release();
  585. einträge->release();
  586. vScroll->release();
  587. }
  588. // nicht constant
  589. void KartenKaufenListe::ladeKarten( Array< int > * karten )
  590. {
  591. leeren();
  592. int anz = karten->getEintragAnzahl();
  593. if( !shopClient )
  594. shopClient = mainClient->createShopServerClient();
  595. if( shopClient &&shopClient->verbinde() )
  596. {
  597. for( int i = 0; i < anz; i++ )
  598. {
  599. if( shopClient->ladeKarteTitel( karten->hat( i ) ? karten->get( i ) : 0 ) )
  600. einträge->add( new KartenKaufenListeEintrag( karten->hat( i ) ? karten->get( i ) : 0, s->getThis() ) );
  601. }
  602. shopClient->trenne( 0 );
  603. }
  604. vScroll->update( anz * 100, 380 );
  605. rend = 1;
  606. }
  607. void KartenKaufenListe::leeren()
  608. {
  609. cs.lock();
  610. einträge->leeren();
  611. cs.unlock();
  612. vScroll->update( 0, 380 );
  613. rend = 1;
  614. }
  615. int KartenKaufenListe::doPublicMausEreignis( MausEreignis & me )
  616. {
  617. int mx = me.mx;
  618. int my = me.my;
  619. me.mx -= pos.x;
  620. me.my -= pos.y;
  621. vScroll->doMausMessage( 200, 0, 15, 380, me );
  622. me.my += vScroll->getScroll();
  623. int ret = 0;
  624. cs.lock();
  625. int anz = einträge->getEintragAnzahl();
  626. for( int i = 0; i < anz; i++ )
  627. {
  628. if( einträge->z( i )->doPublicMausEreignis( me ) )
  629. ret = einträge->z( i )->getKarteId();
  630. me.my += 100;
  631. }
  632. if( ret )
  633. {
  634. for( int i = 0; i < anz; i++ )
  635. {
  636. if( einträge->z( i )->getKarteId() != ret )
  637. einträge->z( i )->resetAuswahl();
  638. }
  639. }
  640. cs.unlock();
  641. me.mx = mx;
  642. me.my = my;
  643. return ret;
  644. }
  645. bool KartenKaufenListe::tick( double zeit )
  646. {
  647. rend |= vScroll->getRend();
  648. cs.lock();
  649. int anz = einträge->getEintragAnzahl();
  650. for( int i = 0; i < anz; i++ )
  651. rend |= einträge->z( i )->tick( zeit );
  652. cs.unlock();
  653. bool ret = rend;
  654. rend = 0;
  655. return ret;
  656. }
  657. void KartenKaufenListe::render( Bild & zRObj )
  658. {
  659. int br = ram->getBreite();
  660. int hö = ram->getHeight();
  661. if( !zRObj.setDrawOptions( pos.x, pos.y, br, hö ) )
  662. return;
  663. ram->render( zRObj );
  664. cs.lock();
  665. int anz = einträge->getEintragAnzahl();
  666. for( int i = 0; i < anz; i++ )
  667. einträge->z( i )->render( i * 100 - vScroll->getScroll(), zRObj );
  668. cs.unlock();
  669. vScroll->render( 200, 0, 15, 380, zRObj );
  670. zRObj.releaseDrawOptions();
  671. }
  672. // constant
  673. int KartenKaufenListe::getEintragAnzahl()
  674. {
  675. return einträge->getEintragAnzahl();
  676. }
  677. // Reference Counting
  678. KartenKaufenListe *KartenKaufenListe::getThis()
  679. {
  680. ref++;
  681. return this;
  682. }
  683. KartenKaufenListe *KartenKaufenListe::release()
  684. {
  685. ref--;
  686. if( !ref )
  687. delete this;
  688. return 0;
  689. }
  690. // Inhalt der KartenKaufen Klasse aus KartenKaufen.h
  691. // Konstruktor
  692. KartenKaufen::KartenKaufen( Schrift * zSchrift )
  693. : Thread()
  694. {
  695. Bild *shopZurück = bilder->get( "data/client/bilder/shop.ltdb/zurück.png" );
  696. Bild *shopWeiter = bilder->get( "data/client/bilder/shop.ltdb/weiter.png" );
  697. alpha = 255;
  698. sichtbar = 0;
  699. suchText = new Text( "" );
  700. ram = new LRahmen();
  701. ram->setSize( 780, 440 );
  702. ram->setFarbe( 0xFFFFFFFF );
  703. pos = Punkt( 10, 50 );
  704. spielArt = new AuswahlBox();
  705. spielArt->setStyle( AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Hintergrund |
  706. AuswahlBox::Style::Rahmen | AuswahlBox::Style::Sichtbar | AuswahlBox::Style::VScroll | AuswahlBox::Style::MaxHeight );
  707. spielArt->setSize( 200, 20 );
  708. spielArt->setPosition( 5, 5 );
  709. spielArt->setRahmenFarbe( 0xFFFFFFFF );
  710. spielArt->setRahmenBreite( 1 );
  711. spielArt->setMaxAuskappHeight( 100 );
  712. spielArt->setSchriftZ( zSchrift->getThis() );
  713. spielArt->setHintergrundFarbe( 0xFF000000 );
  714. spielArt->setMausEreignis( _ret1ME );
  715. spielArt->setAuswAlphaFeldFarbe( 0x5000FF00 );
  716. spielArt->setAuswAlphaFeldStrength( -10 );
  717. spielArt->setMausAlphaFeldFarbe( 0x1000FF00 );
  718. spielArt->setMausAlphaFeldStrength( -10 );
  719. spielArt->setEintragHeight( 20 );
  720. spielArt->addEintrag( "Spiel Art wählen" );
  721. suchFilterT = initTextFeld( 210, 5, 70, 20, zSchrift, TextFeld::Style::Text, "Suchfilter:" );
  722. suchFilter = initTextFeld( 285, 5, 225, 20, zSchrift, TextFeld::Style::TextFeld, "" );
  723. initToolTip( suchFilter, "Gebe etwas vom Namen der Karte ein, nach der du suchst.", zSchrift, hauptScreen );
  724. suchen = initKnopf( 515, 5, 100, 20, zSchrift, Knopf::Style::Sichtbar, "suchen" );
  725. seiten = initTextFeld( 55, 30, 250, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Seite 0 von 0, 0 Funde." );
  726. zurück = initKnopf( 5, 30, 20, 20, 0, 0, "" );
  727. zurück->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  728. zurück->setHintergrundBildZ( shopZurück );
  729. initToolTip( zurück, "Seite zurück blättern.", zSchrift, hauptScreen );
  730. weiter = initKnopf( 30, 30, 20, 20, 0, 0, "" );
  731. weiter->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Hintergrund | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  732. weiter->setHintergrundBildZ( shopWeiter );
  733. initToolTip( weiter, "Seite weiter blättern.", zSchrift, hauptScreen );
  734. liste = new KartenKaufenListe( zSchrift->getThis() );
  735. auswahl = new KartenKaufenAuswahl( zSchrift );
  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->release();
  760. laden->release();
  761. }
  762. // nicht constant
  763. void KartenKaufen::setSichtbar( bool sicht )
  764. {
  765. sichtbar = sicht;
  766. if( !run && sichtbar )
  767. {
  768. aktion = 0;
  769. start();
  770. }
  771. }
  772. void KartenKaufen::thread()
  773. {
  774. laden->setSichtbar( 1 );
  775. if( !aktion )
  776. {
  777. Array< int > *saList = infoClient->getAccountSpielArtListe();
  778. if( saList )
  779. {
  780. RCArray< Text > *saNamen = new RCArray< Text >();
  781. int anz = saList->getEintragAnzahl();
  782. for( int i = 0; i < anz; i++ )
  783. {
  784. if( !saList->hat( i ) )
  785. continue;
  786. Text * name = infoClient->getSpielName( saList->hat( i ) ? saList->get( i ) : 0 );
  787. if( name )
  788. saNamen->add( name );
  789. }
  790. spielArt->lockZeichnung();
  791. spielArt->setAuswahl( 0 );
  792. anz = spielArt->getEintragAnzahl();
  793. for( int i = 1; i < anz; i++ )
  794. spielArt->removeEintrag( 1 );
  795. anz = saNamen->getEintragAnzahl();
  796. for( int i = 0; i < anz; i++ )
  797. {
  798. if( saNamen->z( i ) )
  799. spielArt->addEintrag( saNamen->z( i )->getText() );
  800. }
  801. spielArt->unlockZeichnung();
  802. saNamen->release();
  803. saList->release();
  804. }
  805. if( !liste->getEintragAnzahl() )
  806. {
  807. hauptScreen->lock();
  808. suchText->setText( suchFilter->zText()->getText() );
  809. seite = 1;
  810. maxSeite = 1;
  811. aktion = 1;
  812. hauptScreen->unlock();
  813. }
  814. if( !aktion )
  815. {
  816. laden->setSichtbar( 0 );
  817. return;
  818. }
  819. }
  820. int spielArtId = 0;
  821. if( spielArt->getAuswahl() > 0 )
  822. spielArtId = infoClient->getSpielId( spielArt->zEintrag( spielArt->getAuswahl() )->zText()->getText() );
  823. Array< int > * list = 0;
  824. if( !shopClient )
  825. shopClient = mainClient->createShopServerClient();
  826. if( shopClient &&shopClient->verbinde() )
  827. {
  828. list = shopClient->suchKarten( suchText->getText(), spielArtId );
  829. shopClient->trenne( 0 );
  830. }
  831. if( !list )
  832. {
  833. laden->setSichtbar( 0 );
  834. run = 0;
  835. return;
  836. }
  837. Array< int > *slist = new Array< int >();
  838. int anz = list->getEintragAnzahl();
  839. maxSeite = anz / 10 + 1;
  840. if( !( anz % 10 ) )
  841. 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 )
  868. return;
  869. int mx = me.mx;
  870. int my = me.my;
  871. me.mx -= pos.x;
  872. me.my -= pos.y;
  873. spielArt->doPublicMausEreignis( me );
  874. suchFilter->doPublicMausEreignis( me );
  875. int auswId = liste->doPublicMausEreignis( me );
  876. if( auswId )
  877. auswahl->ladeKarteSeite( auswId );
  878. auswahl->doPublicMausEreignis( me );
  879. int ak = 0;
  880. bool tmp = me.verarbeitet;
  881. suchen->doPublicMausEreignis( me );
  882. ak = me.verarbeitet ? 1 : 0;
  883. zurück->doPublicMausEreignis( me );
  884. ak = me.verarbeitet && !ak ? 2 : ak;
  885. weiter->doPublicMausEreignis( me );
  886. ak = me.verarbeitet && !ak ? 3 : ak;
  887. if( tmp )
  888. ak = 0;
  889. if( me.id == ME_RLinks )
  890. {
  891. switch( ak )
  892. {
  893. case 1: // Suchen
  894. suchText->setText( suchFilter->zText()->getText() );
  895. seite = 1;
  896. maxSeite = 1;
  897. aktion = 1;
  898. start();
  899. break;
  900. case 2: // Seite zurück blättern
  901. seite--;
  902. if( seite < 1 )
  903. seite = 1;
  904. aktion = 1;
  905. start();
  906. break;
  907. case 3: // Seite vorwärts blättern
  908. seite++;
  909. if( seite > maxSeite )
  910. seite = maxSeite;
  911. aktion = 1;
  912. start();
  913. break;
  914. }
  915. }
  916. me.mx = mx;
  917. me.my = my;
  918. }
  919. void KartenKaufen::doTastaturEreignis( TastaturEreignis & te )
  920. {
  921. if( !sichtbar || run )
  922. return;
  923. bool vera = te.verarbeitet;
  924. suchFilter->doTastaturEreignis( te );
  925. if( !vera && te.verarbeitet &&te.taste == T_Enter && te.id == TE_Release )
  926. {
  927. MausEreignis me;
  928. me.id = ME_RLinks;
  929. me.verarbeitet = 0;
  930. me.mx = suchen->getX() + 1 + pos.x;
  931. me.my = suchen->getY() + 1 + pos.y;
  932. doPublicMausEreignis( me );
  933. }
  934. auswahl->doTastaturEreignis( te );
  935. }
  936. bool KartenKaufen::tick( double zeit )
  937. {
  938. rend |= spielArt->tick( zeit );
  939. rend |= suchFilter->tick( zeit );
  940. rend |= suchen->tick( zeit );
  941. rend |= weiter->tick( zeit );
  942. rend |= zurück->tick( zeit );
  943. rend |= liste->tick( zeit );
  944. rend |= auswahl->tick( zeit );
  945. rend |= laden->tick( zeit );
  946. tickVal += zeit * 250;
  947. int val = (int)tickVal;
  948. if( val < 1 )
  949. {
  950. bool ret = rend;
  951. rend = 0;
  952. return ret;
  953. }
  954. if( val > 10 )
  955. val = 10;
  956. tickVal -= val;
  957. if( sichtbar && alpha != 255 && !run )
  958. {
  959. if( alpha + val > 255 )
  960. alpha = 255;
  961. else
  962. alpha += val;
  963. rend = 1;
  964. }
  965. if( sichtbar && alpha != 125 && run )
  966. {
  967. if( alpha > 125 )
  968. {
  969. if( alpha - val < 125 )
  970. alpha = 125;
  971. else
  972. alpha -= val;
  973. rend = 1;
  974. }
  975. else
  976. {
  977. if( alpha + val > 125 )
  978. alpha = 125;
  979. else
  980. alpha += 125;
  981. rend = 1;
  982. }
  983. }
  984. if( !sichtbar && alpha != 0 )
  985. {
  986. if( alpha - val < 0 )
  987. alpha = 0;
  988. else
  989. alpha -= val;
  990. rend = 1;
  991. }
  992. bool ret = rend;
  993. rend = 0;
  994. return ret;
  995. }
  996. void KartenKaufen::render( Bild & zRObj )
  997. {
  998. if( !alpha )
  999. return;
  1000. int br = ram->getBreite();
  1001. int hö = ram->getHeight();
  1002. if( !zRObj.setDrawOptions( pos.x, pos.y, br, hö ) )
  1003. return;
  1004. zRObj.setAlpha( alpha );
  1005. ram->render( zRObj );
  1006. suchFilterT->render( zRObj );
  1007. suchFilter->render( zRObj );
  1008. suchen->render( zRObj );
  1009. seiten->render( zRObj );
  1010. weiter->render( zRObj );
  1011. zurück->render( zRObj );
  1012. liste->render( zRObj );
  1013. auswahl->render( zRObj );
  1014. spielArt->render( zRObj );
  1015. zRObj.releaseAlpha();
  1016. laden->render( zRObj );
  1017. zRObj.releaseDrawOptions();
  1018. }
  1019. // constant
  1020. bool KartenKaufen::istSichtbar() const
  1021. {
  1022. return sichtbar;
  1023. }
  1024. // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
  1025. Thread *KartenKaufen::release()
  1026. {
  1027. if( ref == 2 && run )
  1028. {
  1029. warteAufThread( 1000 );
  1030. if( run )
  1031. ende();
  1032. }
  1033. return Thread::release();
  1034. }