KarteAuswahl.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. #include "KarteAuswahl.h"
  2. #include <Text.h>
  3. #include <Rahmen.h>
  4. #include <Punkt.h>
  5. #include <Schrift.h>
  6. #include <AlphaFeld.h>
  7. #include <TextFeld.h>
  8. #include <Datei.h>
  9. #include <DateiSystem.h>
  10. #include "..\..\..\Global\Initialisierung.h"
  11. #include <MausEreignis.h>
  12. #include "..\..\..\Global\Variablen.h"
  13. #include "..\..\..\Leser\KartenLeser.h"
  14. void KarteAuswahlKSGSAktion( void *p, RCArray< KSGSVariable > *parameter, KSGSVariable **retVal )
  15. {
  16. if( !p )
  17. return;
  18. ( (KarteDaten*)p )->ksgsAktion( parameter, retVal );
  19. }
  20. // Inhalt der KarteDaten Klasse aus KarteAuswahl.h
  21. // Konstruktor
  22. KarteDaten::KarteDaten( Schrift *zSchrift, int id )
  23. {
  24. hintergrund = 0;
  25. beschreibung = 0;
  26. ksgs = 0;
  27. rahmen = new LRahmen();
  28. rahmen->setFarbe( 0xFFFFFFFF );
  29. rahmen->setRamenBreite( 1 );
  30. tickVal = 0;
  31. animation = 0;
  32. ausgewählt = 0;
  33. pos = Punkt( 0, 500 );
  34. gr = Punkt( 200, 100 );
  35. schrift = zSchrift->getThis();
  36. karteId = id;
  37. aktion = 1;
  38. geladen = 0;
  39. auswahl = new AlphaFeld();
  40. auswahl->setFarbe( 0x0000FF00 );
  41. auswahl->setStrength( 8 );
  42. auswahl->setSize( 200, 100 );
  43. auswAlpha = 0;
  44. rend = 0;
  45. erlaubt = 0;
  46. tAlpha = 0;
  47. alpha = 0;
  48. ref = 1;
  49. start();
  50. }
  51. // Destruktor
  52. KarteDaten::~KarteDaten()
  53. {
  54. if( run )
  55. this->warteAufThread( 5000 );
  56. if( run )
  57. ende();
  58. if( schrift )
  59. schrift->release();
  60. if( hintergrund )
  61. hintergrund->release();
  62. if( beschreibung )
  63. {
  64. beschreibung->zurücksetzen();
  65. beschreibung->release();
  66. }
  67. if( ksgs )
  68. {
  69. dllDateien->releaseDLL( "KSGScript.dll" );
  70. ksgs = 0;
  71. }
  72. rahmen->release();
  73. auswahl->release();
  74. }
  75. // nicht constant
  76. void KarteDaten::thread()
  77. {
  78. if( !aktion )
  79. {
  80. geladen = 0;
  81. if( hintergrund )
  82. hintergrund = hintergrund->release();
  83. if( beschreibung )
  84. {
  85. beschreibung->zurücksetzen();
  86. beschreibung = beschreibung->release();
  87. }
  88. rend = 1;
  89. if( ksgs )
  90. {
  91. dllDateien->releaseDLL( "KSGScript.dll" );
  92. ksgs = 0;
  93. }
  94. }
  95. else
  96. {
  97. KartenLeser *mapReader = new KartenLeser();
  98. mapReader->setKarteId( karteId );
  99. if( !hintergrund )
  100. hintergrund = mapReader->getKartenTitelBild( schrift );
  101. if( !geladen )
  102. geladen = 1;
  103. rend = 1;
  104. if( aktion == 2 )
  105. {
  106. if( !mapReader->getKartenBeschreibung() )
  107. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Beschreibung nicht gefunden." ), new Text( "Ok" ) );
  108. if( beschreibung )
  109. {
  110. beschreibung->zurücksetzen();
  111. beschreibung = beschreibung->release();
  112. }
  113. if( !ksgs )
  114. ksgs = dllDateien->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
  115. if( ksgs )
  116. {
  117. KSGSGetZeichnung getKSGScript = (KSGSGetZeichnung)GetProcAddress( ksgs, KSGS_START_FUNKTION );
  118. if( getKSGScript )
  119. {
  120. beschreibung = getKSGScript();
  121. beschreibung->setBildschirmZ( hauptScreen->getThis() );
  122. beschreibung->setSchriftZ( schrift->getThis() );
  123. beschreibung->setSize( 578, 428 );
  124. beschreibung->setRückrufParam( this );
  125. beschreibung->setRückrufFunktion( KarteAuswahlKSGSAktion );
  126. Text *pf = mapReader->getKartePfad();
  127. *pf += "beschreibung.ksgs";
  128. beschreibung->setScriptDatei( pf );
  129. }
  130. else
  131. {
  132. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
  133. new Text( "Der Einstiegspunkt '" KSGS_START_FUNKTION "' in der DLL-Datei "
  134. "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
  135. new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  136. }
  137. }
  138. else
  139. {
  140. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
  141. new Text( "Die DLL-Datei 'data/bin/KSGScript.dll' konnte nicht geladen werden." ),
  142. new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  143. }
  144. if( beschreibung )
  145. geladen = 2;
  146. rend = 1;
  147. }
  148. mapReader->release();
  149. }
  150. aktion = 0;
  151. if( !erlaubt )
  152. updateErlaubt();
  153. run = 0;
  154. rend = 1;
  155. }
  156. void KarteDaten::updateErlaubt()
  157. {
  158. if( geladen != 2 )
  159. return;
  160. bool update = erlaubt;
  161. erlaubt = infoKlient->istKarteErlaubt( karteId );
  162. if( update != erlaubt && beschreibung && ksgs )
  163. {
  164. KSGSGetVariable getKSGSVar = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
  165. RCArray< KSGSVariable > *params = new RCArray< KSGSVariable >();
  166. KSGSVariableDef p1;
  167. p1.typId = KSGS_BOOL;
  168. p1.wert = (int)erlaubt;
  169. params->add( getKSGSVar( beschreibung, &p1 ) );
  170. KSGSVariable *var = beschreibung->startFunktion( beschreibung->getFunktionId( "_set_Erlaubt" ), params );
  171. if( var )
  172. var->release();
  173. }
  174. }
  175. void KarteDaten::ksgsAktion( RCArray< KSGSVariable > *parameter, KSGSVariable **retVal )
  176. {
  177. if( parameter && parameter->getEintragAnzahl() > 0 )
  178. {
  179. Text *txt = parameter->z( 0 )->getText();
  180. if( erlaubt && txt->istGleich( "anmelden" ) )
  181. {
  182. if( nachLogin && nachLogin->zSpielenFenster() )
  183. nachLogin->zSpielenFenster()->anmelden( karteId );
  184. }
  185. if( erlaubt && txt->istGleich( "gruppeErstellen" ) )
  186. {
  187. int ret = anmeldungKlient->gruppeErstellen( karteId );
  188. if( !ret )
  189. {
  190. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ),
  191. new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  192. }
  193. else
  194. nachLogin->zSpielenFenster()->gruppeBetreten( ret );
  195. }
  196. txt->release();
  197. }
  198. }
  199. void KarteDaten::setSichtbar( bool sichtbar )
  200. {
  201. if( sichtbar )
  202. animation |= 0x1;
  203. else
  204. {
  205. animation &= ~0x1;
  206. setAuswahl( 0 );
  207. }
  208. if( sichtbar )
  209. {
  210. warteAufThread( 1000 );
  211. aktion = 2;
  212. start();
  213. }
  214. rend = 1;
  215. }
  216. void KarteDaten::setSichtbar()
  217. {
  218. animation |= 0x1;
  219. if( ausgewählt && geladen == 2 )
  220. {
  221. animation |= 0x4;
  222. beschreibung->setPosition( beschreibung->getX(), 0 );
  223. }
  224. if( geladen != 2 )
  225. {
  226. warteAufThread( 1000 );
  227. aktion = 2;
  228. start();
  229. }
  230. rend = 1;
  231. }
  232. void KarteDaten::setAuswahl( bool auswahl )
  233. {
  234. if( ausgewählt == auswahl )
  235. return;
  236. ausgewählt = auswahl;
  237. if( auswahl )
  238. {
  239. animation |= 0x4;
  240. if( beschreibung && ksgs )
  241. {
  242. beschreibung->neuLaden();
  243. KSGSGetVariable getKSGSVar = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
  244. RCArray< KSGSVariable > *params = new RCArray< KSGSVariable >();
  245. KSGSVariableDef p1;
  246. p1.typId = KSGS_BOOL;
  247. p1.wert = (int)erlaubt;
  248. params->add( getKSGSVar( beschreibung, &p1 ) );
  249. KSGSVariable *var = beschreibung->startFunktion( beschreibung->getFunktionId( "_set_Erlaubt" ), params );
  250. if( var )
  251. var->release();
  252. }
  253. }
  254. else
  255. animation &= ~0x4;
  256. rend = 1;
  257. }
  258. void KarteDaten::setPosition( int lPos )
  259. {
  260. pos.y = lPos * 100;
  261. rend = 1;
  262. }
  263. bool KarteDaten::tick( double tickVal )
  264. {
  265. if( beschreibung )
  266. rend |= beschreibung->tick( tickVal );
  267. this->tickVal += tickVal * 500;
  268. int val = ( int ) this->tickVal;
  269. if( val < 1 )
  270. {
  271. bool ret = rend;
  272. rend = 0;
  273. return ret;
  274. }
  275. if( val > 17 )
  276. val = 17;
  277. this->tickVal -= val;
  278. if( ausgewählt )
  279. {
  280. if( auswAlpha != 0xF0 )
  281. {
  282. auswAlpha += val;
  283. if( auswAlpha > 0xF0 )
  284. auswAlpha = 0xF0;
  285. rend = 1;
  286. }
  287. }
  288. else
  289. {
  290. if( auswAlpha != 0 )
  291. {
  292. auswAlpha -= val;
  293. if( auswAlpha > 0xF0 )
  294. auswAlpha = 0;
  295. rend = 1;
  296. }
  297. }
  298. if( ( animation | 0x1 ) == animation ) // sichtbar
  299. {
  300. if( tAlpha != 255 )
  301. {
  302. if( tAlpha + val > 255 )
  303. tAlpha = 255;
  304. else
  305. tAlpha += val;
  306. rend = 1;
  307. }
  308. }
  309. else // unsichtbar
  310. {
  311. if( tAlpha != 0 )
  312. {
  313. if( tAlpha - val < 0 )
  314. tAlpha = 0;
  315. else
  316. tAlpha -= val;
  317. rend = 1;
  318. }
  319. }
  320. if( ( animation | 0x4 ) == animation ) // auswählen
  321. {
  322. if( beschreibung )
  323. {
  324. if( alpha != 255 )
  325. {
  326. if( alpha + val < 255 )
  327. alpha += val;
  328. else
  329. alpha = 255;
  330. rend = 1;
  331. }
  332. }
  333. }
  334. else // abwählen
  335. {
  336. int a = ( auswahl->getFarbe() >> 24 ) & 0xFF;
  337. if( a != 0 )
  338. {
  339. a -= val;
  340. if( a < 0 )
  341. a = 0;
  342. auswahl->setFarbe( ( ( a << 24 ) & 0xFF000000 ) | ( auswahl->getFarbe() & 0xFFFFFF ) );
  343. rend = 1;
  344. }
  345. if( beschreibung )
  346. {
  347. if( alpha != 0 )
  348. {
  349. if( alpha - val > 0 )
  350. alpha -= val;
  351. else
  352. alpha = 0;
  353. rend = 1;
  354. }
  355. }
  356. }
  357. bool ret = rend;
  358. rend = 0;
  359. return ret;
  360. }
  361. void KarteDaten::doMausEreignis( MausEreignis &me )
  362. {
  363. me.mx -= gr.x;
  364. if( beschreibung )
  365. beschreibung->doMausEreignis( me );
  366. me.mx += gr.x;
  367. }
  368. void KarteDaten::render( Bild &zRObj )
  369. {
  370. int x = pos.x;
  371. int y = pos.y;
  372. int br = gr.x;
  373. int hö = gr.y;
  374. if( !zRObj.setDrawOptions( x, y, br, hö ) )
  375. return;
  376. zRObj.setAlpha( tAlpha );
  377. rahmen->setSize( br, hö );
  378. rahmen->render( zRObj );
  379. int rbr = rahmen->getRBreite();
  380. if( geladen && hintergrund )
  381. zRObj.drawBild( rbr, rbr, br - rbr * 2, hö - rbr * 2, *hintergrund );
  382. if( auswAlpha && auswahl )
  383. {
  384. auswahl->setFarbe( ( auswahl->getFarbe() & 0x00FFFFFF ) | ( auswAlpha << 24 ) );
  385. auswahl->setPosition( rbr, rbr );
  386. auswahl->setSize( br - rbr * 2, hö - rbr * 2 );
  387. auswahl->render( zRObj );
  388. }
  389. zRObj.releaseDrawOptions();
  390. x = br;
  391. y = 0;
  392. br = 580;
  393. hö = 480;
  394. if( !zRObj.setDrawOptions( x, y, br, hö ) )
  395. {
  396. zRObj.releaseAlpha();
  397. return;
  398. }
  399. if( geladen == 2 )
  400. {
  401. zRObj.setAlpha( alpha );
  402. if( beschreibung )
  403. beschreibung->render( zRObj );
  404. zRObj.releaseAlpha();
  405. }
  406. zRObj.releaseDrawOptions();
  407. zRObj.releaseAlpha();
  408. }
  409. // constant
  410. int KarteDaten::getKarteId() const
  411. {
  412. return karteId;
  413. }
  414. bool KarteDaten::istausgewählt() const
  415. {
  416. return ausgewählt;
  417. }
  418. // Reference Counting
  419. KarteDaten *KarteDaten::getThis()
  420. {
  421. ref++;
  422. return this;
  423. }
  424. KarteDaten *KarteDaten::release()
  425. {
  426. ref--;
  427. if( !ref )
  428. delete this;
  429. return 0;
  430. }
  431. // Inhalt der KarteAuswahlFenster Klasse aus KarteAuswahl.h
  432. // Konstruktor
  433. KarteAuswahlFenster::KarteAuswahlFenster( Schrift *zSchrift )
  434. {
  435. schrift = zSchrift->getThis();
  436. rahmen = new LRahmen();
  437. rahmen->setFarbe( 0xFFFFFFFF );
  438. rahmen->setRamenBreite( 1 );
  439. rahmen->setSize( 760, 500 );
  440. members = new RCArray< KarteDaten >();
  441. anzahl = 0;
  442. animation = 0;
  443. auswahl = -1;
  444. tickVal = 0;
  445. seite = 0;
  446. pos = Punkt( 10, 10 );
  447. gr = Punkt( 780, 430 );
  448. spielId = 0;
  449. rend = 0;
  450. alpha = 0;
  451. ref = 1;
  452. }
  453. // Destruktor
  454. KarteAuswahlFenster::~KarteAuswahlFenster()
  455. {
  456. if( schrift )
  457. schrift->release();
  458. if( rahmen )
  459. rahmen->release();
  460. if( members )
  461. members->release();
  462. }
  463. // nicht constant
  464. void KarteAuswahlFenster::setSpielId( int id )
  465. {
  466. spielId = id;
  467. members->leeren();
  468. anzahl = 0;
  469. start();
  470. }
  471. void KarteAuswahlFenster::setSichtbar( bool sichtbar )
  472. {
  473. if( sichtbar )
  474. {
  475. animation |= 0x1;
  476. start();
  477. }
  478. else
  479. {
  480. auswahl = -1;
  481. for( int i = seite * 4; i >= 0 && i < anzahl && i < seite * 4 + 4; i++ )
  482. members->z( i )->setSichtbar( 0 );
  483. animation &= ~0x1;
  484. }
  485. rend = 1;
  486. }
  487. void KarteAuswahlFenster::blättern( bool oben )
  488. {
  489. for( int i = seite * 4; i >= 0 && i < anzahl && i < seite * 4 + 4; i++ )
  490. members->z( i )->setSichtbar( 0 );
  491. seite += oben ? 1 : -1;
  492. for( int i = seite * 4; i >= 0 && i < anzahl && i < seite * 4 + 4; i++ )
  493. {
  494. members->z( i )->setPosition( i % 4 );
  495. members->z( i )->setSichtbar( 1 );
  496. }
  497. auswahl = -1;
  498. rend = 1;
  499. }
  500. void KarteAuswahlFenster::updateListe()
  501. {
  502. if( run )
  503. return;
  504. start();
  505. }
  506. void KarteAuswahlFenster::thread()
  507. {
  508. Array< int > *liste = infoKlient->getAccountKarteListe( spielId );
  509. if( !liste )
  510. {
  511. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( infoKlient->getLetzterFehler() ),
  512. new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  513. run = 0;
  514. return;
  515. }
  516. int anz = liste->getEintragAnzahl();
  517. for( int i = 0; i < anz; i++ )
  518. {
  519. bool gefunden = 0;
  520. for( int j = 0; j < anzahl; j++ )
  521. {
  522. KarteDaten *tmp = members->z( j );
  523. if( liste->hat( i ) && tmp->getKarteId() == liste->get( i ) )
  524. {
  525. gefunden = 1;
  526. break;
  527. }
  528. }
  529. if( !gefunden )
  530. {
  531. KarteDaten *tmp = new KarteDaten( schrift, liste->hat( i ) ? liste->get( i ) : 0 );
  532. members->add( tmp, anzahl );
  533. anzahl++;
  534. }
  535. }
  536. if( liste )
  537. liste->release();
  538. for( int i = 0; i < anzahl; i++ )
  539. members->z( i )->updateErlaubt();
  540. for( int i = seite * 4; i < anzahl && i >= 0 && i < seite * 4 + 4; i++ )
  541. {
  542. members->z( i )->setPosition( i % 4 );
  543. members->z( i )->setSichtbar();
  544. }
  545. rend = 1;
  546. run = 0;
  547. }
  548. bool KarteAuswahlFenster::tick( double tickVal )
  549. {
  550. for( int i = 0; i < anzahl; i++ )
  551. rend |= members->z( i )->tick( tickVal );
  552. this->tickVal += tickVal * 750;
  553. int val = ( int )this->tickVal;
  554. if( val < 1 )
  555. {
  556. bool ret = rend;
  557. rend = 0;
  558. return ret;
  559. }
  560. if( val > 25 )
  561. val = 25;
  562. this->tickVal -= val;
  563. if( ( animation | 0x1 ) == animation ) // sichtbar
  564. {
  565. if( alpha < 255 )
  566. {
  567. if( alpha + val >= 255 )
  568. {
  569. alpha = 255;
  570. for( int i = seite * 4; i < anzahl && i >= 0 && i < seite * 4 + 4; i++ )
  571. {
  572. members->z( i )->setPosition( i % 4 );
  573. members->z( i )->setSichtbar( 1 );
  574. }
  575. }
  576. else
  577. alpha += val;
  578. rend = 1;
  579. }
  580. }
  581. else // unsichtbar
  582. {
  583. if( alpha > 0 )
  584. {
  585. if( alpha - val < 0 )
  586. alpha = 0;
  587. else
  588. alpha -= val;
  589. rend = 1;
  590. }
  591. }
  592. bool ret = rend;
  593. rend = 0;
  594. return ret;
  595. }
  596. void KarteAuswahlFenster::doMausEreignis( MausEreignis &me )
  597. {
  598. if( !members )
  599. return;
  600. if( pos.x != 10 )
  601. return;
  602. me.mx -= pos.x;
  603. me.my -= pos.y;
  604. for( int i = 0; i < anzahl; i++ )
  605. members->z( i )->doMausEreignis( me );
  606. if( me.mx < 0 || me.my < 0 )
  607. {
  608. me.mx += pos.x;
  609. me.my += pos.y;
  610. return;
  611. }
  612. if( me.mx > 200 || me.my > getAnzahlAufSeite() * 100 )
  613. {
  614. me.mx += pos.x;
  615. me.my += pos.y;
  616. return;
  617. }
  618. if( me.id == ME_RLinks )
  619. {
  620. int treffer = me.my / 100 + seite * 4;
  621. if( treffer >= anzahl )
  622. {
  623. me.mx += pos.x;
  624. me.my += pos.y;
  625. return;
  626. }
  627. if( treffer == auswahl )
  628. {
  629. me.mx += pos.x;
  630. me.my += pos.y;
  631. return;
  632. }
  633. if( auswahl >= 0 )
  634. members->z( auswahl )->setAuswahl( 0 );
  635. members->z( treffer )->setAuswahl( 1 );
  636. auswahl = treffer;
  637. rend = 1;
  638. }
  639. me.mx += pos.x;
  640. me.my += pos.y;
  641. }
  642. void KarteAuswahlFenster::render( Bild &zrObj )
  643. {
  644. int x = pos.x;
  645. int y = pos.y;
  646. int br = gr.x;
  647. int hö = gr.y;
  648. if( !zrObj.setDrawOptions( x, y, br, hö ) )
  649. return;
  650. zrObj.setAlpha( alpha );
  651. rahmen->setSize( br, hö );
  652. rahmen->render( zrObj );
  653. int rbr = rahmen->getRBreite();
  654. if( !zrObj.setDrawOptions( rbr, rbr, br - rbr * 2, hö - rbr * 2 ) )
  655. {
  656. zrObj.releaseDrawOptions();
  657. zrObj.releaseAlpha();
  658. return;
  659. }
  660. for( int i = seite * 4; i >= 0 && i < anzahl && i < seite * 4 + 4; i++ )
  661. members->z( i )->render( zrObj );
  662. zrObj.releaseDrawOptions();
  663. if( !anzahl )
  664. {
  665. Text t = "Dieser Account besitzt momentan noch keine Karten für dieses Spiel.\nBesuche den Shop um neue Karten zu erwerben!";
  666. schrift->lock();
  667. schrift->setDrawPosition( 10, 10 );
  668. schrift->setSchriftSize( 12 );
  669. schrift->renderText( &t, zrObj, 0xFFFFFFFF );
  670. schrift->unlock();
  671. }
  672. zrObj.releaseDrawOptions();
  673. zrObj.releaseAlpha();
  674. }
  675. // constant
  676. int KarteAuswahlFenster::getAnzahl() const
  677. {
  678. return anzahl;
  679. }
  680. int KarteAuswahlFenster::getSeiteAnzahl() const
  681. {
  682. return ( anzahl / 4.0 == anzahl / 4 ) ? ( anzahl / 4 ) : ( anzahl / 4 + 1 );
  683. }
  684. int KarteAuswahlFenster::getSeite() const
  685. {
  686. return seite;
  687. }
  688. int KarteAuswahlFenster::getAnzahlAufSeite() const
  689. {
  690. return ( anzahl < seite * 4 + 4 ) ? ( anzahl - seite * 4 ) : 4;
  691. }
  692. bool KarteAuswahlFenster::hatAuswahl() const
  693. {
  694. return auswahl != -1;
  695. }
  696. KarteDaten *KarteAuswahlFenster::getAuswahl() const
  697. {
  698. return members->get( auswahl );
  699. }
  700. // Reference Counting
  701. KarteAuswahlFenster *KarteAuswahlFenster::getThis()
  702. {
  703. ref++;
  704. return this;
  705. }
  706. KarteAuswahlFenster *KarteAuswahlFenster::release()
  707. {
  708. ref--;
  709. if( !ref )
  710. delete this;
  711. return 0;
  712. }