TeamAuswahl.cpp 24 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(const 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(const 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. }