TeamAuswahl.cpp 28 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021
  1. #include "TeamAuswahl.h"
  2. #include "..\..\..\Global\Initialisierung.h"
  3. #include "..\..\..\Global\Variablen.h"
  4. #include <DateiSystem.h>
  5. #include <Rahmen.h>
  6. #include <AlphaFeld.h>
  7. #include <AuswahlBox.h>
  8. // Inhalt der TeamAuswahlListeSpieler Klasse aus TeamAuswahl.h
  9. // Konstruktor
  10. TeamAuswahlListeSpieler::TeamAuswahlListeSpieler( SpielerTeamStruktur *sts, int accountId, int karteId )
  11. : ReferenceCounter()
  12. {
  13. this->accountId = accountId;
  14. Text *n = infoClient->getSpielerName( accountId );
  15. name = initTextFeld( 1, 1, 99, 20, TextFeld::Style::Text | TextFeld::Style::Center, n->getText() );
  16. n->release();
  17. if( accountId == loginClient->getAccountId() )
  18. {
  19. teamAuswahl = uiFactory.createAuswahlBox( uiFactory.initParam );
  20. teamAuswahl->setStyle( AuswahlBox::Style::Sichtbar | AuswahlBox::Style::Erlaubt | AuswahlBox::Style::Rahmen | AuswahlBox::Style::MultiStyled | AuswahlBox::Style::MaxHeight | AuswahlBox::Style::VScroll | AuswahlBox::Style::Hintergrund );
  21. teamAuswahl->setPosition( 100, 1 );
  22. teamAuswahl->setSize( 150, 20 );
  23. teamAuswahl->setEventParam( this );
  24. teamAuswahl->setEventAktion( TeamAuswahlListeSpielerTeamAuswahlE );
  25. }
  26. else
  27. team = initTextFeld( 100, 1, 150, 20, TextFeld::Style::Text | TextFeld::Style::Center, "" );
  28. Array< int > *statistik = new Array< int >();
  29. infoClient->getSpielStatistik( accountId, infoClient->getSpielId( karteId ), statistik );
  30. punkte = initTextFeld( 250, 1, 80, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Punkte: " );
  31. punkte->zText()->append( statistik->hat( 3 ) ? statistik->get( 3 ) : 0 );
  32. spiele = initTextFeld( 330, 1, 80, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Spiele: " );
  33. spiele->zText()->append( statistik->hat( 0 ) ? statistik->get( 0 ) : 0 );
  34. gewonnen = initTextFeld( 410, 1, 90, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Gewonnen: " );
  35. gewonnen->zText()->append( statistik->hat( 1 ) ? statistik->get( 1 ) : 0 );
  36. statistik->release();
  37. farbe = initTextFeld( 500, 1, 50, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Farbe:" );
  38. spielerFarbe = 0;
  39. rahmen = new LRahmen();
  40. rahmen->setSize( 581, 22 );
  41. rahmen->setFarbe( 0xFFFFFFFF );
  42. rahmen->setRamenBreite( 1 );
  43. teamName = new Text( "" );
  44. this->sts = sts;
  45. rend = 0;
  46. }
  47. // Destruktor
  48. TeamAuswahlListeSpieler::~TeamAuswahlListeSpieler()
  49. {
  50. name->release();
  51. if( accountId == loginClient->getAccountId() )
  52. teamAuswahl->release();
  53. else
  54. team->release();
  55. punkte->release();
  56. spiele->release();
  57. gewonnen->release();
  58. farbe->release();
  59. rahmen->release();
  60. teamName->release();
  61. sts->release();
  62. }
  63. // nicht constant
  64. void TeamAuswahlListeSpieler::disable()
  65. {
  66. if( accountId == loginClient->getAccountId() )
  67. teamAuswahl->removeStyle( AuswahlBox::Style::Erlaubt );
  68. }
  69. void TeamAuswahlListeSpieler::spielerTeamAuswahlE( AuswahlBox *obj, int p1, int p2 )
  70. {
  71. Text *tmpTeamName = obj->zEintragText( p2 );
  72. if( !tmpTeamName->istGleich( teamName->getText() ) )
  73. {
  74. if( tmpTeamName->istGleich( "Zufällig" ) )
  75. {
  76. if( !spielClient->spielErstelltTeamWechseln( 0 ) )
  77. obj->setAuswahl( obj->getEintragPos( teamName->getText() ) );
  78. }
  79. else
  80. {
  81. int neuTeam = 0;
  82. for( int i = 0; i < sts->teamAnzahl; i++ )
  83. {
  84. if( sts->teamName->z( i )->istGleich( tmpTeamName->getText() ) )
  85. {
  86. neuTeam = i + 1;
  87. break;
  88. }
  89. }
  90. if( !spielClient->spielErstelltTeamWechseln( neuTeam ) )
  91. obj->setAuswahl( obj->getEintragPos( teamName->getText() ) );
  92. }
  93. obj->einklappen();
  94. }
  95. }
  96. void TeamAuswahlListeSpieler::setFarbe( int farbe )
  97. {
  98. this->spielerFarbe = farbe;
  99. if( farbe )
  100. rahmen->setFarbe( farbe );
  101. else
  102. rahmen->setFarbe( 0xFFFFFFFF );
  103. rend = 1;
  104. }
  105. void TeamAuswahlListeSpieler::setTeam( Text *zName )
  106. {
  107. teamName->setText( zName->getText() );
  108. rend = 1;
  109. }
  110. void TeamAuswahlListeSpieler::setTeamErlaubt( Text *zName, bool erlaubt, int teamFarbe )
  111. {
  112. if( accountId != loginClient->getAccountId() )
  113. return;
  114. if( erlaubt )
  115. {
  116. if( teamAuswahl->getEintragPos( zName->getText() ) < 0 )
  117. {
  118. int p = teamAuswahl->getEintragAnzahl();
  119. teamAuswahl->addEintrag( zName->getText() );
  120. teamAuswahl->setMsStyle( p, AuswahlBox::Style::FeldRahmen | AuswahlBox::Style::MausBuffer | AuswahlBox::Style::AuswahlBuffer | AuswahlBox::Style::FeldBuffer );
  121. if( teamFarbe )
  122. teamAuswahl->zEintrag( p )->setRahmenFarbe( teamFarbe );
  123. teamAuswahl->setMsAuswAlphaFeldFarbe( p, 0x50000000 | ( teamFarbe & 0x00FFFFFF ) );
  124. teamAuswahl->setMsAuswAlphaFeldStrength( p, -15 );
  125. teamAuswahl->setMsMausAlphaFeldFarbe( p, 0x10000000 | ( teamFarbe & 0x00FFFFFF ) );
  126. teamAuswahl->setMsMausAlphaFeldStrength( p, -15 );
  127. }
  128. }
  129. else
  130. {
  131. if( zName->istGleich( teamName->getText() ) )
  132. return;
  133. if( teamAuswahl->getEintragPos( zName->getText() ) >= 0 )
  134. teamAuswahl->removeEintrag( teamAuswahl->getEintragPos( zName->getText() ) );
  135. }
  136. }
  137. bool TeamAuswahlListeSpieler::tick( double tickVal )
  138. {
  139. if( accountId == loginClient->getAccountId() )
  140. rend |= teamAuswahl->tick( tickVal );
  141. else if( !team->zText()->istGleich( teamName->getText() ) )
  142. {
  143. team->setText( "" );
  144. team->zText()->append( teamName->getText() );
  145. }
  146. bool ret = rend;
  147. rend = 0;
  148. return ret;
  149. }
  150. void TeamAuswahlListeSpieler::doPublicMausEreignis( MausEreignis &me )
  151. {
  152. if( accountId == loginClient->getAccountId() )
  153. teamAuswahl->doPublicMausEreignis( me );
  154. }
  155. void TeamAuswahlListeSpieler::render( int yOff, Bild &zRObj )
  156. {
  157. if( !zRObj.setDrawOptions( 0, yOff, 581, 22 ) )
  158. return;
  159. rahmen->render( zRObj );
  160. name->render( zRObj );
  161. if( loginClient->getAccountId() == accountId )
  162. teamAuswahl->render( zRObj );
  163. else
  164. team->render( zRObj );
  165. punkte->render( zRObj );
  166. spiele->render( zRObj );
  167. gewonnen->render( zRObj );
  168. farbe->render( zRObj );
  169. zRObj.alphaRegion( 550, 2, 18, 18, spielerFarbe );
  170. zRObj.releaseDrawOptions();
  171. }
  172. // constant
  173. int TeamAuswahlListeSpieler::getAccountId() const
  174. {
  175. return accountId;
  176. }
  177. // Inhalt der TeamAuswahlListeTeam Klasse aus TeamAuswahl.h
  178. // Konstruktor
  179. TeamAuswahlListeTeam::TeamAuswahlListeTeam()
  180. : ReferenceCounter()
  181. {
  182. maxSpieler = 0;
  183. jetztSpieler = 0;
  184. team = 0;
  185. name = initTextFeld( 0, 0, 300, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Team: " );
  186. mjSpieler = initTextFeld( 300, 0, 150, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Spieler: 0/0" );
  187. farbe = initTextFeld( 450, 0, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, "Team Farbe:" );
  188. teamFarbe = 0;
  189. spieler = new RCArray< TeamAuswahlListeSpieler >();
  190. rahmen = new LRahmen();
  191. rahmen->setSize( 583, 22 );
  192. rahmen->setFarbe( 0xFFFFFFFF );
  193. rahmen->setRamenBreite( 1 );
  194. titelAf = new AlphaFeld();
  195. titelAf->setPosition( 1, 1 );
  196. titelAf->setSize( 581, 20 );
  197. titelAf->setFarbe( 0x1000FF00 );
  198. titelAf->setStrength( -15 );
  199. teamName = new Text( "" );
  200. tickVal = 0;
  201. höhe = 22;
  202. rend = 0;
  203. }
  204. // Destruktor
  205. TeamAuswahlListeTeam::~TeamAuswahlListeTeam()
  206. {
  207. name->release();
  208. mjSpieler->release();
  209. farbe->release();
  210. spieler->release();
  211. rahmen->release();
  212. titelAf->release();
  213. teamName->release();
  214. }
  215. // nicht constant
  216. void TeamAuswahlListeTeam::disable()
  217. {
  218. for( int i = 0; i < jetztSpieler; i++ )
  219. spieler->z( i )->disable();
  220. }
  221. void TeamAuswahlListeTeam::setMaxSpieler( int maxSpieler )
  222. {
  223. this->maxSpieler = maxSpieler;
  224. rend = 1;
  225. }
  226. void TeamAuswahlListeTeam::setName( Text *name )
  227. {
  228. teamName->setText( name->getText() );
  229. name->release();
  230. rend = 1;
  231. }
  232. void TeamAuswahlListeTeam::setFarbe( int farbe )
  233. {
  234. teamFarbe = farbe;
  235. rahmen->setFarbe( teamFarbe );
  236. rend = 1;
  237. }
  238. void TeamAuswahlListeTeam::setTeam( int team )
  239. {
  240. this->team = team;
  241. rend = 1;
  242. }
  243. void TeamAuswahlListeTeam::addSpieler( TeamAuswahlListeSpieler *spieler )
  244. {
  245. if( !jetztSpieler )
  246. höhe++;
  247. spieler->setTeam( teamName );
  248. höhe += 22;
  249. this->spieler->set( spieler, jetztSpieler );
  250. jetztSpieler++;
  251. rend = 1;
  252. }
  253. void TeamAuswahlListeTeam::removeSpieler( int accountId )
  254. {
  255. höhe -= 22;
  256. for( int i = 0; i < jetztSpieler; i++ )
  257. {
  258. if( spieler->z( i )->getAccountId() == accountId )
  259. {
  260. jetztSpieler--;
  261. spieler->remove( i );
  262. rend = 1;
  263. break;
  264. }
  265. }
  266. if( !jetztSpieler )
  267. höhe = 22;
  268. }
  269. void TeamAuswahlListeTeam::setTeamErlaubt( Text *zName, bool erlaubt, int teamFarbe )
  270. {
  271. for( int i = 0; i < jetztSpieler; i++ )
  272. spieler->z( i )->setTeamErlaubt( zName, erlaubt, teamFarbe );
  273. }
  274. bool TeamAuswahlListeTeam::tick( double tickVal )
  275. {
  276. this->tickVal += tickVal * 50;
  277. int val = (int)this->tickVal;
  278. if( val > 2 )
  279. val = 2;
  280. this->tickVal -= val;
  281. if( val )
  282. {
  283. if( rahmen->getHeight() > höhe )
  284. {
  285. rahmen->setSize( rahmen->getBreite(), rahmen->getHeight() - val );
  286. if( rahmen->getHeight() < höhe )
  287. rahmen->setSize( rahmen->getBreite(), höhe );
  288. rend = 1;
  289. }
  290. if( rahmen->getHeight() < höhe )
  291. {
  292. rahmen->setSize( rahmen->getBreite(), rahmen->getHeight() + val );
  293. if( rahmen->getHeight() > höhe )
  294. rahmen->setSize( rahmen->getBreite(), höhe );
  295. rend = 1;
  296. }
  297. }
  298. name->setText( "Team: " );
  299. name->zText()->append( teamName->getText() );
  300. mjSpieler->setText( "Spieler: " );
  301. mjSpieler->zText()->append( jetztSpieler );
  302. mjSpieler->zText()->append( "/" );
  303. mjSpieler->zText()->append( maxSpieler );
  304. for( int i = 0; i < jetztSpieler; i++ )
  305. rend |= spieler->z( i )->tick( tickVal );
  306. bool ret = rend;
  307. rend = 0;
  308. return ret;
  309. }
  310. void TeamAuswahlListeTeam::doPublicMausEreignis( MausEreignis &me )
  311. {
  312. int tmpX = me.mx;
  313. int tmpY = me.my;
  314. me.mx--;
  315. me.my -= 22;
  316. for( int i = 0; i < jetztSpieler; i++ )
  317. {
  318. spieler->z( i )->doPublicMausEreignis( me );
  319. me.my -= 22;
  320. }
  321. me.mx = tmpX;
  322. me.my = tmpY;
  323. }
  324. void TeamAuswahlListeTeam::render( int yOff, Bild &zRObj )
  325. {
  326. if( !zRObj.setDrawOptions( 50, yOff, 583, rahmen->getHeight() + 1 ) )
  327. return;
  328. rahmen->render( zRObj );
  329. titelAf->setPosition( 1, 1 );
  330. titelAf->render( zRObj );
  331. name->render( zRObj );
  332. mjSpieler->render( zRObj );
  333. farbe->render( zRObj );
  334. zRObj.alphaRegion( 550, 2, 18, 18, teamFarbe );
  335. zRObj.drawLinieH( 1, 21, 581, rahmen->getFarbe() );
  336. if( !zRObj.setDrawOptions( 1, 22, 582, rahmen->getHeight() ) )
  337. {
  338. zRObj.releaseDrawOptions();
  339. return;
  340. }
  341. int y = 22 * ( jetztSpieler - 1 );
  342. for( int i = jetztSpieler - 1; i >= 0; i-- )
  343. {
  344. spieler->z( i )->render( y, zRObj );
  345. y -= 22;
  346. }
  347. zRObj.releaseDrawOptions();
  348. zRObj.releaseDrawOptions();
  349. }
  350. // constant
  351. int TeamAuswahlListeTeam::getTeamNummer() const
  352. {
  353. return team;
  354. }
  355. int TeamAuswahlListeTeam::getHeight() const
  356. {
  357. return rahmen->getHeight() + 1;
  358. }
  359. bool TeamAuswahlListeTeam::istPlatzFrei() const
  360. {
  361. return jetztSpieler < maxSpieler;
  362. }
  363. int TeamAuswahlListeTeam::getMaxSpieler() const
  364. {
  365. return maxSpieler;
  366. }
  367. Text *TeamAuswahlListeTeam::zName() const
  368. {
  369. return teamName;
  370. }
  371. TeamAuswahlListeSpieler *TeamAuswahlListeTeam::getSpielerDaten( int accountId ) const
  372. {
  373. for( int i = 0; i < jetztSpieler; i++ )
  374. {
  375. if( spieler->z( i )->getAccountId() == accountId )
  376. return spieler->get( i );
  377. }
  378. return 0;
  379. }
  380. TeamAuswahlListeSpieler *TeamAuswahlListeTeam::zSpielerDaten( int accountId ) const
  381. {
  382. for( int i = 0; i < jetztSpieler; i++ )
  383. {
  384. if( spieler->z( i )->getAccountId() == accountId )
  385. return spieler->z( i );
  386. }
  387. return 0;
  388. }
  389. // Inhalt der TeamAuswahlListe Klasse aus TeamAuswahl.h
  390. // Konstruktor
  391. TeamAuswahlListe::TeamAuswahlListe( SpielerTeamStruktur *sts, int karteId )
  392. : ReferenceCounter()
  393. {
  394. rahmen = new LRahmen();
  395. rahmen->setSize( 698, 398 );
  396. rahmen->setFarbe( 0xFFFFFFFF );
  397. rahmen->setRamenBreite( 1 );
  398. scroll = new VScrollBar();
  399. scroll->update( 0, 396 );
  400. scroll->setKlickScroll( 7 );
  401. teams = new RCArray< TeamAuswahlListeTeam >();
  402. TeamAuswahlListeTeam *zufall = new TeamAuswahlListeTeam();
  403. zufall->setTeam( 0 );
  404. zufall->setName( new Text( "Zufällig" ) );
  405. zufall->setMaxSpieler( sts->spielerAnzahl );
  406. teams->set( zufall, 0 );
  407. for( int i = 0; i < sts->teamAnzahl; i++ )
  408. {
  409. TeamAuswahlListeTeam *tmp = new TeamAuswahlListeTeam();
  410. tmp->setTeam( i );
  411. tmp->setName( sts->teamName->get( i ) );
  412. tmp->setFarbe( sts->teamFarbe->hat( i ) ? sts->teamFarbe->get( i ) : 0 );
  413. tmp->setMaxSpieler( sts->teamSize->hat( i ) ? sts->teamSize->get( i ) : 0 );
  414. teams->set( tmp, i + 1 );
  415. }
  416. teamAnzahl = 1 + sts->teamAnzahl;
  417. this->karteId = karteId;
  418. this->sts = sts;
  419. rend = 0;
  420. }
  421. // Destruktor
  422. TeamAuswahlListe::~TeamAuswahlListe()
  423. {
  424. rahmen->release();
  425. scroll->release();
  426. teams->release();
  427. sts->release();
  428. }
  429. // nicht constant
  430. void TeamAuswahlListe::disable()
  431. {
  432. for( int i = 0; i < teamAnzahl; i++ )
  433. teams->z( i )->disable();
  434. }
  435. void TeamAuswahlListe::setTeamVonSpieler( int accountId, int spielerNummer )
  436. {
  437. if( spielerNummer == 0 )
  438. {
  439. int neuTeam = 0;
  440. int altTeam = 0;
  441. for( int j = 0; j < teamAnzahl; j++ )
  442. {
  443. if( teams->z( j )->zSpielerDaten( accountId ) )
  444. {
  445. altTeam = j;
  446. break;
  447. }
  448. }
  449. TeamAuswahlListeSpieler *tmp = teams->z( altTeam )->getSpielerDaten( accountId );
  450. teams->z( altTeam )->removeSpieler( accountId );
  451. tmp->setFarbe( 0 );
  452. teams->z( neuTeam )->addSpieler( tmp );
  453. }
  454. else
  455. {
  456. int team = 0;
  457. int max = 0;
  458. int min = 0;
  459. for( int i = 0; i < sts->teamAnzahl; i++ )
  460. {
  461. min = max;
  462. max += sts->teamSize->get( i );
  463. if( spielerNummer - 1 >= min && spielerNummer - 1 < max )
  464. {
  465. int neuTeam = i + 1;
  466. int altTeam = 0;
  467. for( int j = 0; j < teamAnzahl; j++ )
  468. {
  469. if( teams->z( j )->zSpielerDaten( accountId ) )
  470. {
  471. altTeam = j;
  472. break;
  473. }
  474. }
  475. TeamAuswahlListeSpieler *tmp = teams->z( altTeam )->getSpielerDaten( accountId );
  476. teams->z( altTeam )->removeSpieler( accountId );
  477. tmp->setFarbe( sts->spielerFarbe->hat( spielerNummer - 1 ) ? sts->spielerFarbe->get( spielerNummer - 1 ) : 0 );
  478. teams->z( neuTeam )->addSpieler( tmp );
  479. break;
  480. }
  481. }
  482. }
  483. for( int i = 0; i < teamAnzahl; i++ )
  484. {
  485. for( int j = 0; j < teamAnzahl; j++ )
  486. {
  487. if( i == 0 )
  488. teams->z( j )->setTeamErlaubt( teams->z( i )->zName(), teams->z( i )->istPlatzFrei(), 0 );
  489. else
  490. teams->z( j )->setTeamErlaubt( teams->z( i )->zName(), teams->z( i )->istPlatzFrei(), sts->teamFarbe->hat( i - 1 ) ? sts->teamFarbe->get( i - 1 ) : 0 );
  491. }
  492. }
  493. rend = 1;
  494. }
  495. void TeamAuswahlListe::addSpieler( int accountId )
  496. {
  497. TeamAuswahlListeSpieler *tmp = new TeamAuswahlListeSpieler( sts->getThis(), accountId, karteId );
  498. for( int i = 0; i < teamAnzahl; i++ )
  499. {
  500. if( teams->z( i )->istPlatzFrei() )
  501. {
  502. if( i == 0 )
  503. tmp->setTeamErlaubt( teams->z( i )->zName(), 1, 0 );
  504. else
  505. tmp->setTeamErlaubt( teams->z( i )->zName(), 1, sts->teamFarbe->hat( i - 1 ) ? sts->teamFarbe->get( i - 1 ) : 0 );
  506. }
  507. }
  508. teams->z( 0 )->addSpieler( tmp );
  509. for( int i = 0; i < teamAnzahl; i++ )
  510. teams->z( i )->setTeamErlaubt( teams->z( 0 )->zName(), teams->z( 0 )->istPlatzFrei(), 0 );
  511. rend = 1;
  512. }
  513. void TeamAuswahlListe::removeSpieler( int accountId )
  514. {
  515. for( int i = 0; i < teamAnzahl; i++ )
  516. {
  517. if( teams->z( i )->zSpielerDaten( accountId ) )
  518. teams->z( i )->removeSpieler( accountId );
  519. }
  520. for( int i = 0; i < teamAnzahl; i++ )
  521. {
  522. for( int j = 0; j < teamAnzahl; j++ )
  523. {
  524. if( i == 0 )
  525. teams->z( j )->setTeamErlaubt( teams->z( i )->zName(), teams->z( i )->istPlatzFrei(), 0 );
  526. else
  527. teams->z( j )->setTeamErlaubt( teams->z( i )->zName(), teams->z( i )->istPlatzFrei(), sts->teamFarbe->hat( i - 1 ) ? sts->teamFarbe->get( i - 1 ) : 0 );
  528. }
  529. }
  530. rend = 1;
  531. }
  532. bool TeamAuswahlListe::tick( double tickVal )
  533. {
  534. for( int i = 0; i < teamAnzahl; i++ )
  535. rend |= teams->z( i )->tick( tickVal );
  536. rend |= scroll->getRend();
  537. bool ret = rend;
  538. rend = 0;
  539. return ret;
  540. }
  541. void TeamAuswahlListe::doPublicMausEreignis( MausEreignis &me )
  542. {
  543. int tmpX = me.mx;
  544. int tmpY = me.my;
  545. me.mx -= 50;
  546. me.my -= 50 - scroll->getScroll();
  547. for( int i = 0; i < teamAnzahl; i++ )
  548. {
  549. teams->z( i )->doPublicMausEreignis( me );
  550. me.my -= 20 + teams->z( i )->getHeight();
  551. }
  552. me.mx = tmpX;
  553. me.my = tmpY;
  554. if( me.mx > 1 && me.mx < 698 && me.my > 1 && me.my < 397 )
  555. {
  556. scroll->doMausMessage( 683, 1, 15, 396, me );
  557. me.verarbeitet = 1;
  558. }
  559. }
  560. void TeamAuswahlListe::render( Bild &zRObj )
  561. {
  562. if( !zRObj.setDrawOptions( 0, 0, 698, 398 ) )
  563. return;
  564. rahmen->render( zRObj );
  565. int maxHöhe = 50;
  566. for( int i = 0; i < teamAnzahl; i++ )
  567. maxHöhe += 20 + teams->z( i )->getHeight();
  568. maxHöhe += 30;
  569. scroll->update( maxHöhe, 396 );
  570. scroll->render( 683, 1, 15, 396, zRObj );
  571. if( !zRObj.setDrawOptions( 1, 1, 682, 395 ) )
  572. {
  573. zRObj.releaseDrawOptions();
  574. return;
  575. }
  576. int y = 50 - scroll->getScroll();
  577. for( int i = 0; i < teamAnzahl - 1; i++ )
  578. y += 20 + teams->z( i )->getHeight();
  579. for( int i = teamAnzahl - 1; i >= 0; i-- )
  580. {
  581. teams->z( i )->render( y, zRObj );
  582. if( i > 0 )
  583. y -= 20 + teams->z( i - 1 )->getHeight();
  584. }
  585. zRObj.releaseDrawOptions();
  586. zRObj.releaseDrawOptions();
  587. }
  588. // Inhalt der TeamAuswahlTimer Klasse aus TeamAuswahl.h
  589. // Konstruktor
  590. TeamAuswahlTimer::TeamAuswahlTimer()
  591. : ReferenceCounter()
  592. {
  593. zeit = initTextFeld( 0, 0, 200, 200, TextFeld::Style::Text | TextFeld::Style::Center, "" );
  594. bestätigen = initKnopf( 65, 170, 70, 20, Knopf::Style::Sichtbar, "Fertig" );
  595. time = 0;
  596. maxTime = 0;
  597. grad = 0;
  598. rend = 0;
  599. }
  600. // Destruktor
  601. TeamAuswahlTimer::~TeamAuswahlTimer()
  602. {
  603. zeit->release();
  604. bestätigen->release();
  605. }
  606. // nicht constant
  607. void TeamAuswahlTimer::setVerbleibendeZeit( int sekunden )
  608. {
  609. if( !maxTime )
  610. maxTime = sekunden;
  611. if( time != sekunden )
  612. rend = 1;
  613. time = sekunden;
  614. }
  615. bool TeamAuswahlTimer::doPublicMausEreignis( MausEreignis &me )
  616. {
  617. bool vera = me.verarbeitet;
  618. bestätigen->doPublicMausEreignis( me );
  619. if( !vera && me.verarbeitet && me.id == ME_RLinks )
  620. {
  621. if( spielClient->spielErstelltTeamFertig() )
  622. {
  623. bestätigen->removeStyle( Knopf::Style::Erlaubt );
  624. return 1;
  625. }
  626. }
  627. return 0;
  628. }
  629. bool TeamAuswahlTimer::tick( double tickVal )
  630. {
  631. zeit->setText( "" );
  632. zeit->zText()->append( time );
  633. grad += ( tickVal * 2 );
  634. rend = 1;
  635. if( grad > 360 )
  636. grad -= 360;
  637. bool ret = rend;
  638. rend = 0;
  639. return ret;
  640. }
  641. void TeamAuswahlTimer::render( Bild &zRObj )
  642. {
  643. if( !zRObj.setDrawOptions( 498, 398, 200, 200 ) )
  644. return;
  645. zeit->render( zRObj );
  646. int r = ( maxTime && time ) ? 90 - (int)( 75.0 / ( (double)maxTime / ( maxTime - time ) ) + 0.5 ) : 15;
  647. zRObj.drawKreis( 100, 100, 15, 0xFFFF0000 );
  648. zRObj.drawKreis( 100, 100, r, 0xFF00FF00 );
  649. int x1 = 100 + (int)( sin( grad ) * 15 );
  650. int y1 = 100 + (int)( cos( grad ) * 15 );
  651. int x2 = 100 + (int)( sin( grad ) * r );
  652. int y2 = 100 + (int)( cos( grad ) * r );
  653. zRObj.drawLinie( Punkt( x1, y1 ), Punkt( x2, y2 ), 0xFFFFFF00 );
  654. bestätigen->render( zRObj );
  655. zRObj.releaseDrawOptions();
  656. }
  657. // constant
  658. int TeamAuswahlTimer::getZeit() const
  659. {
  660. return time;
  661. }
  662. // Inhalt der TeamAuswahlChat Klasse aus TeamAuswahl.h
  663. // Konstruktor
  664. TeamAuswahlChat::TeamAuswahlChat()
  665. : ReferenceCounter()
  666. {
  667. nachricht = initTextFeld( 2, 178, 472, 20, TextFeld::Style::TextFeld, "" );
  668. Bild *sendenBild = bilder->get( "data/client/bilder/chat.ltdb/senden.png" );
  669. senden = initKnopf( 476, 178, 20, 20, 0, "" );
  670. senden->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Hintergrund | Knopf::Style::HAlpha | Knopf::Style::HBild | Knopf::Style::KlickBuffer );
  671. senden->setHintergrundBildZ( sendenBild );
  672. verlauf = initTextFeld( 2, 2, 494, 174, TextFeld::Style::TextGebiet & ~TextFeld::Style::Erlaubt, "" );
  673. verlauf->updateVScroll();
  674. verlauf->setVertikalKlickScroll( 5 );
  675. rahmen = new LRahmen();
  676. rahmen->setSize( 498, 200 );
  677. rahmen->setFarbe( 0xFFFFFFFF );
  678. rahmen->setRamenBreite( 1 );
  679. rend = 0;
  680. }
  681. // Destruktor
  682. TeamAuswahlChat::~TeamAuswahlChat()
  683. {
  684. nachricht->release();
  685. senden->release();
  686. verlauf->release();
  687. rahmen->release();
  688. }
  689. // nicht constant
  690. void TeamAuswahlChat::addNachricht( char *nachricht )
  691. {
  692. verlauf->addZeile( nachricht );
  693. verlauf->updateVScroll();
  694. rend = 1;
  695. }
  696. bool TeamAuswahlChat::tick( double tickVal )
  697. {
  698. rend |= verlauf->tick( tickVal );
  699. rend |= nachricht->tick( tickVal );
  700. rend |= senden->tick( tickVal );
  701. bool ret = rend;
  702. rend = 0;
  703. return ret;
  704. }
  705. void TeamAuswahlChat::doPublicMausEreignis( MausEreignis &me )
  706. {
  707. verlauf->doPublicMausEreignis( me );
  708. nachricht->doPublicMausEreignis( me );
  709. bool ver = !me.verarbeitet;
  710. senden->doPublicMausEreignis( me );
  711. int aktion = ( ver && me.verarbeitet && me.id == ME_RLinks ) ? 1 : 0;
  712. if( aktion == 1 )
  713. { // Nachricht senden
  714. if( spielClient->spielErstelltChatNachricht( nachricht->zText()->getText() ) )
  715. {
  716. nachricht->setText( "" );
  717. nachricht->setAuswahl( 0, 0 );
  718. rend = 1;
  719. }
  720. else
  721. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( spielClient->getLetzterFehler() ), new Text( "Ok" ), 0 );
  722. }
  723. }
  724. void TeamAuswahlChat::doTastaturEreignis( TastaturEreignis &te )
  725. {
  726. bool ver = !te.verarbeitet;
  727. nachricht->doTastaturEreignis( te );
  728. int aktion = ( ver && te.verarbeitet && te.id == TE_Release && te.taste == T_Enter ) ? 1 : 0;
  729. if( aktion == 1 )
  730. { // Nachricht senden
  731. if( spielClient->spielErstelltChatNachricht( nachricht->zText()->getText() ) )
  732. {
  733. nachricht->setText( "" );
  734. nachricht->setAuswahl( 0, 0 );
  735. rend = 1;
  736. }
  737. else
  738. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( spielClient->getLetzterFehler() ), new Text( "Ok" ), 0 );
  739. }
  740. }
  741. void TeamAuswahlChat::render( Bild &zRObj )
  742. {
  743. if( !zRObj.setDrawOptions( 0, 398, 498, 200 ) )
  744. return;
  745. rahmen->render( zRObj );
  746. verlauf->render( zRObj );
  747. nachricht->render( zRObj );
  748. senden->render( zRObj );
  749. zRObj.releaseDrawOptions();
  750. }
  751. // Inhalt der TeamAuswahl Klasse aus TeamAuswahl.h
  752. // Konstruktor
  753. TeamAuswahl::TeamAuswahl()
  754. : ReferenceCounter()
  755. {
  756. tickVal = 0;
  757. animation = 0;
  758. sichtbar = 0;
  759. alpha = 0;
  760. karteId = 0;
  761. sts = 0;
  762. chat = 0;
  763. timer = 0;
  764. liste = 0;
  765. rend = 0;
  766. }
  767. // Destruktor
  768. TeamAuswahl::~TeamAuswahl()
  769. {
  770. if( sichtbar )
  771. setSichtbar( 0 );
  772. if( chat )
  773. chat->release();
  774. if( timer )
  775. timer->release();
  776. if( liste )
  777. liste->release();
  778. if( sts )
  779. sts->release();
  780. }
  781. // nicht constant
  782. void TeamAuswahl::setKarteId( int karteId )
  783. {
  784. this->karteId = karteId;
  785. }
  786. void TeamAuswahl::setSichtbar( bool sichtbar, bool sofort )
  787. {
  788. this->sichtbar = sichtbar;
  789. if( sichtbar )
  790. animation |= 0x1;
  791. else
  792. {
  793. if( sofort )
  794. alpha = 0;
  795. else
  796. animation &= ~0x1;
  797. }
  798. rend = 1;
  799. }
  800. void TeamAuswahl::initSTS( SpielerTeamStruktur *sts )
  801. {
  802. uiFactory.initParam.bildschirm->lock();
  803. if( this->sts )
  804. this->sts->release();
  805. this->sts = sts;
  806. if( chat )
  807. chat = (TeamAuswahlChat *)chat->release();
  808. if( timer )
  809. timer = (TeamAuswahlTimer *)timer->release();
  810. if( liste )
  811. liste = (TeamAuswahlListe *)liste->release();
  812. chat = new TeamAuswahlChat();
  813. timer = new TeamAuswahlTimer();
  814. liste = new TeamAuswahlListe( sts->getThis(), karteId );
  815. uiFactory.initParam.bildschirm->unlock();
  816. rend = 1;
  817. }
  818. void TeamAuswahl::addSpieler( int accountId )
  819. {
  820. if( liste )
  821. liste->addSpieler( accountId );
  822. }
  823. void TeamAuswahl::setSpielerNummer( int accountId, int sNummer )
  824. {
  825. if( liste )
  826. liste->setTeamVonSpieler( accountId, sNummer );
  827. }
  828. void TeamAuswahl::removeSpieler( int accountId )
  829. {
  830. if( liste )
  831. liste->removeSpieler( accountId );
  832. }
  833. void TeamAuswahl::verbleibendeZeit( int sekunden )
  834. {
  835. if( timer )
  836. timer->setVerbleibendeZeit( sekunden );
  837. }
  838. void TeamAuswahl::addNachricht( char *nachricht )
  839. {
  840. if( chat )
  841. chat->addNachricht( nachricht );
  842. }
  843. bool TeamAuswahl::tick( double tickVal )
  844. {
  845. if( !sichtbar && !alpha )
  846. return 0;
  847. if( chat )
  848. rend |= chat->tick( tickVal );
  849. if( timer )
  850. rend |= timer->tick( tickVal );
  851. if( liste )
  852. rend |= liste->tick( tickVal );
  853. this->tickVal += tickVal * 150;
  854. int val = (int)this->tickVal;
  855. if( !val )
  856. {
  857. bool ret = rend;
  858. rend = 0;
  859. return ret;
  860. }
  861. if( val > 5 )
  862. val = 5;
  863. this->tickVal -= val;
  864. if( ( animation | 0x1 ) == animation ) // sichtbar werden
  865. {
  866. if( alpha != 255 )
  867. {
  868. if( alpha + val < 255 )
  869. alpha += val;
  870. else
  871. alpha = 255;
  872. rend = 1;
  873. }
  874. }
  875. else // unsichtbar werden
  876. {
  877. if( alpha != 0 )
  878. {
  879. if( alpha - val >= 0 )
  880. alpha -= val;
  881. else
  882. alpha = 0;
  883. rend = 1;
  884. }
  885. }
  886. bool ret = rend;
  887. rend = 0;
  888. return ret;
  889. }
  890. void TeamAuswahl::doPublicMausEreignis( MausEreignis &me )
  891. {
  892. if( !alpha )
  893. return;
  894. if( liste )
  895. liste->doPublicMausEreignis( me );
  896. if( chat )
  897. {
  898. me.my -= 398;
  899. chat->doPublicMausEreignis( me );
  900. me.mx -= 498;
  901. if( timer->doPublicMausEreignis( me ) )
  902. liste->disable();
  903. me.my += 398;
  904. me.mx += 498;
  905. }
  906. }
  907. void TeamAuswahl::doTastaturEreignis( TastaturEreignis &te )
  908. {
  909. if( !alpha )
  910. return;
  911. if( chat )
  912. chat->doTastaturEreignis( te );
  913. }
  914. void TeamAuswahl::render( Bild &zRObj )
  915. {
  916. if( !alpha )
  917. return;
  918. if( !zRObj.setDrawOptions( 0, 0, 700, 600 ) )
  919. return;
  920. zRObj.setAlpha( alpha );
  921. if( timer )
  922. timer->render( zRObj );
  923. if( chat )
  924. chat->render( zRObj );
  925. if( liste )
  926. liste->render( zRObj );
  927. zRObj.releaseAlpha();
  928. zRObj.releaseDrawOptions();
  929. }
  930. // constant
  931. bool TeamAuswahl::istSichtbar() const
  932. {
  933. return sichtbar;
  934. }
  935. int TeamAuswahl::getKarteId() const
  936. {
  937. return karteId;
  938. }
  939. SpielerTeamStruktur *TeamAuswahl::getSTS() const
  940. {
  941. return sts->getThis();
  942. }
  943. // Event Aktionen
  944. void TeamAuswahlListeSpielerTeamAuswahlE( void *p, AuswahlBox *obj, int p1, int p2 )
  945. {
  946. if( !p )
  947. return;
  948. ( (TeamAuswahlListeSpieler *)p )->spielerTeamAuswahlE( obj, p1, p2 );
  949. }