Gruppe.cpp 69 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545
  1. #include "Gruppe.h"
  2. #include <AlphaFeld.h>
  3. #include <DateiSystem.h>
  4. #include <Globals.h>
  5. #include <Punkt.h>
  6. #include <Rahmen.h>
  7. #include <ToolTip.h>
  8. #include "..\..\..\Global\Initialisierung.h"
  9. #include "..\..\..\Global\Variablen.h"
  10. #include "..\..\..\Leser\KartenLeser.h"
  11. // Inhalt der GruppeEinladungAccount Klasse aus Gruppe.h
  12. // Konstruktor
  13. GruppeEinladungAccount::GruppeEinladungAccount()
  14. : ReferenceCounter()
  15. {
  16. Bild* nachrichtBild
  17. = bilder->get("data/client/bilder/chat.ltdb/nachricht.png");
  18. Bild* neuSendenBild
  19. = bilder->get("data/client/bilder/chat.ltdb/neusenden.png");
  20. Bild* entfernenBild
  21. = bilder->get("data/client/bilder/chat.ltdb/entfernen.png");
  22. rahmen = new LRahmen();
  23. rahmen->setFarbe(0xFFFFFFFF);
  24. rahmen->setRamenBreite(1);
  25. auswahl = new AlphaFeld();
  26. auswahl->setFarbe(0x0000FF00);
  27. auswahl->setStrength(-2);
  28. auswahl->setPosition(1, 1);
  29. name = initTextFeld(
  30. 0, 5, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, "");
  31. nachrichtSenden = initKnopf(0, 30, 20, 20, 0, "");
  32. nachrichtSenden->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt
  33. | Knopf::Style::Hintergrund | Knopf::Style::HAlpha
  34. | Knopf::Style::HBild
  35. | Knopf::Style::KlickBuffer);
  36. nachrichtSenden->setHintergrundBildZ(nachrichtBild);
  37. initToolTip(nachrichtSenden, "Nachricht senden.");
  38. erneutSenden = initKnopf(0, 30, 20, 20, 0, "");
  39. erneutSenden->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt
  40. | Knopf::Style::Hintergrund | Knopf::Style::HAlpha
  41. | Knopf::Style::HBild | Knopf::Style::KlickBuffer);
  42. erneutSenden->setHintergrundBildZ(neuSendenBild);
  43. initToolTip(erneutSenden, "Einladung erneut senden.");
  44. einladungAbbrechen = initKnopf(0, 30, 20, 20, 0, "");
  45. einladungAbbrechen->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt
  46. | Knopf::Style::Hintergrund
  47. | Knopf::Style::HAlpha | Knopf::Style::HBild
  48. | Knopf::Style::KlickBuffer);
  49. einladungAbbrechen->setHintergrundBildZ(entfernenBild);
  50. initToolTip(einladungAbbrechen, "Einladung abbrechen.");
  51. status = 0;
  52. knopfX = 500;
  53. tickVal = 0;
  54. mausIn = 0;
  55. remove = 0;
  56. gruppeId = 0;
  57. accountId = 0;
  58. admin = 0;
  59. höhe = 0;
  60. animation = 0x1;
  61. rend = 0;
  62. }
  63. // Destruktor
  64. GruppeEinladungAccount::~GruppeEinladungAccount()
  65. {
  66. rahmen->release();
  67. auswahl->release();
  68. name->release();
  69. nachrichtSenden->release();
  70. erneutSenden->release();
  71. einladungAbbrechen->release();
  72. }
  73. // nicht constant
  74. void GruppeEinladungAccount::setGruppeId(int gruppeId)
  75. {
  76. this->gruppeId = gruppeId;
  77. }
  78. void GruppeEinladungAccount::setAccountId(int id)
  79. {
  80. this->accountId = id;
  81. name->setText(infoClient->getSpielerName(id));
  82. rend = 1;
  83. }
  84. void GruppeEinladungAccount::setSize(int br)
  85. {
  86. if (this->br != br) rend = 1;
  87. this->br = br;
  88. if (knopfX == 500)
  89. {
  90. knopfX = br;
  91. rend = 1;
  92. }
  93. }
  94. void GruppeEinladungAccount::setAbgelehnt()
  95. {
  96. status = 1;
  97. }
  98. void GruppeEinladungAccount::setAngenommen()
  99. {
  100. status = 2;
  101. }
  102. void GruppeEinladungAccount::setRemove()
  103. {
  104. animation &= ~0x1;
  105. }
  106. void GruppeEinladungAccount::setAdmin(int admin)
  107. {
  108. this->admin = admin;
  109. }
  110. bool GruppeEinladungAccount::tick(double tickVal)
  111. {
  112. rend |= name->tick(tickVal);
  113. rend |= nachrichtSenden->tick(tickVal);
  114. rend |= erneutSenden->tick(tickVal);
  115. rend |= einladungAbbrechen->tick(tickVal);
  116. this->tickVal += tickVal * 100;
  117. int val = (int)this->tickVal;
  118. if (val < 1)
  119. {
  120. bool ret = rend;
  121. rend = 0;
  122. return ret;
  123. }
  124. if (val > 4) val = 4;
  125. this->tickVal -= val;
  126. if ((animation | 0x1) == animation)
  127. {
  128. if (höhe < 30)
  129. {
  130. höhe += val;
  131. if (höhe > 30) höhe = 30;
  132. rend = 1;
  133. }
  134. }
  135. else
  136. {
  137. if (höhe > 0)
  138. {
  139. höhe -= val;
  140. if (höhe < 0) höhe = 0;
  141. rend = 1;
  142. }
  143. }
  144. if (mausIn)
  145. {
  146. if (admin == loginClient->getAccountId() && !status)
  147. {
  148. if (knopfX > br - 60)
  149. {
  150. knopfX -= val;
  151. if (knopfX < br - 60) knopfX = br - 60;
  152. rend = 1;
  153. }
  154. }
  155. else if (admin == loginClient->getAccountId() && status != 2)
  156. {
  157. if (knopfX > br - 40)
  158. {
  159. knopfX -= val;
  160. if (knopfX < br - 40) knopfX = br - 40;
  161. rend = 1;
  162. }
  163. }
  164. else
  165. {
  166. if (knopfX > br - 20)
  167. {
  168. knopfX -= val;
  169. if (knopfX < br - 20) knopfX = br - 20;
  170. rend = 1;
  171. }
  172. }
  173. }
  174. else
  175. {
  176. if (knopfX < br)
  177. {
  178. knopfX += val;
  179. if (knopfX > br) knopfX = br;
  180. rend = 1;
  181. }
  182. }
  183. switch (status)
  184. {
  185. case 1:
  186. if (1)
  187. {
  188. int r = (rahmen->getFarbe() >> 16) & 0xFF;
  189. int g = (rahmen->getFarbe() >> 8) & 0xFF;
  190. int b = rahmen->getFarbe() & 0xFF;
  191. if (r < 255)
  192. {
  193. r += val;
  194. if (r > 255) r = 255;
  195. rend = 1;
  196. }
  197. if (g > 0)
  198. {
  199. g -= val;
  200. if (g < 0) g = 0;
  201. rend = 1;
  202. }
  203. if (b > 0)
  204. {
  205. b -= val;
  206. if (b < 0) b = 0;
  207. rend = 1;
  208. }
  209. int f = ((r << 16) & 0xFF0000) | ((g << 8) & 0xFF00) | (b & 0xFF);
  210. rahmen->setFarbe((rahmen->getFarbe() & 0xFF000000) | f);
  211. auswahl->setFarbe((auswahl->getFarbe() & 0xFF000000) | f);
  212. }
  213. break;
  214. case 2:
  215. if (1)
  216. {
  217. int r = (rahmen->getFarbe() >> 16) & 0xFF;
  218. int g = (rahmen->getFarbe() >> 8) & 0xFF;
  219. int b = rahmen->getFarbe() & 0xFF;
  220. if (r > 0)
  221. {
  222. r -= val;
  223. if (r < 0) r = 0;
  224. rend = 1;
  225. }
  226. if (g < 255)
  227. {
  228. g += val;
  229. if (g > 255) g = 255;
  230. rend = 1;
  231. }
  232. if (b > 0)
  233. {
  234. b -= val;
  235. if (b < 0) b = 0;
  236. rend = 1;
  237. }
  238. int f = ((r << 16) & 0xFF0000) | ((g << 8) & 0xFF00) | (b & 0xFF);
  239. rahmen->setFarbe((rahmen->getFarbe() & 0xFF000000) | f);
  240. auswahl->setFarbe((auswahl->getFarbe() & 0xFF000000) | f);
  241. }
  242. break;
  243. }
  244. bool ret = rend;
  245. rend = 0;
  246. return ret;
  247. }
  248. void GruppeEinladungAccount::doPublicMausEreignis(MausEreignis& me)
  249. {
  250. if (me.mx < 0 || me.my < 0 || me.mx > br || me.my > höhe)
  251. mausIn = 0;
  252. else
  253. mausIn = 1;
  254. bool ak = !me.verarbeitet;
  255. nachrichtSenden->doPublicMausEreignis(me);
  256. int aktion = (me.verarbeitet && ak) ? 1 : 0;
  257. erneutSenden->doPublicMausEreignis(me);
  258. aktion = (me.verarbeitet && ak && !aktion) ? 2 : aktion;
  259. einladungAbbrechen->doPublicMausEreignis(me);
  260. aktion = (me.verarbeitet && ak && !status && !aktion) ? 3 : aktion;
  261. if (me.id != ME_RLinks || !mausIn) return;
  262. switch (aktion)
  263. {
  264. case 1:
  265. nachLogin->zChatLeiste()->addChat(accountId, 0);
  266. break;
  267. case 2:
  268. if (!anmeldungClient)
  269. anmeldungClient = mainClient->createAnmeldungServerClient();
  270. if (!anmeldungClient)
  271. {
  272. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  273. new Text(mainClient->getLetzterFehler()),
  274. new Text("Ok"),
  275. 0);
  276. }
  277. if (!anmeldungClient->verbinde())
  278. {
  279. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  280. new Text(anmeldungClient->getLetzterFehler()),
  281. new Text("Ok"),
  282. 0);
  283. }
  284. else
  285. {
  286. if (!anmeldungClient->gruppeSpielerEinladen(accountId, gruppeId))
  287. {
  288. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  289. new Text(anmeldungClient->getLetzterFehler()),
  290. new Text("Ok"),
  291. 0);
  292. }
  293. anmeldungClient->trenne(0);
  294. }
  295. break;
  296. case 3:
  297. if (!anmeldungClient)
  298. anmeldungClient = mainClient->createAnmeldungServerClient();
  299. if (!anmeldungClient)
  300. {
  301. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  302. new Text(mainClient->getLetzterFehler()),
  303. new Text("Ok"),
  304. 0);
  305. }
  306. if (!anmeldungClient->verbinde())
  307. {
  308. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  309. new Text(anmeldungClient->getLetzterFehler()),
  310. new Text("Ok"),
  311. 0);
  312. }
  313. else
  314. {
  315. if (!anmeldungClient->gruppeEinladungAbbrechen(accountId, gruppeId))
  316. {
  317. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  318. new Text(anmeldungClient->getLetzterFehler()),
  319. new Text("Ok"),
  320. 0);
  321. }
  322. anmeldungClient->trenne(0);
  323. }
  324. break;
  325. }
  326. }
  327. void GruppeEinladungAccount::render(int y, Bild& zrObj)
  328. {
  329. if (!zrObj.setDrawOptions(0, y, br, höhe)) return;
  330. rahmen->setSize(br, höhe);
  331. rahmen->render(zrObj);
  332. int rbr = rahmen->getRBreite();
  333. if (!zrObj.setDrawOptions(rbr, rbr, br - rbr * 2, höhe - rbr * 2))
  334. {
  335. zrObj.releaseDrawOptions();
  336. return;
  337. }
  338. auswahl->setSize(br - rbr * 2, höhe - rbr * 2);
  339. auswahl->render(zrObj);
  340. nachrichtSenden->setPosition(knopfX, 5);
  341. nachrichtSenden->render(zrObj);
  342. erneutSenden->setPosition(knopfX + 20, 5);
  343. erneutSenden->render(zrObj);
  344. einladungAbbrechen->setPosition(knopfX + 40, 5);
  345. einladungAbbrechen->render(zrObj);
  346. name->render(zrObj);
  347. zrObj.releaseDrawOptions();
  348. zrObj.releaseDrawOptions();
  349. }
  350. // constant
  351. bool GruppeEinladungAccount::getRemove() const
  352. {
  353. return remove;
  354. }
  355. int GruppeEinladungAccount::getAccountId() const
  356. {
  357. return accountId;
  358. }
  359. int GruppeEinladungAccount::getHeight() const
  360. {
  361. return höhe;
  362. }
  363. // Inhalt der GruppeEinladungListe Klasse aus Gruppe.h
  364. // Konstruktor
  365. GruppeEinladungListe::GruppeEinladungListe()
  366. : ReferenceCounter()
  367. {
  368. Bild* maximierenBild
  369. = bilder->get("data/client/bilder/chat.ltdb/maximieren.png");
  370. pos = Punkt(200, 0);
  371. gr = Punkt(150, 350);
  372. rahmen = new LRahmen();
  373. rahmen->setRamenBreite(1);
  374. rahmen->setFarbe(0xFFFFFFFF);
  375. rahmen->setSize(150, 350);
  376. einladenName = initTextFeld(5, 5, 115, 20, TextFeld::Style::TextFeld, "");
  377. initToolTip(einladenName, "Name des Spielers den du einladen möchtest.");
  378. einladen = initKnopf(125, 5, 20, 20, 0, "");
  379. einladen->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt
  380. | Knopf::Style::Hintergrund | Knopf::Style::HAlpha
  381. | Knopf::Style::HBild | Knopf::Style::KlickBuffer);
  382. einladen->setHintergrundBildZ(maximierenBild);
  383. initToolTip(einladen, "Diesen Spieler einladen.");
  384. scroll = new VScrollBar();
  385. accounts = new RCArray<GruppeEinladungAccount>();
  386. einladungHöhe = 0;
  387. tickVal = 0;
  388. anzahl = 0;
  389. gruppeId = 0;
  390. admin = 0;
  391. rend = 0;
  392. }
  393. // Destruktor
  394. GruppeEinladungListe::~GruppeEinladungListe()
  395. {
  396. rahmen->release();
  397. einladenName->release();
  398. einladen->release();
  399. scroll->release();
  400. accounts->release();
  401. }
  402. // nicht constant
  403. void GruppeEinladungListe::reset()
  404. {
  405. einladenName->setText("");
  406. scroll->update(0, 0);
  407. einladungHöhe = 0;
  408. tickVal = 0;
  409. accounts->leeren();
  410. anzahl = 0;
  411. gruppeId = 0;
  412. admin = 0;
  413. rend = 1;
  414. }
  415. void GruppeEinladungListe::setGruppeId(int gruppeId)
  416. {
  417. this->gruppeId = gruppeId;
  418. for (int i = 0; i < anzahl; i++)
  419. accounts->z(i)->setGruppeId(gruppeId);
  420. }
  421. void GruppeEinladungListe::addAccount(int id)
  422. {
  423. for (int i = 0; i < anzahl; i++)
  424. {
  425. GruppeEinladungAccount* tmp = accounts->z(i);
  426. if (tmp->getAccountId() == id) tmp->setRemove();
  427. }
  428. GruppeEinladungAccount* tmp = new GruppeEinladungAccount();
  429. tmp->setGruppeId(gruppeId);
  430. tmp->setAccountId(id);
  431. tmp->setAdmin(admin);
  432. accounts->add(tmp, anzahl);
  433. anzahl++;
  434. rend = 1;
  435. }
  436. void GruppeEinladungListe::setAbgelehnt(int id)
  437. {
  438. for (int i = 0; i < anzahl; i++)
  439. {
  440. GruppeEinladungAccount* tmp = accounts->z(i);
  441. if (tmp && tmp->getAccountId() == id)
  442. {
  443. tmp->setAbgelehnt();
  444. break;
  445. }
  446. }
  447. }
  448. void GruppeEinladungListe::setAngenommen(int id)
  449. {
  450. for (int i = 0; i < anzahl; i++)
  451. {
  452. GruppeEinladungAccount* tmp = accounts->z(i);
  453. if (tmp && tmp->getAccountId() == id)
  454. {
  455. tmp->setAngenommen();
  456. break;
  457. }
  458. }
  459. }
  460. void GruppeEinladungListe::remove(int id)
  461. {
  462. for (int i = 0; i < anzahl; i++)
  463. {
  464. GruppeEinladungAccount* tmp = accounts->z(i);
  465. if (tmp && tmp->getAccountId() == id)
  466. {
  467. tmp->setRemove();
  468. break;
  469. }
  470. }
  471. }
  472. void GruppeEinladungListe::setAdmin(int admin)
  473. {
  474. this->admin = admin;
  475. for (int i = 0; i < anzahl; i++)
  476. {
  477. GruppeEinladungAccount* tmp = accounts->z(i);
  478. if (tmp) tmp->setAdmin(admin);
  479. }
  480. }
  481. bool GruppeEinladungListe::tick(double tickVal)
  482. {
  483. rend |= einladenName->tick(tickVal);
  484. rend |= einladen->tick(tickVal);
  485. rend |= scroll->getRend();
  486. this->tickVal += tickVal * 100;
  487. int val = (int)this->tickVal;
  488. if (val < 1)
  489. {
  490. bool ret = rend;
  491. rend = 0;
  492. return ret;
  493. }
  494. if (val > 4) val = 4;
  495. this->tickVal -= val;
  496. if (admin == loginClient->getAccountId())
  497. {
  498. if (einladungHöhe < 30)
  499. {
  500. einladungHöhe += val;
  501. if (einladungHöhe > 30) einladungHöhe = 30;
  502. rend = 1;
  503. }
  504. }
  505. else
  506. {
  507. if (einladungHöhe > 0)
  508. {
  509. einladungHöhe -= val;
  510. if (einladungHöhe < 0) einladungHöhe = 0;
  511. rend = 1;
  512. }
  513. }
  514. for (int i = 0; i < anzahl; i++)
  515. {
  516. GruppeEinladungAccount* tmp = accounts->z(i);
  517. if (tmp) rend |= tmp->tick(tickVal);
  518. }
  519. for (int i = 0; i < anzahl; i++)
  520. {
  521. GruppeEinladungAccount* tmp = accounts->z(i);
  522. if (!tmp->getHeight())
  523. {
  524. accounts->remove(i);
  525. anzahl--;
  526. rend = 1;
  527. }
  528. }
  529. bool ret = rend;
  530. rend = 0;
  531. return ret;
  532. }
  533. void GruppeEinladungListe::doPublicMausEreignis(MausEreignis& me)
  534. {
  535. int tmpX = me.mx;
  536. int tmpY = me.my;
  537. me.mx -= pos.x;
  538. me.my -= pos.y;
  539. if (einladungHöhe == 30)
  540. {
  541. einladenName->doPublicMausEreignis(me);
  542. bool ak = !me.verarbeitet;
  543. einladen->doPublicMausEreignis(me);
  544. if (me.verarbeitet && ak)
  545. {
  546. if (me.id == ME_RLinks)
  547. {
  548. if (einladenName->zText()->getLength())
  549. {
  550. int accountId = infoClient->getAccountId(
  551. einladenName->zText()->getText());
  552. if (accountId)
  553. {
  554. if (!anmeldungClient)
  555. anmeldungClient
  556. = mainClient->createAnmeldungServerClient();
  557. if (!anmeldungClient)
  558. {
  559. nachLogin->zNachrichtenListe()->addNachricht(
  560. new Text("Fehler"),
  561. new Text(mainClient->getLetzterFehler()),
  562. new Text("Ok"),
  563. 0);
  564. }
  565. if (!anmeldungClient->verbinde())
  566. {
  567. nachLogin->zNachrichtenListe()->addNachricht(
  568. new Text("Fehler"),
  569. new Text(anmeldungClient->getLetzterFehler()),
  570. new Text("Ok"),
  571. 0);
  572. }
  573. else
  574. {
  575. if (!anmeldungClient->gruppeSpielerEinladen(
  576. accountId, gruppeId))
  577. {
  578. nachLogin->zNachrichtenListe()->addNachricht(
  579. new Text("Fehler"),
  580. new Text(
  581. anmeldungClient->getLetzterFehler()),
  582. new Text("Ok"),
  583. 0);
  584. }
  585. else
  586. {
  587. einladenName->setText("");
  588. einladenName->setAuswahl(0, 0);
  589. rend = 1;
  590. }
  591. anmeldungClient->trenne(0);
  592. }
  593. }
  594. else
  595. {
  596. nachLogin->zNachrichtenListe()->addNachricht(
  597. new Text("Fehler"),
  598. new Text("Der Account wurde nicht gefunden."),
  599. new Text("Ok"),
  600. 0);
  601. }
  602. }
  603. }
  604. return;
  605. }
  606. }
  607. scroll->doMausMessage(134, 1 + einladungHöhe, 15, 348 - einladungHöhe, me);
  608. me.my -= einladungHöhe + 1;
  609. for (int i = 0; i < anzahl; i++)
  610. {
  611. GruppeEinladungAccount* tmp = accounts->z(i);
  612. if (tmp)
  613. {
  614. tmp->doPublicMausEreignis(me);
  615. if (tmp->getRemove())
  616. {
  617. accounts->remove(i);
  618. anzahl--;
  619. rend = 1;
  620. }
  621. me.my -= tmp->getHeight();
  622. }
  623. }
  624. me.mx = tmpX;
  625. me.my = tmpY;
  626. }
  627. void GruppeEinladungListe::doTastaturEreignis(TastaturEreignis& te)
  628. {
  629. bool b = !te.verarbeitet;
  630. einladenName->doTastaturEreignis(te);
  631. if (te.verarbeitet && b && te.id == TE_Release && te.virtualKey == T_Enter)
  632. {
  633. if (einladenName->zText()->getLength())
  634. {
  635. int accountId
  636. = infoClient->getAccountId(einladenName->zText()->getText());
  637. if (accountId)
  638. {
  639. if (!anmeldungClient)
  640. anmeldungClient = mainClient->createAnmeldungServerClient();
  641. if (!anmeldungClient)
  642. {
  643. nachLogin->zNachrichtenListe()->addNachricht(
  644. new Text("Fehler"),
  645. new Text(mainClient->getLetzterFehler()),
  646. new Text("Ok"),
  647. 0);
  648. }
  649. if (!anmeldungClient->verbinde())
  650. {
  651. nachLogin->zNachrichtenListe()->addNachricht(
  652. new Text("Fehler"),
  653. new Text(anmeldungClient->getLetzterFehler()),
  654. new Text("Ok"),
  655. 0);
  656. }
  657. else
  658. {
  659. if (!anmeldungClient->gruppeSpielerEinladen(
  660. accountId, gruppeId))
  661. {
  662. nachLogin->zNachrichtenListe()->addNachricht(
  663. new Text("Fehler"),
  664. new Text(anmeldungClient->getLetzterFehler()),
  665. new Text("Ok"),
  666. 0);
  667. }
  668. else
  669. {
  670. einladenName->setText("");
  671. einladenName->setAuswahl(0, 0);
  672. rend = 1;
  673. }
  674. anmeldungClient->trenne(0);
  675. }
  676. }
  677. else
  678. {
  679. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  680. new Text("Der Account wurde nicht gefunden."),
  681. new Text("Ok"),
  682. 0);
  683. }
  684. }
  685. }
  686. }
  687. void GruppeEinladungListe::render(Bild& zRObj)
  688. {
  689. if (!zRObj.setDrawOptions(pos, gr)) return;
  690. rahmen->render(zRObj);
  691. int rbr = rahmen->getRBreite();
  692. if (einladungHöhe)
  693. {
  694. if (zRObj.setDrawOptions(
  695. rbr, rbr, gr.x - rbr * 2, einladungHöhe - rbr * 2))
  696. {
  697. einladenName->render(zRObj);
  698. einladen->render(zRObj);
  699. zRObj.releaseDrawOptions();
  700. }
  701. }
  702. if (!zRObj.setDrawOptions(
  703. rbr, einladungHöhe + rbr, gr.x - rbr * 2, gr.y - rbr * 2))
  704. {
  705. zRObj.releaseDrawOptions();
  706. return;
  707. }
  708. scroll->render(134, 0, 15, 348 - einladungHöhe, zRObj);
  709. int höhe = 0;
  710. for (int i = 0; i < anzahl; i++)
  711. {
  712. GruppeEinladungAccount* tmp = accounts->z(i);
  713. if (tmp)
  714. {
  715. tmp->setSize(gr.x - 15 - rbr * 2);
  716. tmp->render(höhe - scroll->getScroll(), zRObj);
  717. höhe += tmp->getHeight();
  718. }
  719. }
  720. scroll->update(höhe, gr.y - rbr * 2 - einladungHöhe);
  721. zRObj.releaseDrawOptions();
  722. zRObj.releaseDrawOptions();
  723. }
  724. // Inhalt der GruppeAccountDaten Klasse aus Gruppe.h
  725. // Konstruktor
  726. GruppeAccountDaten::GruppeAccountDaten()
  727. : ReferenceCounter()
  728. {
  729. Bild* nachrichtBild
  730. = bilder->get("data/client/bilder/chat.ltdb/nachricht.png");
  731. Bild* einladungBild
  732. = bilder->get("data/client/bilder/chat.ltdb/neuerfreund.png");
  733. Bild* ansehenBild = bilder->get("data/client/bilder/chat.ltdb/ansehen.png");
  734. Bild* entfernenBild
  735. = bilder->get("data/client/bilder/chat.ltdb/entfernen.png");
  736. rahmen = new LRahmen();
  737. rahmen->setFarbe(0xFFFFFFFF);
  738. rahmen->setRamenBreite(1);
  739. auswahl = new AlphaFeld();
  740. auswahl->setFarbe(0x0000FF00);
  741. auswahl->setStrength(-2);
  742. auswahl->setPosition(1, 1);
  743. name = initTextFeld(
  744. 1, 6, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, "");
  745. punkte = initTextFeld(
  746. 101, 6, 100, 20, TextFeld::Style::Text | TextFeld::Style::Center, "0p");
  747. nachrichtSenden = initKnopf(0, 30, 20, 20, 0, "");
  748. nachrichtSenden->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt
  749. | Knopf::Style::Hintergrund | Knopf::Style::HAlpha
  750. | Knopf::Style::HBild
  751. | Knopf::Style::KlickBuffer);
  752. nachrichtSenden->setHintergrundBildZ(nachrichtBild);
  753. initToolTip(nachrichtSenden, "Nachricht senden.");
  754. freundEinladung = initKnopf(0, 30, 20, 20, 0, "");
  755. freundEinladung->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt
  756. | Knopf::Style::Hintergrund | Knopf::Style::HAlpha
  757. | Knopf::Style::HBild
  758. | Knopf::Style::KlickBuffer);
  759. freundEinladung->setHintergrundBildZ(einladungBild);
  760. initToolTip(freundEinladung, "Freundeseinladung senden.");
  761. accountAnsehen = initKnopf(0, 30, 20, 20, 0, "");
  762. accountAnsehen->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt
  763. | Knopf::Style::Hintergrund | Knopf::Style::HAlpha
  764. | Knopf::Style::HBild | Knopf::Style::KlickBuffer);
  765. accountAnsehen->setHintergrundBildZ(ansehenBild);
  766. initToolTip(accountAnsehen, "Account ansehen.");
  767. kick = initKnopf(0, 30, 20, 20, 0, "");
  768. kick->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt
  769. | Knopf::Style::Hintergrund | Knopf::Style::HAlpha
  770. | Knopf::Style::HBild | Knopf::Style::KlickBuffer);
  771. kick->setHintergrundBildZ(entfernenBild);
  772. initToolTip(kick, "Diesen Spieler kicken.");
  773. tickVal = 0;
  774. mausIn = 0;
  775. remove = 0;
  776. gruppeId = 0;
  777. accountId = 0;
  778. admin = 0;
  779. höhe = 0;
  780. animation = 0x1;
  781. rend = 0;
  782. }
  783. // Destruktor
  784. GruppeAccountDaten::~GruppeAccountDaten()
  785. {
  786. rahmen->release();
  787. auswahl->release();
  788. name->release();
  789. punkte->release();
  790. nachrichtSenden->release();
  791. freundEinladung->release();
  792. accountAnsehen->release();
  793. kick->release();
  794. }
  795. // nicht constant
  796. void GruppeAccountDaten::setGruppeId(int gruppeId)
  797. {
  798. this->gruppeId = gruppeId;
  799. }
  800. void GruppeAccountDaten::setAccountId(int id)
  801. {
  802. accountId = id;
  803. name->setText(infoClient->getSpielerName(id));
  804. punkte->setText("");
  805. punkte->zText()->append(infoClient->getSpielerPunkte(
  806. id, infoClient->getSpielId(infoClient->getGruppenKarteId(gruppeId))));
  807. punkte->zText()->append("p");
  808. rend = 1;
  809. }
  810. void GruppeAccountDaten::setSize(int x)
  811. {
  812. if (br != x)
  813. {
  814. br = x;
  815. rend = 1;
  816. }
  817. }
  818. void GruppeAccountDaten::entfernen()
  819. {
  820. animation &= ~0x1;
  821. }
  822. void GruppeAccountDaten::setAdmin(int admin)
  823. {
  824. this->admin = admin;
  825. rend = 1;
  826. }
  827. bool GruppeAccountDaten::tick(double tickVal)
  828. {
  829. rend |= name->tick(tickVal);
  830. rend |= punkte->tick(tickVal);
  831. rend |= nachrichtSenden->tick(tickVal);
  832. rend |= accountAnsehen->tick(tickVal);
  833. rend |= freundEinladung->tick(tickVal);
  834. rend |= kick->tick(tickVal);
  835. this->tickVal += tickVal * 100;
  836. int val = (int)this->tickVal;
  837. if (val < 1)
  838. {
  839. bool ret = rend;
  840. rend = 0;
  841. return ret;
  842. }
  843. if (val > 4) val = 4;
  844. this->tickVal -= val;
  845. if (admin == accountId)
  846. {
  847. int r = (auswahl->getFarbe() >> 16) & 0xFF;
  848. if (r < 200)
  849. {
  850. r += val;
  851. if (r > 200) r = 200;
  852. auswahl->setFarbe(
  853. (auswahl->getFarbe() & 0xFF00FFFF) | ((r << 16) & 0xFF0000));
  854. rend = 1;
  855. }
  856. }
  857. else
  858. {
  859. int r = (auswahl->getFarbe() >> 16) & 0xFF;
  860. if (r > 0)
  861. {
  862. if (r - val < 0)
  863. r = 0;
  864. else
  865. r -= val;
  866. auswahl->setFarbe(
  867. (auswahl->getFarbe() & 0xFF00FFFF) | ((r << 16) & 0xFF0000));
  868. rend = 1;
  869. }
  870. }
  871. if ((animation | 0x1) == animation)
  872. {
  873. if (höhe < 30)
  874. {
  875. höhe += val;
  876. if (höhe > 30) höhe = 30;
  877. rend = 1;
  878. }
  879. if (mausIn)
  880. {
  881. if (höhe < 50)
  882. {
  883. höhe += val;
  884. if (höhe > 50) höhe = 50;
  885. rend = 1;
  886. }
  887. int a = (auswahl->getFarbe() >> 24) & 0xFF;
  888. if (a < 50)
  889. {
  890. a += val;
  891. if (a > 50) a = 50;
  892. auswahl->setFarbe(((a << 24) & 0xFF000000)
  893. | (auswahl->getFarbe() & 0xFFFFFF));
  894. rend = 1;
  895. }
  896. }
  897. else
  898. {
  899. if (höhe > 30)
  900. {
  901. höhe -= val;
  902. if (höhe < 30) höhe = 30;
  903. rend = 1;
  904. }
  905. int a = (auswahl->getFarbe() >> 24) & 0xFF;
  906. if (a > 0)
  907. {
  908. if (a - val < 0)
  909. a = 0;
  910. else
  911. a -= val;
  912. auswahl->setFarbe(((a << 24) & 0xFF000000)
  913. | (auswahl->getFarbe() & 0xFFFFFF));
  914. rend = 1;
  915. }
  916. }
  917. if (accountId != loginClient->getAccountId())
  918. {
  919. if (nachrichtSenden->getBreite() < 20)
  920. {
  921. nachrichtSenden->setSize(nachrichtSenden->getBreite() + val,
  922. nachrichtSenden->getHeight());
  923. if (nachrichtSenden->getBreite() > 20)
  924. nachrichtSenden->setSize(20, nachrichtSenden->getHeight());
  925. rend = 1;
  926. }
  927. }
  928. else
  929. {
  930. if (nachrichtSenden->getBreite() > 0)
  931. {
  932. nachrichtSenden->setSize(nachrichtSenden->getBreite() - val,
  933. nachrichtSenden->getHeight());
  934. if (nachrichtSenden->getBreite() < 0)
  935. nachrichtSenden->setSize(0, nachrichtSenden->getHeight());
  936. rend = 1;
  937. }
  938. }
  939. if (accountAnsehen->getBreite() < 20)
  940. {
  941. accountAnsehen->setSize(
  942. accountAnsehen->getBreite() + val, accountAnsehen->getHeight());
  943. if (accountAnsehen->getBreite() > 20)
  944. accountAnsehen->setSize(20, accountAnsehen->getHeight());
  945. rend = 1;
  946. }
  947. if (accountId == loginClient->getAccountId()
  948. || nachLogin->zFreundesListe()->istFreund(accountId))
  949. {
  950. if (freundEinladung->getBreite() > 0)
  951. {
  952. freundEinladung->setSize(freundEinladung->getBreite() - val,
  953. freundEinladung->getHeight());
  954. if (freundEinladung->getBreite() < 0)
  955. freundEinladung->setSize(0, freundEinladung->getHeight());
  956. rend = 1;
  957. }
  958. }
  959. else
  960. {
  961. if (freundEinladung->getBreite() < 20)
  962. {
  963. freundEinladung->setSize(freundEinladung->getBreite() + val,
  964. freundEinladung->getHeight());
  965. if (freundEinladung->getBreite() > 20)
  966. freundEinladung->setSize(20, freundEinladung->getHeight());
  967. rend = 1;
  968. }
  969. }
  970. if (accountId == loginClient->getAccountId()
  971. || admin != loginClient->getAccountId())
  972. {
  973. if (kick->getBreite() > 0)
  974. {
  975. kick->setSize(kick->getBreite() - val, kick->getHeight());
  976. if (kick->getBreite() < 0) kick->setSize(0, kick->getHeight());
  977. rend = 1;
  978. }
  979. }
  980. else
  981. {
  982. if (kick->getBreite() < 20)
  983. {
  984. kick->setSize(kick->getBreite() + val, kick->getHeight());
  985. if (kick->getBreite() > 20)
  986. kick->setSize(20, kick->getHeight());
  987. rend = 1;
  988. }
  989. }
  990. }
  991. else
  992. {
  993. if (höhe > 0)
  994. {
  995. höhe -= val;
  996. if (höhe <= 0)
  997. {
  998. höhe = 0;
  999. remove = 1;
  1000. }
  1001. rend = 1;
  1002. }
  1003. }
  1004. bool ret = rend;
  1005. rend = 0;
  1006. return ret;
  1007. }
  1008. void GruppeAccountDaten::doPublicMausEreignis(MausEreignis& me)
  1009. {
  1010. if (me.mx < 0 || me.my < 0 || me.mx > br || me.my > höhe)
  1011. mausIn = 0;
  1012. else
  1013. mausIn = 1;
  1014. bool ak = !me.verarbeitet;
  1015. nachrichtSenden->doPublicMausEreignis(me);
  1016. int aktion = (me.verarbeitet && ak) ? 1 : 0;
  1017. accountAnsehen->doPublicMausEreignis(me);
  1018. aktion = (me.verarbeitet && ak && !aktion) ? 2 : aktion;
  1019. freundEinladung->doPublicMausEreignis(me);
  1020. aktion = (me.verarbeitet && ak && !aktion) ? 3 : aktion;
  1021. kick->doPublicMausEreignis(me);
  1022. aktion = (me.verarbeitet && ak && !aktion) ? 4 : aktion;
  1023. if (me.id != ME_RLinks) return;
  1024. switch (aktion)
  1025. {
  1026. case 1:
  1027. nachLogin->zChatLeiste()->addChat(accountId, 0);
  1028. break;
  1029. case 2:
  1030. if (nachLogin->zAccountAnsehenFenster()->setSpielerDetails(
  1031. accountId, 2))
  1032. {
  1033. MausEreignis me = {ME_RLinks, 0, 0, 0, 1};
  1034. nachLogin->zTitelLeiste()->druckAccountAnsehen(me);
  1035. }
  1036. break;
  1037. case 3:
  1038. chatClient->freundesAnfrage(accountId);
  1039. break;
  1040. case 4:
  1041. if (!anmeldungClient)
  1042. anmeldungClient = mainClient->createAnmeldungServerClient();
  1043. if (!anmeldungClient)
  1044. {
  1045. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1046. new Text(mainClient->getLetzterFehler()),
  1047. new Text("Ok"),
  1048. 0);
  1049. }
  1050. if (!anmeldungClient->verbinde())
  1051. {
  1052. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1053. new Text(anmeldungClient->getLetzterFehler()),
  1054. new Text("Ok"),
  1055. 0);
  1056. }
  1057. else
  1058. {
  1059. if (!anmeldungClient->kickSpielerAusGruppe(accountId, gruppeId))
  1060. {
  1061. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1062. new Text(anmeldungClient->getLetzterFehler()),
  1063. new Text("Ok"),
  1064. 0);
  1065. }
  1066. anmeldungClient->trenne(0);
  1067. }
  1068. break;
  1069. }
  1070. }
  1071. void GruppeAccountDaten::render(int y, Bild& zrObj)
  1072. {
  1073. if (!zrObj.setDrawOptions(0, y, br, höhe)) return;
  1074. rahmen->setSize(br, höhe);
  1075. rahmen->render(zrObj);
  1076. int rbr = rahmen->getRBreite();
  1077. auswahl->setPosition(rbr, rbr);
  1078. auswahl->setSize(br - rbr * 2, höhe - rbr * 2);
  1079. auswahl->render(zrObj);
  1080. name->render(zrObj);
  1081. punkte->render(zrObj);
  1082. if (!zrObj.setDrawOptions(rbr, rbr, br - rbr * 2, höhe - rbr * 2))
  1083. {
  1084. zrObj.releaseDrawOptions();
  1085. return;
  1086. }
  1087. int b = kick->getBreite();
  1088. kick->setPosition(br - rbr - b, 30);
  1089. kick->render(zrObj);
  1090. b += freundEinladung->getBreite();
  1091. freundEinladung->setPosition(br - rbr - b, 30);
  1092. freundEinladung->render(zrObj);
  1093. b += accountAnsehen->getBreite();
  1094. accountAnsehen->setPosition(br - rbr - b, 30);
  1095. accountAnsehen->render(zrObj);
  1096. b += nachrichtSenden->getBreite();
  1097. nachrichtSenden->setPosition(br - rbr - b, 30);
  1098. nachrichtSenden->render(zrObj);
  1099. zrObj.releaseDrawOptions();
  1100. zrObj.releaseDrawOptions();
  1101. }
  1102. // constant
  1103. bool GruppeAccountDaten::getRemove() const
  1104. {
  1105. return remove;
  1106. }
  1107. int GruppeAccountDaten::getAccountId() const
  1108. {
  1109. return accountId;
  1110. }
  1111. int GruppeAccountDaten::getHeight() const
  1112. {
  1113. return höhe;
  1114. }
  1115. // Inhalt der GruppeAccountListe Klasse aus Gruppe.h
  1116. // Konstruktor
  1117. GruppeAccountListe::GruppeAccountListe()
  1118. : ReferenceCounter()
  1119. {
  1120. pos = Punkt(0, 0);
  1121. gr = Punkt(200, 350);
  1122. rahmen = new LRahmen();
  1123. rahmen->setFarbe(0xFFFFFFFF);
  1124. rahmen->setRamenBreite(1);
  1125. rahmen->setSize(200, 350);
  1126. scroll = new VScrollBar();
  1127. accounts = new RCArray<GruppeAccountDaten>();
  1128. anzahl = 0;
  1129. gruppeId = 0;
  1130. admin = 0;
  1131. rend = 0;
  1132. }
  1133. // Destruktor
  1134. GruppeAccountListe::~GruppeAccountListe()
  1135. {
  1136. rahmen->release();
  1137. scroll->release();
  1138. accounts->release();
  1139. }
  1140. // nicht constant
  1141. void GruppeAccountListe::reset()
  1142. {
  1143. accounts->leeren();
  1144. anzahl = 0;
  1145. gruppeId = 0;
  1146. admin = 0;
  1147. rend = 1;
  1148. }
  1149. void GruppeAccountListe::setGruppeId(int gruppeId)
  1150. {
  1151. this->gruppeId = gruppeId;
  1152. for (int i = 0; i < anzahl; i++)
  1153. accounts->z(i)->setGruppeId(gruppeId);
  1154. }
  1155. void GruppeAccountListe::addAccount(int id)
  1156. {
  1157. GruppeAccountDaten* tmp = new GruppeAccountDaten();
  1158. tmp->setGruppeId(gruppeId);
  1159. tmp->setAccountId(id);
  1160. tmp->setAdmin(admin);
  1161. accounts->add(tmp, anzahl);
  1162. anzahl++;
  1163. rend = 1;
  1164. }
  1165. void GruppeAccountListe::removeAccount(int id)
  1166. {
  1167. for (int i = 0; i < anzahl; i++)
  1168. {
  1169. GruppeAccountDaten* tmp = accounts->z(i);
  1170. if (tmp && tmp->getAccountId() == id)
  1171. {
  1172. tmp->entfernen();
  1173. break;
  1174. }
  1175. }
  1176. }
  1177. void GruppeAccountListe::setAdmin(int admin)
  1178. {
  1179. this->admin = admin;
  1180. for (int i = 0; i < anzahl; i++)
  1181. {
  1182. GruppeAccountDaten* tmp = accounts->z(i);
  1183. if (tmp) tmp->setAdmin(admin);
  1184. }
  1185. }
  1186. bool GruppeAccountListe::tick(double tickVal)
  1187. {
  1188. rend |= scroll->getRend();
  1189. for (int i = 0; i < anzahl; i++)
  1190. {
  1191. GruppeAccountDaten* tmp = accounts->z(i);
  1192. if (tmp) rend |= tmp->tick(tickVal);
  1193. }
  1194. bool ret = rend;
  1195. rend = 0;
  1196. return ret;
  1197. }
  1198. void GruppeAccountListe::doPublicMausEreignis(MausEreignis& me)
  1199. {
  1200. int tmpX = me.mx;
  1201. int tmpY = me.my;
  1202. me.mx -= pos.x;
  1203. me.my -= pos.y;
  1204. scroll->doMausMessage(184, 1, 15, 248, me);
  1205. for (int i = 0; i < anzahl; i++)
  1206. {
  1207. GruppeAccountDaten* tmp = accounts->z(i);
  1208. if (tmp)
  1209. {
  1210. tmp->doPublicMausEreignis(me);
  1211. me.my -= tmp->getHeight();
  1212. if (tmp->getRemove())
  1213. {
  1214. accounts->remove(i);
  1215. anzahl--;
  1216. i--;
  1217. rend = 1;
  1218. }
  1219. }
  1220. }
  1221. me.mx = tmpX;
  1222. me.my = tmpY;
  1223. }
  1224. void GruppeAccountListe::render(Bild& zRObj)
  1225. {
  1226. if (!zRObj.setDrawOptions(pos, gr)) return;
  1227. rahmen->render(zRObj);
  1228. int rbr = rahmen->getRBreite();
  1229. scroll->render(gr.x - 15 - rbr, 1, 15, gr.y - rbr * 2, zRObj);
  1230. if (!zRObj.setDrawOptions(rbr, rbr, gr.x - rbr * 2, gr.y - rbr * 2))
  1231. {
  1232. zRObj.releaseDrawOptions();
  1233. return;
  1234. }
  1235. int höhe = 0;
  1236. for (int i = 0; i < anzahl; i++)
  1237. {
  1238. GruppeAccountDaten* tmp = accounts->z(i);
  1239. if (tmp)
  1240. {
  1241. tmp->setSize(gr.x - 15 - rbr * 2);
  1242. tmp->render(höhe - scroll->getScroll(), zRObj);
  1243. höhe += tmp->getHeight();
  1244. }
  1245. }
  1246. zRObj.releaseDrawOptions();
  1247. zRObj.releaseDrawOptions();
  1248. scroll->update(höhe, gr.y - rbr * 2);
  1249. }
  1250. // Inhalt der GruppeChat Klasse aus Gruppe.h
  1251. // Konstruktor
  1252. GruppeChat::GruppeChat()
  1253. : ReferenceCounter()
  1254. {
  1255. Bild* sendenBild = bilder->get("data/client/bilder/chat.ltdb/senden.png");
  1256. pos = Punkt(0, 350);
  1257. gr = Punkt(750, 200);
  1258. rahmen = new LRahmen();
  1259. rahmen->setFarbe(0xFFFFFFFF);
  1260. rahmen->setRamenBreite(1);
  1261. rahmen->setSize(750, 200);
  1262. nachricht = initTextFeld(2, 176, 724, 20, TextFeld::Style::TextFeld, "");
  1263. initToolTip(nachricht, "Nachricht an die Gruppe senden.");
  1264. senden = initKnopf(726, 176, 20, 20, 0, "");
  1265. senden->setStyle(Knopf::Style::Sichtbar | Knopf::Style::Erlaubt
  1266. | Knopf::Style::Hintergrund | Knopf::Style::HAlpha
  1267. | Knopf::Style::HBild | Knopf::Style::KlickBuffer);
  1268. senden->setHintergrundBildZ(sendenBild);
  1269. initToolTip(senden, "Diese Nachricht an die Gruppe senden.");
  1270. verlauf = initTextFeld(2, 2, 746, 174, TextFeld::Style::TextGebiet, "");
  1271. verlauf->removeStyle(TextFeld::Style::Erlaubt);
  1272. verlauf->updateVScroll();
  1273. verlauf->setVertikalKlickScroll(5);
  1274. gruppeId = 0;
  1275. rend = 0;
  1276. }
  1277. // Destruktor
  1278. GruppeChat::~GruppeChat()
  1279. {
  1280. rahmen->release();
  1281. nachricht->release();
  1282. senden->release();
  1283. verlauf->release();
  1284. }
  1285. // nicht constant
  1286. void GruppeChat::reset()
  1287. {
  1288. gruppeId = 0;
  1289. verlauf->setText("");
  1290. verlauf->updateVScroll();
  1291. nachricht->setText("");
  1292. rend = 1;
  1293. }
  1294. void GruppeChat::setGruppeId(int gruppeId)
  1295. {
  1296. this->gruppeId = gruppeId;
  1297. }
  1298. void GruppeChat::gruppeNachricht(const char* nachricht)
  1299. {
  1300. verlauf->addZeile(nachricht);
  1301. verlauf->updateVScroll();
  1302. rend = 1;
  1303. }
  1304. bool GruppeChat::tick(double tickVal)
  1305. {
  1306. rend |= verlauf->tick(tickVal);
  1307. rend |= nachricht->tick(tickVal);
  1308. rend |= senden->tick(tickVal);
  1309. bool ret = rend;
  1310. rend = 0;
  1311. return ret;
  1312. }
  1313. void GruppeChat::doPublicMausEreignis(MausEreignis& me)
  1314. {
  1315. me.mx -= pos.x;
  1316. me.my -= pos.y;
  1317. verlauf->doPublicMausEreignis(me);
  1318. nachricht->doPublicMausEreignis(me);
  1319. bool ak = !me.verarbeitet;
  1320. senden->doPublicMausEreignis(me);
  1321. int aktion = (me.verarbeitet && ak) ? 1 : 0;
  1322. if (me.id != ME_RLinks)
  1323. {
  1324. me.mx += pos.x;
  1325. me.my += pos.y;
  1326. return;
  1327. }
  1328. if (aktion)
  1329. {
  1330. if (!anmeldungClient)
  1331. anmeldungClient = mainClient->createAnmeldungServerClient();
  1332. if (!anmeldungClient)
  1333. {
  1334. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1335. new Text(mainClient->getLetzterFehler()),
  1336. new Text("Ok"),
  1337. 0);
  1338. }
  1339. if (!anmeldungClient->verbinde())
  1340. {
  1341. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1342. new Text(anmeldungClient->getLetzterFehler()),
  1343. new Text("Ok"),
  1344. 0);
  1345. }
  1346. else
  1347. {
  1348. if (anmeldungClient->gruppeNachricht(
  1349. gruppeId, nachricht->zText()->getText()))
  1350. {
  1351. nachricht->setText("");
  1352. nachricht->setAuswahl(0, 0);
  1353. rend = 1;
  1354. }
  1355. else
  1356. {
  1357. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1358. new Text(anmeldungClient->getLetzterFehler()),
  1359. new Text("Ok"),
  1360. 0);
  1361. }
  1362. anmeldungClient->trenne(0);
  1363. }
  1364. }
  1365. me.mx += pos.x;
  1366. me.my += pos.y;
  1367. }
  1368. void GruppeChat::doTastaturEreignis(TastaturEreignis& te)
  1369. {
  1370. bool b = te.verarbeitet;
  1371. nachricht->doTastaturEreignis(te);
  1372. if (te.verarbeitet && !b && te.id == TE_Release && te.virtualKey == T_Enter)
  1373. {
  1374. if (!anmeldungClient)
  1375. anmeldungClient = mainClient->createAnmeldungServerClient();
  1376. if (!anmeldungClient)
  1377. {
  1378. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1379. new Text(mainClient->getLetzterFehler()),
  1380. new Text("Ok"),
  1381. 0);
  1382. }
  1383. if (!anmeldungClient->verbinde())
  1384. {
  1385. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1386. new Text(anmeldungClient->getLetzterFehler()),
  1387. new Text("Ok"),
  1388. 0);
  1389. }
  1390. else
  1391. {
  1392. if (anmeldungClient->gruppeNachricht(
  1393. gruppeId, nachricht->zText()->getText()))
  1394. {
  1395. nachricht->setText("");
  1396. nachricht->setAuswahl(0, 0);
  1397. rend = 1;
  1398. }
  1399. else
  1400. {
  1401. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1402. new Text(anmeldungClient->getLetzterFehler()),
  1403. new Text("Ok"),
  1404. 0);
  1405. }
  1406. anmeldungClient->trenne(0);
  1407. }
  1408. }
  1409. }
  1410. void GruppeChat::render(Bild& zRObj)
  1411. {
  1412. if (!zRObj.setDrawOptions(pos.x, pos.y, gr.x, gr.y)) return;
  1413. verlauf->render(zRObj);
  1414. nachricht->render(zRObj);
  1415. senden->render(zRObj);
  1416. zRObj.releaseDrawOptions();
  1417. }
  1418. // Inhalt der GruppeAnmeldung Klasse aus Gruppe.h
  1419. // Konstruktor
  1420. GruppeAnmeldung::GruppeAnmeldung()
  1421. : ReferenceCounter()
  1422. {
  1423. pos = Punkt(750, 350);
  1424. gr = Punkt(200, 200);
  1425. rahmen = new LRahmen();
  1426. rahmen->setFarbe(0xFFFFFFFF);
  1427. rahmen->setRamenBreite(1);
  1428. rahmen->setSize(200, 200);
  1429. spielerHinzufügen = initKontrollKnopf(
  1430. 25, 45, 150, 20, KontrollKnopf::Style::Normal, "Spieler hinzufügen");
  1431. spielerHinzufügen->removeStyle(KontrollKnopf::Style::Erlaubt);
  1432. spielerHinzufügen->setMausEreignis(_ret1ME);
  1433. initToolTip(spielerHinzufügen,
  1434. "Es werden nur Spieler aus dieser Gruppe mit ins Spiel kommen.");
  1435. angemeldet = initKontrollKnopf(
  1436. 25, 75, 150, 20, KontrollKnopf::Style::Normal, "in Warteschlange");
  1437. angemeldet->removeStyle(KontrollKnopf::Style::Erlaubt);
  1438. angemeldet->setMausEreignis(_ret1ME);
  1439. initToolTip(angemeldet,
  1440. "Die Gruppe befindet sich momentan nicht in der Warteschlange.");
  1441. zeit = initTextFeld(0,
  1442. 105,
  1443. 200,
  1444. 20,
  1445. TextFeld::Style::Text | TextFeld::Style::Center,
  1446. "Zeit in Warteschlange: ");
  1447. gruppeVerlassen
  1448. = initKnopf(40, 135, 120, 20, Knopf::Style::Normal, "Gruppe verlassen");
  1449. admin = 0;
  1450. time = 0;
  1451. gruppeId = 0;
  1452. rend = 0;
  1453. }
  1454. // Destruktor
  1455. GruppeAnmeldung::~GruppeAnmeldung()
  1456. {
  1457. rahmen->release();
  1458. spielerHinzufügen->release();
  1459. angemeldet->release();
  1460. zeit->release();
  1461. gruppeVerlassen->release();
  1462. }
  1463. // nicht constant
  1464. void GruppeAnmeldung::reset()
  1465. {
  1466. spielerHinzufügen->removeStyle(KontrollKnopf::Style::Selected);
  1467. angemeldet->removeStyle(KontrollKnopf::Style::Selected);
  1468. admin = 0;
  1469. time = 0;
  1470. gruppeId = 0;
  1471. rend = 1;
  1472. }
  1473. void GruppeAnmeldung::setGruppeId(int gruppeId)
  1474. {
  1475. this->gruppeId = gruppeId;
  1476. spielerHinzufügen->setStyle(KontrollKnopf::Style::Selected,
  1477. infoClient->getGruppeSpielerHinzufügen(gruppeId));
  1478. rend = 1;
  1479. }
  1480. void GruppeAnmeldung::setAdmin(int admin)
  1481. {
  1482. this->admin = admin;
  1483. if (admin == loginClient->getAccountId())
  1484. {
  1485. spielerHinzufügen->addStyle(KontrollKnopf::Style::Erlaubt);
  1486. angemeldet->addStyle(KontrollKnopf::Style::Erlaubt);
  1487. }
  1488. else
  1489. {
  1490. spielerHinzufügen->removeStyle(KontrollKnopf::Style::Erlaubt);
  1491. angemeldet->removeStyle(KontrollKnopf::Style::Erlaubt);
  1492. }
  1493. rend = 1;
  1494. }
  1495. void GruppeAnmeldung::setSpielerHinzufügen(bool spielerHinzufügen)
  1496. {
  1497. this->spielerHinzufügen->setStyle(
  1498. KontrollKnopf::Style::Selected, spielerHinzufügen);
  1499. // TODO
  1500. /*if( spielerHinzufügen )
  1501. this->spielerHinzufügen->zToolTip()->setText( "Es kommen auch andere
  1502. Spieler mit ins Spiel,\ndie nicht in dieser Gruppe sind." ); else
  1503. this->spielerHinzufügen->zToolTip()->setText( "Es werden nur Spieler aus
  1504. dieser Gruppe mit ins Spiel kommen." );*/
  1505. rend = 1;
  1506. }
  1507. void GruppeAnmeldung::setAngemeldet(bool angemeldet)
  1508. {
  1509. this->angemeldet->setStyle(KontrollKnopf::Style::Selected, angemeldet);
  1510. // TODO
  1511. /*
  1512. if( angemeldet )
  1513. this->angemeldet->zToolTip()->setText( "Die Gruppe befindet sich in der
  1514. Warteschlange." ); else this->angemeldet->zToolTip()->setText( "Die Gruppe
  1515. befindet sich momentan nicht in der Warteschlange." );*/
  1516. time = 0;
  1517. rend = 1;
  1518. }
  1519. void GruppeAnmeldung::zurückInWarteschlange(
  1520. int stunden, int minuten, int sekunden)
  1521. {
  1522. this->angemeldet->setStyle(KontrollKnopf::Style::Selected, 1);
  1523. time = sekunden + minuten * 60 + stunden * 60 * 60;
  1524. rend = 1;
  1525. }
  1526. void GruppeAnmeldung::spielGefunden()
  1527. {
  1528. this->angemeldet->setStyle(KontrollKnopf::Style::Selected, 0);
  1529. time = 0;
  1530. rend = 1;
  1531. }
  1532. bool GruppeAnmeldung::tick(double tickVal)
  1533. {
  1534. if (angemeldet->hatStyle(KontrollKnopf::Style::Selected))
  1535. {
  1536. if ((int)(time / 1) != (int)((time + tickVal) / 1)) rend = 1;
  1537. time += tickVal;
  1538. }
  1539. if (rend)
  1540. {
  1541. zeit->setText("Zeit in Warteschlange: ");
  1542. zeit->zText()->append((int)(time / 60 / 60));
  1543. zeit->zText()->append(":");
  1544. zeit->zText()->append((int)(time / 60) % 60);
  1545. zeit->zText()->append(":");
  1546. zeit->zText()->append((int)(time) % 60);
  1547. }
  1548. rend |= spielerHinzufügen->tick(tickVal);
  1549. rend |= angemeldet->tick(tickVal);
  1550. rend |= gruppeVerlassen->tick(tickVal);
  1551. bool ret = rend;
  1552. rend = 0;
  1553. return ret;
  1554. }
  1555. void GruppeAnmeldung::doPublicMausEreignis(MausEreignis& me)
  1556. {
  1557. me.mx -= pos.x;
  1558. me.my -= pos.y;
  1559. bool ak = !me.verarbeitet;
  1560. int aktion = 0;
  1561. if (admin == loginClient->getAccountId())
  1562. {
  1563. spielerHinzufügen->doPublicMausEreignis(me);
  1564. aktion = (me.verarbeitet && admin == loginClient->getAccountId() && ak)
  1565. ? 1
  1566. : aktion;
  1567. angemeldet->doPublicMausEreignis(me);
  1568. aktion = (me.verarbeitet && admin == loginClient->getAccountId() && ak
  1569. && !aktion)
  1570. ? 2
  1571. : aktion;
  1572. }
  1573. gruppeVerlassen->doPublicMausEreignis(me);
  1574. aktion = (me.verarbeitet && ak && !aktion) ? 3 : aktion;
  1575. if (me.id != ME_RLinks)
  1576. {
  1577. me.mx += pos.x;
  1578. me.my += pos.y;
  1579. return;
  1580. }
  1581. switch (aktion)
  1582. {
  1583. case 1:
  1584. if (!anmeldungClient)
  1585. anmeldungClient = mainClient->createAnmeldungServerClient();
  1586. if (!anmeldungClient)
  1587. {
  1588. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1589. new Text(mainClient->getLetzterFehler()),
  1590. new Text("Ok"),
  1591. 0);
  1592. spielerHinzufügen->setStyle(KontrollKnopf::Style::Selected,
  1593. spielerHinzufügen->hatStyleNicht(
  1594. KontrollKnopf::Style::Selected));
  1595. rend = 1;
  1596. }
  1597. if (!anmeldungClient->verbinde())
  1598. {
  1599. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1600. new Text(anmeldungClient->getLetzterFehler()),
  1601. new Text("Ok"),
  1602. 0);
  1603. spielerHinzufügen->setStyle(KontrollKnopf::Style::Selected,
  1604. spielerHinzufügen->hatStyleNicht(
  1605. KontrollKnopf::Style::Selected));
  1606. rend = 1;
  1607. }
  1608. else
  1609. {
  1610. if (!anmeldungClient->gruppeSpielStarten(gruppeId,
  1611. spielerHinzufügen->hatStyleNicht(
  1612. KontrollKnopf::Style::Selected)))
  1613. {
  1614. spielerHinzufügen->setStyle(KontrollKnopf::Style::Selected,
  1615. spielerHinzufügen->hatStyleNicht(
  1616. KontrollKnopf::Style::Selected));
  1617. rend = 1;
  1618. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1619. new Text(anmeldungClient->getLetzterFehler()),
  1620. new Text("Ok"),
  1621. 0);
  1622. }
  1623. anmeldungClient->trenne(0);
  1624. }
  1625. break;
  1626. case 2:
  1627. if (!anmeldungClient)
  1628. anmeldungClient = mainClient->createAnmeldungServerClient();
  1629. if (!anmeldungClient)
  1630. {
  1631. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1632. new Text(mainClient->getLetzterFehler()),
  1633. new Text("Ok"),
  1634. 0);
  1635. angemeldet->setStyle(KontrollKnopf::Style::Selected,
  1636. angemeldet->hatStyleNicht(KontrollKnopf::Style::Selected));
  1637. rend = 1;
  1638. }
  1639. if (!anmeldungClient->verbinde())
  1640. {
  1641. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1642. new Text(anmeldungClient->getLetzterFehler()),
  1643. new Text("Ok"),
  1644. 0);
  1645. angemeldet->setStyle(KontrollKnopf::Style::Selected,
  1646. angemeldet->hatStyleNicht(KontrollKnopf::Style::Selected));
  1647. rend = 1;
  1648. }
  1649. else
  1650. {
  1651. if (angemeldet->hatStyle(KontrollKnopf::Style::Selected))
  1652. {
  1653. if (!anmeldungClient->gruppeAnmelden(gruppeId))
  1654. {
  1655. angemeldet->setStyle(KontrollKnopf::Style::Selected,
  1656. angemeldet->hatStyleNicht(
  1657. KontrollKnopf::Style::Selected));
  1658. rend = 1;
  1659. nachLogin->zNachrichtenListe()->addNachricht(
  1660. new Text("Fehler"),
  1661. new Text(anmeldungClient->getLetzterFehler()),
  1662. new Text("Ok"),
  1663. 0);
  1664. }
  1665. }
  1666. else
  1667. {
  1668. if (!anmeldungClient->gruppeAbmelden(gruppeId))
  1669. {
  1670. angemeldet->setStyle(KontrollKnopf::Style::Selected,
  1671. angemeldet->hatStyleNicht(
  1672. KontrollKnopf::Style::Selected));
  1673. rend = 1;
  1674. nachLogin->zNachrichtenListe()->addNachricht(
  1675. new Text("Fehler"),
  1676. new Text(anmeldungClient->getLetzterFehler()),
  1677. new Text("Ok"),
  1678. 0);
  1679. }
  1680. }
  1681. anmeldungClient->trenne(0);
  1682. }
  1683. break;
  1684. case 3:
  1685. if (!anmeldungClient)
  1686. anmeldungClient = mainClient->createAnmeldungServerClient();
  1687. if (!anmeldungClient)
  1688. {
  1689. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1690. new Text(mainClient->getLetzterFehler()),
  1691. new Text("Ok"),
  1692. 0);
  1693. rend = 1;
  1694. }
  1695. if (!anmeldungClient->verbinde())
  1696. {
  1697. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1698. new Text(anmeldungClient->getLetzterFehler()),
  1699. new Text("Ok"),
  1700. 0);
  1701. rend = 1;
  1702. }
  1703. else
  1704. {
  1705. if (anmeldungClient->gruppeVerlassen(gruppeId))
  1706. nachLogin->zSpielenFenster()->gruppeVerlassen();
  1707. else
  1708. {
  1709. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1710. new Text(anmeldungClient->getLetzterFehler()),
  1711. new Text("Ok"),
  1712. 0);
  1713. }
  1714. anmeldungClient->trenne(0);
  1715. }
  1716. break;
  1717. }
  1718. me.mx += pos.x;
  1719. me.my += pos.y;
  1720. }
  1721. void GruppeAnmeldung::render(Bild& zRObj)
  1722. {
  1723. if (!zRObj.setDrawOptions(pos.x, pos.y, gr.x, gr.y)) return;
  1724. rahmen->render(zRObj);
  1725. spielerHinzufügen->render(zRObj);
  1726. angemeldet->render(zRObj);
  1727. zeit->render(zRObj);
  1728. gruppeVerlassen->render(zRObj);
  1729. zRObj.releaseDrawOptions();
  1730. }
  1731. void GruppeKarteKSGSAktion(
  1732. void* p, RCArray<KSGSVariable>* parameter, KSGSVariable** retVal)
  1733. {
  1734. if (!p) return;
  1735. ((GruppeKarte*)p)->ksgsAktion(parameter, retVal);
  1736. }
  1737. // Inhalt der GruppeKarte Klasse aus Gruppe.h
  1738. // Konstruktor
  1739. GruppeKarte::GruppeKarte()
  1740. : Thread()
  1741. {
  1742. tr = new TextRenderer(
  1743. dynamic_cast<Schrift*>(uiFactory.initParam.schrift->getThis()));
  1744. pos = Punkt(350, 0);
  1745. gr = Punkt(600, 350);
  1746. rahmen = new LRahmen();
  1747. rahmen->setFarbe(0xFFFFFFFF);
  1748. rahmen->setRamenBreite(1);
  1749. rahmen->setSize(350, 350);
  1750. rahmen->setPosition(248, 0);
  1751. info = 0;
  1752. ksgs = Framework::getDLLRegister()->ladeDLL(
  1753. "KSGScript.dll", "data/bin/KSGScript.dll");
  1754. if (ksgs)
  1755. {
  1756. KSGSGetZeichnung getKSGScript
  1757. = (KSGSGetZeichnung)GetProcAddress(ksgs, KSGS_START_FUNKTION);
  1758. if (getKSGScript)
  1759. {
  1760. info = getKSGScript();
  1761. info->setBildschirmZ(dynamic_cast<Bildschirm*>(
  1762. uiFactory.initParam.bildschirm->getThis()));
  1763. info->setSchriftZ(
  1764. dynamic_cast<Schrift*>(uiFactory.initParam.schrift->getThis()));
  1765. info->setSize(248, 350);
  1766. info->setCallbackParam(this);
  1767. info->setCallbackFunktion(GruppeKarteKSGSAktion);
  1768. }
  1769. else
  1770. {
  1771. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1772. new Text(
  1773. "Der Einstiegspunkt '" KSGS_START_FUNKTION
  1774. "' in der DLL-Datei "
  1775. "'data/bin/KSGScript.dll' konnte nicht gefunden werden."),
  1776. new Text("Ok"),
  1777. 0);
  1778. }
  1779. }
  1780. else
  1781. {
  1782. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  1783. new Text("Die DLL-Datei 'data/bin/KSGScript.dll' konnte nicht "
  1784. "geladen werden."),
  1785. new Text("Ok"),
  1786. 0);
  1787. }
  1788. hintergrund = 0;
  1789. fehler = 0;
  1790. alpha1 = 0;
  1791. alpha2 = 0;
  1792. ladenZeit = 0;
  1793. tickVal = 0;
  1794. ladeBild = 0;
  1795. karteId = 0;
  1796. gruppeId = 0;
  1797. exit = 0;
  1798. geladen = 0;
  1799. rend = 0;
  1800. }
  1801. // Destruktor
  1802. GruppeKarte::~GruppeKarte()
  1803. {
  1804. rahmen->release();
  1805. if (info)
  1806. {
  1807. info->reset();
  1808. info->release();
  1809. }
  1810. if (hintergrund) hintergrund->release();
  1811. if (fehler) fehler->release();
  1812. tr->release();
  1813. if (ksgs) Framework::getDLLRegister()->releaseDLL("KSGScript.dll");
  1814. }
  1815. // nicht constant
  1816. void GruppeKarte::reset()
  1817. {
  1818. if (info) info->reset();
  1819. if (hintergrund) hintergrund = (Bild*)hintergrund->release();
  1820. if (fehler) fehler = (TextFeld*)fehler->release();
  1821. if (run)
  1822. {
  1823. exit = 1;
  1824. warteAufThread(5000);
  1825. if (run) ende();
  1826. }
  1827. geladen = 0;
  1828. alpha1 = 0;
  1829. alpha2 = 0;
  1830. ladenZeit = 0;
  1831. tickVal = 0;
  1832. ladeBild = 0;
  1833. karteId = 0;
  1834. gruppeId = 0;
  1835. exit = 0;
  1836. rend = 1;
  1837. }
  1838. void GruppeKarte::ksgsAktion(
  1839. RCArray<KSGSVariable>* parameter, KSGSVariable** retVal)
  1840. {}
  1841. void GruppeKarte::setGruppeId(int gruppeId)
  1842. {
  1843. this->gruppeId = gruppeId;
  1844. if (run)
  1845. {
  1846. exit = 1;
  1847. warteAufThread(5000);
  1848. if (run) ende();
  1849. exit = 0;
  1850. }
  1851. geladen = 0;
  1852. rend = 1;
  1853. start();
  1854. }
  1855. bool GruppeKarte::tick(double tickVal)
  1856. {
  1857. if (!gruppeId) return 0;
  1858. if (info) rend |= info->tick(tickVal);
  1859. ladenZeit += tickVal;
  1860. if (ladenZeit >= 1 / 30.0)
  1861. {
  1862. ladenZeit -= 1 / 30.0;
  1863. if (ladeAnimation && ladeAnimation->zAnimationData())
  1864. {
  1865. if (alpha1) rend = 1;
  1866. ladeBild++;
  1867. if (ladeBild >= ladeAnimation->zAnimationData()->getBildAnzahl())
  1868. ladeBild = 0;
  1869. }
  1870. }
  1871. this->tickVal += tickVal * 300;
  1872. int val = (int)this->tickVal;
  1873. if (val < 1)
  1874. {
  1875. bool ret = rend;
  1876. rend = 0;
  1877. return ret;
  1878. }
  1879. if (val > 10) val = 10;
  1880. this->tickVal -= val;
  1881. if (!geladen && !fehler)
  1882. {
  1883. if (alpha1 != 255 || alpha2 != 0) rend = 1;
  1884. if (alpha1 + val > 255)
  1885. alpha1 = 255;
  1886. else
  1887. alpha1 += val;
  1888. if (alpha2 - val < 0)
  1889. alpha2 = 0;
  1890. else
  1891. alpha2 -= val;
  1892. }
  1893. else
  1894. {
  1895. if (alpha1 != 0 || alpha2 != 255) rend = 1;
  1896. if (alpha1 - val < 0)
  1897. alpha1 = 0;
  1898. else
  1899. alpha1 -= val;
  1900. if (alpha2 + val > 255)
  1901. alpha2 = 255;
  1902. else
  1903. alpha2 += val;
  1904. }
  1905. bool ret = rend;
  1906. rend = 0;
  1907. return ret;
  1908. }
  1909. void GruppeKarte::doPublicMausEreignis(MausEreignis& me)
  1910. {
  1911. me.mx -= pos.x;
  1912. me.my -= pos.y;
  1913. if (info) info->doPublicMausEreignis(me);
  1914. me.mx += pos.x;
  1915. me.my += pos.y;
  1916. }
  1917. void GruppeKarte::render(Bild& zrObj)
  1918. {
  1919. int x = pos.x;
  1920. int y = pos.y;
  1921. if (!zrObj.setDrawOptions(x, y, gr.x, gr.y)) return;
  1922. if (alpha1 != 0 && ladeAnimation && ladeAnimation->zAnimationData())
  1923. {
  1924. Bild* tmp = ladeAnimation->zAnimationData()->zBild(ladeBild);
  1925. if (tmp)
  1926. {
  1927. zrObj.setAlpha(alpha1);
  1928. zrObj.drawBild(gr.x / 2 - tmp->getBreite() / 2,
  1929. gr.y / 2 - tmp->getHeight() / 2,
  1930. tmp->getBreite(),
  1931. tmp->getHeight(),
  1932. *tmp);
  1933. zrObj.releaseAlpha();
  1934. }
  1935. }
  1936. if (alpha2 != 0)
  1937. {
  1938. zrObj.setAlpha(alpha2);
  1939. if (geladen)
  1940. {
  1941. if (info) info->render(zrObj);
  1942. rahmen->render(zrObj);
  1943. zrObj.drawBild(248 + rahmen->getRBreite(),
  1944. rahmen->getRBreite(),
  1945. rahmen->getBreite() - rahmen->getRBreite() * 2,
  1946. rahmen->getHeight() - rahmen->getRBreite() * 2,
  1947. *hintergrund);
  1948. }
  1949. else if (fehler)
  1950. fehler->render(zrObj);
  1951. zrObj.releaseAlpha();
  1952. }
  1953. zrObj.releaseDrawOptions();
  1954. }
  1955. void GruppeKarte::thread()
  1956. {
  1957. if (info) info->reset();
  1958. if (hintergrund) hintergrund = (Bild*)hintergrund->release();
  1959. if (fehler) fehler = (TextFeld*)fehler->release();
  1960. karteId = infoClient->getGruppenKarteId(gruppeId);
  1961. if (!karteId)
  1962. {
  1963. run = 0;
  1964. return;
  1965. }
  1966. KartenLeser* karte = KartenLeser::getInstance();
  1967. karte->lock();
  1968. karte->setKarteId(karteId);
  1969. hintergrund = karte->getKartenVorschauBild();
  1970. if (exit)
  1971. {
  1972. if (hintergrund) hintergrund = (Bild*)hintergrund->release();
  1973. karte->unlock();
  1974. karte->release();
  1975. run = 0;
  1976. return;
  1977. }
  1978. if (!hintergrund)
  1979. {
  1980. Text* f = new Text(karte->getLetzterFehler());
  1981. tr->setSchriftSize(12);
  1982. int br = tr->getTextBreite(f->getText());
  1983. int hö = tr->getTextHeight(f->getText());
  1984. fehler = initTextFeld(gr.x / 2 - (br + 10) / 2,
  1985. gr.y / 2 - (hö + 4) / 2,
  1986. br + 10,
  1987. hö + 4,
  1988. TextFeld::Style::Text | TextFeld::Style::Center,
  1989. f->getText());
  1990. f->release();
  1991. karte->unlock();
  1992. karte->release();
  1993. run = 0;
  1994. return;
  1995. }
  1996. bool ok = 0;
  1997. if (info)
  1998. {
  1999. if (!karte->getKartenBeschreibung())
  2000. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  2001. new Text("Beschreibung nicht gefunden."),
  2002. new Text("Ok"));
  2003. else
  2004. {
  2005. Text* pf = karte->getKartePfad();
  2006. *pf += "beschreibung.ksgs";
  2007. info->setScriptDatei(pf);
  2008. ok = info->neuLaden();
  2009. KSGSVariable* var = info->startFunktion(
  2010. info->getFunktionId("_in_gruppe"), new RCArray<KSGSVariable>());
  2011. if (var) var->release();
  2012. }
  2013. }
  2014. if (!ok)
  2015. {
  2016. Text* f = new Text(karte->getLetzterFehler());
  2017. tr->setSchriftSize(12);
  2018. int br = tr->getTextBreite(f->getText());
  2019. int hö = tr->getTextHeight(f->getText());
  2020. fehler = initTextFeld(gr.x / 2 - (br + 10) / 2,
  2021. gr.y / 2 - (hö + 4) / 2,
  2022. br + 10,
  2023. hö + 4,
  2024. TextFeld::Style::Text | TextFeld::Style::Center,
  2025. f->getText());
  2026. f->release();
  2027. karte->unlock();
  2028. karte->release();
  2029. run = 0;
  2030. return;
  2031. }
  2032. karte->unlock();
  2033. karte->release();
  2034. geladen = 1;
  2035. run = 0;
  2036. rend = 1;
  2037. }
  2038. // constant
  2039. int GruppeKarte::getKarteId() const
  2040. {
  2041. return karteId;
  2042. }
  2043. // Inhalt der GruppeSpielGefunden Klasse aus Gruppe.h
  2044. // Konstruktor
  2045. GruppeSpielGefunden::GruppeSpielGefunden()
  2046. : ReferenceCounter()
  2047. {
  2048. pos = Punkt(375, 235);
  2049. gr = Punkt(200, 90);
  2050. spielGefunden = initFenster(0,
  2051. 0,
  2052. 200,
  2053. 90,
  2054. Fenster::Style::Sichtbar | Fenster::Style::Rahmen
  2055. | Fenster::Style::Titel,
  2056. "Spiel gefunden");
  2057. zeit = initTextFeld(
  2058. 0, 30, 200, 20, TextFeld::Style::Text, "Verbleibende Zeit: 10");
  2059. warte = initTextFeld(0,
  2060. 60,
  2061. 200,
  2062. 20,
  2063. TextFeld::Style::Text & ~TextFeld::Style::Sichtbar,
  2064. "Warte auf andere Spieler. . .");
  2065. annehmen = initKnopf(50, 60, 100, 20, Knopf::Style::Normal, "beitreten");
  2066. alpha = 0;
  2067. time = 0;
  2068. sichtbar = 0;
  2069. tickVal = 0;
  2070. rend = 0;
  2071. }
  2072. // Destruktor
  2073. GruppeSpielGefunden::~GruppeSpielGefunden()
  2074. {
  2075. spielGefunden->release();
  2076. zeit->release();
  2077. warte->release();
  2078. annehmen->release();
  2079. }
  2080. // nicht constant
  2081. void GruppeSpielGefunden::reset()
  2082. {
  2083. zeit->setText("Verbleibende Zeit: 10");
  2084. alpha = 0;
  2085. time = 0;
  2086. sichtbar = 0;
  2087. warte->removeStyle(TextFeld::Style::Sichtbar);
  2088. annehmen->addStyle(Knopf::Style::Sichtbar);
  2089. rend = 1;
  2090. }
  2091. void GruppeSpielGefunden::setSichtbar(bool sichtbar)
  2092. {
  2093. warte->removeStyle(TextFeld::Style::Sichtbar);
  2094. annehmen->addStyle(Knopf::Style::Sichtbar);
  2095. this->sichtbar = sichtbar;
  2096. rend = 1;
  2097. }
  2098. void GruppeSpielGefunden::setVerbleibendeZeit(int sekunden)
  2099. {
  2100. if (time != sekunden) rend = 1;
  2101. time = sekunden;
  2102. }
  2103. bool GruppeSpielGefunden::tick(double tickVal)
  2104. {
  2105. if (rend)
  2106. {
  2107. zeit->setText("Verbleibende Zeit: ");
  2108. zeit->zText()->append((int)time);
  2109. }
  2110. rend |= annehmen->tick(tickVal);
  2111. this->tickVal += tickVal * 300;
  2112. int val = (int)this->tickVal;
  2113. if (val < 1)
  2114. {
  2115. bool ret = rend;
  2116. rend = 0;
  2117. return ret;
  2118. }
  2119. if (val > 10) val = 10;
  2120. this->tickVal -= val;
  2121. if (sichtbar)
  2122. {
  2123. if (alpha < 255)
  2124. {
  2125. if (alpha + val > 255)
  2126. alpha = 255;
  2127. else
  2128. alpha += val;
  2129. rend = 1;
  2130. }
  2131. }
  2132. else
  2133. {
  2134. if (alpha)
  2135. {
  2136. if (alpha - val < 0)
  2137. alpha = 0;
  2138. else
  2139. alpha -= val;
  2140. rend = 1;
  2141. }
  2142. }
  2143. bool ret = rend;
  2144. rend = 0;
  2145. return ret;
  2146. }
  2147. void GruppeSpielGefunden::doPublicMausEreignis(MausEreignis& me)
  2148. {
  2149. me.mx -= pos.x;
  2150. me.my -= pos.y;
  2151. bool ver = me.verarbeitet;
  2152. annehmen->doPublicMausEreignis(me);
  2153. if (me.verarbeitet && !ver && me.id == ME_RLinks)
  2154. {
  2155. if (spielClient->spielErstelltAnnehmen())
  2156. {
  2157. annehmen->removeStyle(Knopf::Style::Sichtbar);
  2158. warte->addStyle(TextFeld::Style::Sichtbar);
  2159. rend = 1;
  2160. }
  2161. else if (nachLogin && nachLogin->zSpielenFenster())
  2162. nachLogin->zNachrichtenListe()->addNachricht(new Text("Fehler"),
  2163. new Text(spielClient->getLetzterFehler()),
  2164. new Text("Ok"),
  2165. 0);
  2166. }
  2167. me.mx += pos.x;
  2168. me.my += pos.y;
  2169. }
  2170. void GruppeSpielGefunden::render(Bild& zRObj)
  2171. {
  2172. if (!zRObj.setDrawOptions(pos.x, pos.y, gr.x, gr.y)) return;
  2173. zRObj.setAlpha(alpha);
  2174. spielGefunden->render(zRObj);
  2175. zeit->render(zRObj);
  2176. warte->render(zRObj);
  2177. annehmen->render(zRObj);
  2178. zRObj.releaseAlpha();
  2179. zRObj.releaseDrawOptions();
  2180. }
  2181. // constant
  2182. bool GruppeSpielGefunden::istSichtbar() const
  2183. {
  2184. return sichtbar;
  2185. }
  2186. // Inhalt der GruppeFenster Klasse aus Gruppe.h
  2187. // Konstruktor
  2188. GruppeFenster::GruppeFenster()
  2189. : ReferenceCounter()
  2190. {
  2191. pos = Punkt(0, 0);
  2192. gr = Punkt(950, 550);
  2193. anmeldung = new GruppeAnmeldung();
  2194. chat = new GruppeChat();
  2195. accounts = new GruppeAccountListe();
  2196. einladungen = new GruppeEinladungListe();
  2197. karte = new GruppeKarte();
  2198. spiel = new GruppeSpielGefunden();
  2199. alpha = 0;
  2200. sichtbar = 0;
  2201. tickVal = 0;
  2202. rend = 0;
  2203. }
  2204. // Destruktor
  2205. GruppeFenster::~GruppeFenster()
  2206. {
  2207. anmeldung->release();
  2208. chat->release();
  2209. accounts->release();
  2210. einladungen->release();
  2211. karte->warteAufThread(10000);
  2212. karte->ende();
  2213. karte->release();
  2214. spiel->release();
  2215. }
  2216. // nicht constant
  2217. void GruppeFenster::setGruppeId(int id)
  2218. {
  2219. gruppeId = id;
  2220. anmeldung->setGruppeId(id);
  2221. chat->setGruppeId(id);
  2222. accounts->setGruppeId(id);
  2223. einladungen->setGruppeId(id);
  2224. karte->setGruppeId(id);
  2225. spiel->setSichtbar(0);
  2226. if (id)
  2227. {
  2228. int adminId = infoClient->getGruppeAdminId(id);
  2229. nachLogin->zFreundesListe()->zeigeEinladeKnopf(
  2230. adminId == loginClient->getAccountId());
  2231. setAdmin(adminId);
  2232. }
  2233. rend = 1;
  2234. }
  2235. void GruppeFenster::setSichtbar(bool sichtbar)
  2236. {
  2237. this->sichtbar = sichtbar;
  2238. rend = 1;
  2239. }
  2240. void GruppeFenster::chatNachricht(const char* nachricht)
  2241. {
  2242. chat->gruppeNachricht(nachricht);
  2243. }
  2244. void GruppeFenster::neuerSpieler(int accountId)
  2245. {
  2246. einladungen->setAngenommen(accountId);
  2247. accounts->addAccount(accountId);
  2248. }
  2249. void GruppeFenster::spielerVerlässt(int accountId)
  2250. {
  2251. accounts->removeAccount(accountId);
  2252. anmeldung->setAngemeldet(0);
  2253. }
  2254. void GruppeFenster::neueEinladung(int accountId)
  2255. {
  2256. einladungen->addAccount(accountId);
  2257. }
  2258. void GruppeFenster::einladungEntfernt(int accountId)
  2259. {
  2260. einladungen->remove(accountId);
  2261. }
  2262. void GruppeFenster::einladungAbgelehnt(int accountId)
  2263. {
  2264. einladungen->setAbgelehnt(accountId);
  2265. }
  2266. void GruppeFenster::setSpielerHinzufügen(bool sh)
  2267. {
  2268. anmeldung->setSpielerHinzufügen(sh);
  2269. }
  2270. void GruppeFenster::setAngemeldet(bool angemeldet)
  2271. {
  2272. anmeldung->setAngemeldet(angemeldet);
  2273. }
  2274. void GruppeFenster::spielGefunden()
  2275. {
  2276. anmeldung->spielGefunden();
  2277. spiel->setSichtbar(1);
  2278. rend = 1;
  2279. }
  2280. void GruppeFenster::verbleibendeZeit(int sekunden)
  2281. {
  2282. spiel->setVerbleibendeZeit(sekunden);
  2283. }
  2284. void GruppeFenster::spielGefundenAbbruch()
  2285. {
  2286. spiel->setSichtbar(0);
  2287. }
  2288. void GruppeFenster::zurückInWarteschlange(
  2289. int stunden, int minuten, int sekunden)
  2290. {
  2291. anmeldung->zurückInWarteschlange(stunden, minuten, sekunden);
  2292. }
  2293. void GruppeFenster::setAdmin(int accountId)
  2294. {
  2295. anmeldung->setAdmin(accountId);
  2296. accounts->setAdmin(accountId);
  2297. einladungen->setAdmin(accountId);
  2298. }
  2299. void GruppeFenster::kick() {}
  2300. void GruppeFenster::reset()
  2301. {
  2302. accounts->reset();
  2303. einladungen->reset();
  2304. karte->reset();
  2305. chat->reset();
  2306. anmeldung->reset();
  2307. spiel->reset();
  2308. }
  2309. bool GruppeFenster::tick(double tickVal)
  2310. {
  2311. if (!spiel->istSichtbar())
  2312. {
  2313. rend |= anmeldung->tick(tickVal);
  2314. rend |= chat->tick(tickVal);
  2315. rend |= accounts->tick(tickVal);
  2316. rend |= einladungen->tick(tickVal);
  2317. rend |= karte->tick(tickVal);
  2318. }
  2319. rend |= spiel->tick(tickVal);
  2320. this->tickVal += tickVal * 300;
  2321. int val = (int)this->tickVal;
  2322. if (val < 1)
  2323. {
  2324. bool ret = rend;
  2325. rend = 0;
  2326. return ret;
  2327. }
  2328. if (val > 10) val = 10;
  2329. this->tickVal -= val;
  2330. if (sichtbar)
  2331. {
  2332. if (spiel->istSichtbar())
  2333. {
  2334. if (alpha > 0x70)
  2335. {
  2336. if (alpha - val < 0x70)
  2337. alpha = 0x70;
  2338. else
  2339. alpha -= val;
  2340. rend = 1;
  2341. }
  2342. else if (alpha < 0x70)
  2343. {
  2344. if (alpha + val > 0x70)
  2345. alpha = 0x70;
  2346. else
  2347. alpha += val;
  2348. rend = 1;
  2349. }
  2350. }
  2351. else
  2352. {
  2353. if (alpha < 255)
  2354. {
  2355. if (alpha + val > 255)
  2356. alpha = 255;
  2357. else
  2358. alpha += val;
  2359. rend = 1;
  2360. }
  2361. }
  2362. }
  2363. else
  2364. {
  2365. if (alpha > 0)
  2366. {
  2367. if (alpha - val < 0)
  2368. alpha = 0;
  2369. else
  2370. alpha -= val;
  2371. rend = 1;
  2372. if (!alpha) reset();
  2373. }
  2374. }
  2375. bool ret = rend;
  2376. rend = 0;
  2377. return ret;
  2378. }
  2379. void GruppeFenster::doPublicMausEreignis(MausEreignis& me)
  2380. {
  2381. if (!spiel->istSichtbar())
  2382. {
  2383. anmeldung->doPublicMausEreignis(me);
  2384. chat->doPublicMausEreignis(me);
  2385. accounts->doPublicMausEreignis(me);
  2386. einladungen->doPublicMausEreignis(me);
  2387. karte->doPublicMausEreignis(me);
  2388. }
  2389. spiel->doPublicMausEreignis(me);
  2390. }
  2391. void GruppeFenster::doTastaturEreignis(TastaturEreignis& te)
  2392. {
  2393. if (!spiel->istSichtbar())
  2394. {
  2395. chat->doTastaturEreignis(te);
  2396. einladungen->doTastaturEreignis(te);
  2397. }
  2398. }
  2399. void GruppeFenster::render(Bild& zRObj)
  2400. {
  2401. if (alpha)
  2402. {
  2403. int x = pos.x;
  2404. int y = pos.y;
  2405. if (!zRObj.setDrawOptions(x, y, gr.x, gr.y)) return;
  2406. unsigned char tmpAlpha = zRObj.getAlpha();
  2407. zRObj.setAlpha(alpha);
  2408. anmeldung->render(zRObj);
  2409. chat->render(zRObj);
  2410. accounts->render(zRObj);
  2411. einladungen->render(zRObj);
  2412. karte->render(zRObj);
  2413. zRObj.releaseAlpha();
  2414. spiel->render(zRObj);
  2415. zRObj.releaseDrawOptions();
  2416. }
  2417. }
  2418. // constant
  2419. int GruppeFenster::getGruppeId() const
  2420. {
  2421. return gruppeId;
  2422. }
  2423. int GruppeFenster::getKarteId() const
  2424. {
  2425. return karte ? karte->getKarteId() : 0;
  2426. }