KartenEditor.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606
  1. #include "KartenEditor.h"
  2. #include "../../../Global/Initialisierung.h"
  3. #include "../../../Global/Variablen.h"
  4. #include <KSGTDatei.h>
  5. typedef EditorV*( *DllStart )( );
  6. // Inhalt der KartenEditor Klasse aus KartenEditor.h
  7. // Konstruktor
  8. KartenEditor::KartenEditor( Schrift *schrift )
  9. {
  10. this->schrift = schrift;
  11. karteRelease = initKnopf( 10, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Karte Release" );
  12. shopSeite = initKnopf( 120, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Shop Seite" );
  13. beschreibung = initKnopf( 230, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Beschreibung" );
  14. teams = initKnopf( 340, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Teams" );
  15. dateien = initKnopf( 450, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Dateien" );
  16. editor = initKnopf( 560, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Editor" );
  17. kaufHistorie = initKnopf( 670, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Kauf Historie" );
  18. beenden = initKnopf( 790, 10, 100, 20, schrift, Knopf::Style::Sichtbar, "Beenden" );
  19. laden = (Animation2D*)ladeAnimation->dublizieren();
  20. laden->setPosition( 425, 275 );
  21. laden->setSichtbar( 0 );
  22. tickVal = 0;
  23. jetzt = 0;
  24. releaseF = 0;
  25. shopSeiteF = 0;
  26. beschreibungF = 0;
  27. teamsF = 0;
  28. dateienF = 0;
  29. alpha = 0;
  30. alpha2 = 0;
  31. sichtbar = 0;
  32. editorDll = 0;
  33. editorF = 0;
  34. dllName = "";
  35. ref = 1;
  36. }
  37. // Destruktor
  38. KartenEditor::~KartenEditor()
  39. {
  40. if( run )
  41. {
  42. warteAufThread( 5000 );
  43. if( run )
  44. ende();
  45. }
  46. schrift->release();
  47. karteRelease->release();
  48. shopSeite->release();
  49. beschreibung->release();
  50. teams->release();
  51. dateien->release();
  52. editor->release();
  53. kaufHistorie->release();
  54. beenden->release();
  55. laden->release();
  56. if( releaseF )
  57. releaseF->release();
  58. if( shopSeiteF )
  59. shopSeiteF->release();
  60. if( beschreibungF )
  61. beschreibungF->release();
  62. if( teamsF )
  63. teamsF->release();
  64. if( dateienF )
  65. dateienF->release();
  66. if( editorF )
  67. editorF->release();
  68. if( editorDll )
  69. dllDateien->releaseDLL( dllName );
  70. }
  71. // nicht constant
  72. void KartenEditor::thread()
  73. {
  74. laden->setSichtbar( 1 );
  75. if( !editorKlient->initEditor() )
  76. {
  77. editor->setAlphaFeldFarbe( 0x5500FF00 );
  78. editor->removeStyle( Knopf::Style::Erlaubt );
  79. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
  80. laden->setSichtbar( 0 );
  81. run = 0;
  82. return;
  83. }
  84. nachLogin->setEditor( editorF->getThis() );
  85. aktion = 9;
  86. laden->setSichtbar( 0 );
  87. }
  88. void KartenEditor::setKarte( int id )
  89. {
  90. jetzt = 0;
  91. hauptScreen->lock();
  92. if( releaseF )
  93. releaseF->release();
  94. if( shopSeiteF )
  95. shopSeiteF->release();
  96. if( beschreibungF )
  97. beschreibungF->release();
  98. if( teamsF )
  99. teamsF->release();
  100. if( editorF )
  101. editorF->release();
  102. if( editorDll )
  103. dllDateien->releaseDLL( dllName );
  104. releaseF = new KERelease( id, schrift );
  105. releaseF->setSichtbar( 1, 0 );
  106. karteRelease->setAlphaFeldFarbe( 0x0000FF00 );
  107. shopSeite->setAlphaFeldFarbe( 0x5500FF00 );
  108. beschreibung->setAlphaFeldFarbe( 0x5500FF00 );
  109. teams->setAlphaFeldFarbe( 0x5500FF00 );
  110. dateien->setAlphaFeldFarbe( 0x5500FF00 );
  111. editor->setAlphaFeldFarbe( 0x5500FF00 );
  112. kaufHistorie->setAlphaFeldFarbe( 0x5500FF00 );
  113. jetzt = 1;
  114. shopSeiteF = new KEShopSeite( id, schrift );
  115. beschreibungF = new KEBeschreibung( id, schrift );
  116. teamsF = new KETeams( id, schrift );
  117. dateienF = new KEDateien( id, schrift );
  118. // Editor laden
  119. int spielArt = infoKlient->getSpielId( id );
  120. KSGTDatei *dgt = new KSGTDatei( "data/dg.ksgt" );
  121. dgt->laden();
  122. bool sak = 0;
  123. int dgSId = infoKlient->getDateiGruppeIdVonSpiel( spielArt );
  124. bool sgf = 0;
  125. for( int i = 0; i < dgt->getZeilenAnzahl(); i++ )
  126. {
  127. if( dgt->zFeld( i, 0 ) && TextZuInt( dgt->zFeld( i, 0 )->getText(), 10 ) == dgSId )
  128. {
  129. sgf = 1;
  130. int lv = dgt->zFeld( i, 2 ) ? TextZuInt( dgt->zFeld( i, 2 )->getText(), 10 ) : 0;
  131. int ov = infoKlient->getSpielVersion( spielArt );
  132. if( lv == ov )
  133. {
  134. sak = 1;
  135. break;
  136. }
  137. }
  138. }
  139. dgt->release();
  140. if( !sak )
  141. {
  142. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Deine Spiel Version ist nicht aktuell. Sie wird beim nächsten Spielstart aktualisiert. Bis dahin sind nicht alle Editorfunktionen verfügbar." ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  143. if( !sgf )
  144. {
  145. Text *pfad = infoKlient->getDateiGruppePfad( dgSId );
  146. Text *idT = new Text();
  147. idT->append( dgSId );
  148. if( pfad )
  149. {
  150. KSGTDatei *dg = new KSGTDatei( "data/dg.ksgt" );
  151. dg->laden();
  152. RCArray< Text > *zeile = new RCArray< Text >();
  153. zeile->add( idT );
  154. zeile->add( pfad );
  155. zeile->add( new Text( "0" ) );
  156. zeile->add( new Text( "0" ) );
  157. dg->addZeile( 4, zeile );
  158. zeile->release();
  159. dg->speichern();
  160. dg->release();
  161. }
  162. else
  163. idT->release();
  164. }
  165. }
  166. else
  167. {
  168. Text pfad = "data/spiele/";
  169. dllName = "";
  170. dllName.append( infoKlient->getSpielName( spielArt ) );
  171. pfad.append( dllName.getText() );
  172. pfad.append( "/bin/" );
  173. dllName.append( ".dll" );
  174. pfad.append( dllName.getText() );
  175. editorDll = dllDateien->ladeDLL( dllName, pfad );
  176. if( !editorDll )
  177. {
  178. editor->removeStyle( Knopf::Style::Erlaubt );
  179. Text *err = new Text( "Fehler beim laden der Dll Datei '" );
  180. err->append( pfad.getText() );
  181. err->append( "'. Es stehen nicht alle Editorfunktionen zur verfügung." );
  182. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), err, new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  183. }
  184. else
  185. {
  186. DllStart getEditorKlasse = (DllStart)GetProcAddress( editorDll, "getEditor" );
  187. if( !getEditorKlasse )
  188. {
  189. editor->removeStyle( Knopf::Style::Erlaubt );
  190. Text *err = new Text( "Der Einstiegspunkt 'getEditor' wurde in der Dll Datei '" );
  191. err->append( pfad.getText() );
  192. err->append( "' nicht gefunden. Es stehen nicht alle Editorfunktionen zur verfügung." );
  193. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), err, new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  194. }
  195. else
  196. {
  197. editor->addStyle( Knopf::Style::Erlaubt );
  198. editorF = getEditorKlasse();
  199. editorF->setSchrift( schrift->getThis() );
  200. editorF->setKlient( editorKlient->getThis() );
  201. editorF->setLadeAnimation( (Animation2D*)ladeAnimation->dublizieren() );
  202. editor->addStyle( Knopf::Style::Sichtbar );
  203. }
  204. }
  205. }
  206. //-------------------------
  207. hauptScreen->unlock();
  208. }
  209. void KartenEditor::setSichtbar( bool s )
  210. {
  211. sichtbar = s;
  212. }
  213. void KartenEditor::doMausEreignis( MausEreignis &me )
  214. {
  215. if( run )
  216. return;
  217. int aktion = 0;
  218. bool vera = me.verarbeitet;
  219. karteRelease->doMausEreignis( me );
  220. if( !vera && me.verarbeitet )
  221. aktion = 1;
  222. vera = me.verarbeitet;
  223. shopSeite->doMausEreignis( me );
  224. if( !vera && me.verarbeitet )
  225. aktion = 2;
  226. vera = me.verarbeitet;
  227. beschreibung->doMausEreignis( me );
  228. if( !vera && me.verarbeitet )
  229. aktion = 3;
  230. vera = me.verarbeitet;
  231. teams->doMausEreignis( me );
  232. if( !vera && me.verarbeitet )
  233. aktion = 4;
  234. vera = me.verarbeitet;
  235. dateien->doMausEreignis( me );
  236. if( !vera && me.verarbeitet )
  237. aktion = 5;
  238. vera = me.verarbeitet;
  239. editor->doMausEreignis( me );
  240. if( !vera && me.verarbeitet )
  241. aktion = 6;
  242. vera = me.verarbeitet;
  243. kaufHistorie->doMausEreignis( me );
  244. if( !vera && me.verarbeitet )
  245. aktion = 7;
  246. vera = me.verarbeitet;
  247. beenden->doMausEreignis( me );
  248. if( !vera && me.verarbeitet )
  249. aktion = 8;
  250. if( me.id == ME_RLinks && aktion )
  251. {
  252. switch( aktion )
  253. {
  254. case 1: // Release
  255. if( releaseF && !releaseF->istSichtbar() )
  256. {
  257. if( shopSeiteF && shopSeiteF->istSichtbar() )
  258. {
  259. shopSeite->setAlphaFeldFarbe( 0x5500FF00 );
  260. releaseF->setSichtbar( 1, 0 );
  261. shopSeiteF->setSichtbar( 0, 0 );
  262. }
  263. if( beschreibungF && beschreibungF->istSichtbar() )
  264. {
  265. beschreibung->setAlphaFeldFarbe( 0x5500FF00 );
  266. releaseF->setSichtbar( 1, 0 );
  267. beschreibungF->setSichtbar( 0, 0 );
  268. }
  269. if( teamsF && teamsF->istSichtbar() )
  270. {
  271. teams->setAlphaFeldFarbe( 0x5500FF00 );
  272. releaseF->setSichtbar( 1, 0 );
  273. teamsF->setSichtbar( 0, 0 );
  274. }
  275. if( dateienF && dateienF->istSichtbar() )
  276. {
  277. dateien->setAlphaFeldFarbe( 0x5500FF00 );
  278. releaseF->setSichtbar( 1, 0 );
  279. dateienF->setSichtbar( 0, 0 );
  280. }
  281. //-------------
  282. karteRelease->setAlphaFeldFarbe( 0x0000FF00 );
  283. jetzt = 1;
  284. }
  285. break;
  286. case 2: // Shop Seite
  287. if( shopSeiteF && !shopSeiteF->istSichtbar() )
  288. {
  289. if( releaseF && releaseF->istSichtbar() )
  290. {
  291. karteRelease->setAlphaFeldFarbe( 0x5500FF00 );
  292. shopSeiteF->setSichtbar( 1, 1 );
  293. releaseF->setSichtbar( 0, 1 );
  294. }
  295. if( beschreibungF && beschreibungF->istSichtbar() )
  296. {
  297. beschreibung->setAlphaFeldFarbe( 0x5500FF00 );
  298. shopSeiteF->setSichtbar( 1, 0 );
  299. beschreibungF->setSichtbar( 0, 0 );
  300. }
  301. if( teamsF && teamsF->istSichtbar() )
  302. {
  303. teams->setAlphaFeldFarbe( 0x5500FF00 );
  304. shopSeiteF->setSichtbar( 1, 0 );
  305. teamsF->setSichtbar( 0, 0 );
  306. }
  307. if( dateienF && dateienF->istSichtbar() )
  308. {
  309. dateien->setAlphaFeldFarbe( 0x5500FF00 );
  310. shopSeiteF->setSichtbar( 1, 0 );
  311. dateienF->setSichtbar( 0, 0 );
  312. }
  313. //---------------
  314. shopSeite->setAlphaFeldFarbe( 0x0000FF00 );
  315. jetzt = 2;
  316. }
  317. break;
  318. case 3: // Beschreibung
  319. if( beschreibungF && !beschreibungF->istSichtbar() )
  320. {
  321. if( releaseF && releaseF->istSichtbar() )
  322. {
  323. karteRelease->setAlphaFeldFarbe( 0x5500FF00 );
  324. beschreibungF->setSichtbar( 1, 1 );
  325. releaseF->setSichtbar( 0, 1 );
  326. }
  327. if( shopSeiteF && shopSeiteF->istSichtbar() )
  328. {
  329. shopSeite->setAlphaFeldFarbe( 0x5500FF00 );
  330. beschreibungF->setSichtbar( 1, 1 );
  331. shopSeiteF->setSichtbar( 0, 1 );
  332. }
  333. if( teamsF && teamsF->istSichtbar() )
  334. {
  335. teams->setAlphaFeldFarbe( 0x5500FF00 );
  336. beschreibungF->setSichtbar( 1, 0 );
  337. teamsF->setSichtbar( 0, 0 );
  338. }
  339. if( dateienF && dateienF->istSichtbar() )
  340. {
  341. dateien->setAlphaFeldFarbe( 0x5500FF00 );
  342. beschreibungF->setSichtbar( 1, 0 );
  343. dateienF->setSichtbar( 0, 0 );
  344. }
  345. //---------------
  346. beschreibung->setAlphaFeldFarbe( 0x0000FF00 );
  347. jetzt = 3;
  348. }
  349. break;
  350. case 4: // Teams
  351. if( teamsF && !teamsF->istSichtbar() )
  352. {
  353. if( releaseF && releaseF->istSichtbar() )
  354. {
  355. karteRelease->setAlphaFeldFarbe( 0x5500FF00 );
  356. teamsF->setSichtbar( 1, 1 );
  357. releaseF->setSichtbar( 0, 1 );
  358. }
  359. if( shopSeiteF && shopSeiteF->istSichtbar() )
  360. {
  361. shopSeite->setAlphaFeldFarbe( 0x5500FF00 );
  362. teamsF->setSichtbar( 1, 1 );
  363. shopSeiteF->setSichtbar( 0, 1 );
  364. }
  365. if( beschreibungF && beschreibungF->istSichtbar() )
  366. {
  367. beschreibung->setAlphaFeldFarbe( 0x5500FF00 );
  368. teamsF->setSichtbar( 1, 1 );
  369. beschreibungF->setSichtbar( 0, 1 );
  370. }
  371. if( dateienF && dateienF->istSichtbar() )
  372. {
  373. dateien->setAlphaFeldFarbe( 0x5500FF00 );
  374. teamsF->setSichtbar( 1, 0 );
  375. dateienF->setSichtbar( 0, 0 );
  376. }
  377. //---------------
  378. teams->setAlphaFeldFarbe( 0x0000FF00 );
  379. jetzt = 4;
  380. }
  381. break;
  382. case 5: // Dateien
  383. if( dateienF && !dateienF->istSichtbar() )
  384. {
  385. if( releaseF && releaseF->istSichtbar() )
  386. {
  387. karteRelease->setAlphaFeldFarbe( 0x5500FF00 );
  388. dateienF->setSichtbar( 1, 1 );
  389. releaseF->setSichtbar( 0, 1 );
  390. }
  391. if( shopSeiteF && shopSeiteF->istSichtbar() )
  392. {
  393. shopSeite->setAlphaFeldFarbe( 0x5500FF00 );
  394. dateienF->setSichtbar( 1, 1 );
  395. shopSeiteF->setSichtbar( 0, 1 );
  396. }
  397. if( beschreibungF && beschreibungF->istSichtbar() )
  398. {
  399. beschreibung->setAlphaFeldFarbe( 0x5500FF00 );
  400. dateienF->setSichtbar( 1, 1 );
  401. beschreibungF->setSichtbar( 0, 1 );
  402. }
  403. if( teamsF && teamsF->istSichtbar() )
  404. {
  405. teams->setAlphaFeldFarbe( 0x5500FF00 );
  406. dateienF->setSichtbar( 1, 1 );
  407. teamsF->setSichtbar( 0, 1 );
  408. }
  409. //---------------
  410. dateien->setAlphaFeldFarbe( 0x0000FF00 );
  411. jetzt = 5;
  412. }
  413. break;
  414. case 6: // Editor
  415. if( editor )
  416. start();
  417. break;
  418. case 7:
  419. //---------------
  420. break;
  421. case 8:
  422. setSichtbar( 0 );
  423. break;
  424. }
  425. }
  426. switch( jetzt )
  427. {
  428. case 1:
  429. releaseF->doMausEreignis( me );
  430. break;
  431. case 2:
  432. shopSeiteF->doMausEreignis( me );
  433. break;
  434. case 3:
  435. beschreibungF->doMausEreignis( me );
  436. break;
  437. case 4:
  438. teamsF->doMausEreignis( me );
  439. break;
  440. case 5:
  441. dateienF->doMausEreignis( me );
  442. break;
  443. //---------------
  444. }
  445. }
  446. void KartenEditor::doTastaturEreignis( TastaturEreignis &te )
  447. {
  448. if( run )
  449. return;
  450. switch( jetzt )
  451. {
  452. case 1:
  453. releaseF->doTastaturEreignis( te );
  454. break;
  455. case 2:
  456. shopSeiteF->doTastaturEreignis( te );
  457. break;
  458. case 3:
  459. beschreibungF->doTastaturEreignis( te );
  460. break;
  461. case 4:
  462. teamsF->doTastaturEreignis( te );
  463. break;
  464. case 5:
  465. dateienF->doTastaturEreignis( te );
  466. break;
  467. //---------------
  468. }
  469. }
  470. bool KartenEditor::tick( double zeit )
  471. {
  472. bool ret = karteRelease->tick( zeit );
  473. ret |= laden->tick( zeit );
  474. ret |= shopSeite->tick( zeit );
  475. ret |= beschreibung->tick( zeit );
  476. ret |= teams->tick( zeit );
  477. ret |= dateien->tick( zeit );
  478. ret |= editor->tick( zeit );
  479. ret |= kaufHistorie->tick( zeit );
  480. ret |= beenden->tick( zeit );
  481. if( releaseF && releaseF->istSichtbar() )
  482. ret |= releaseF->tick( zeit );
  483. if( shopSeiteF && shopSeiteF->istSichtbar() )
  484. ret |= shopSeiteF->tick( zeit );
  485. if( beschreibungF && beschreibungF->istSichtbar() )
  486. ret |= beschreibungF->tick( zeit );
  487. if( teamsF && teamsF->istSichtbar() )
  488. ret |= teamsF->tick( zeit );
  489. if( dateienF && dateienF->istSichtbar() )
  490. ret |= dateienF->tick( zeit );
  491. tickVal += zeit * 150;
  492. int val = (int)tickVal;
  493. if( val < 1 )
  494. return ret;
  495. if( sichtbar && run )
  496. {
  497. if( alpha != 100 )
  498. {
  499. if( alpha > 100 )
  500. {
  501. if( alpha - val <= 100 )
  502. alpha = 100;
  503. else
  504. alpha -= val;
  505. }
  506. if( alpha < 100 )
  507. {
  508. if( alpha + val >= 100 )
  509. alpha = 100;
  510. else
  511. alpha += val;
  512. }
  513. }
  514. if( alpha2 != 255 )
  515. {
  516. if( alpha2 + val >= 255 )
  517. alpha2 = 255;
  518. else
  519. alpha2 += val;
  520. }
  521. }
  522. else
  523. {
  524. if( sichtbar && alpha != 255 )
  525. {
  526. if( alpha + val >= 255 )
  527. alpha = 255;
  528. else
  529. alpha += val;
  530. }
  531. if( !sichtbar && alpha )
  532. {
  533. if( alpha - val <= 0 )
  534. alpha = 0;
  535. else
  536. alpha -= val;
  537. }
  538. if( alpha2 )
  539. {
  540. if( alpha2 - val <= 0 )
  541. alpha2 = 0;
  542. else
  543. alpha2 -= val;
  544. }
  545. }
  546. return ret;
  547. }
  548. void KartenEditor::render( Bild &zRObj )
  549. {
  550. if( !alpha )
  551. return;
  552. zRObj.setAlpha( alpha2 );
  553. laden->render( zRObj );
  554. zRObj.releaseAlpha();
  555. zRObj.setAlpha( alpha );
  556. karteRelease->render( zRObj );
  557. shopSeite->render( zRObj );
  558. beschreibung->render( zRObj );
  559. teams->render( zRObj );
  560. dateien->render( zRObj );
  561. editor->render( zRObj );
  562. kaufHistorie->render( zRObj );
  563. beenden->render( zRObj );
  564. if( releaseF )
  565. releaseF->render( zRObj );
  566. if( shopSeiteF )
  567. shopSeiteF->render( zRObj );
  568. if( beschreibungF )
  569. beschreibungF->render( zRObj );
  570. if( teamsF )
  571. teamsF->render( zRObj );
  572. if( dateienF )
  573. dateienF->render( zRObj );
  574. zRObj.releaseAlpha();
  575. }
  576. // constant
  577. bool KartenEditor::istSichtbar() const
  578. {
  579. return sichtbar;
  580. }
  581. // Reference Counting
  582. KartenEditor *KartenEditor::getThis()
  583. {
  584. ref++;
  585. return this;
  586. }
  587. KartenEditor *KartenEditor::release()
  588. {
  589. ref--;
  590. if( !ref )
  591. delete this;
  592. return 0;
  593. }