Angemeldet.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. #include "Angemeldet.h"
  2. #include <Punkt.h>
  3. #include <Rahmen.h>
  4. #include "..\..\..\Global\Initialisierung.h"
  5. #include "..\..\..\Global\Variablen.h"
  6. // Inhalt der AngemeldetFenster Klasse aus Angemeldet.h
  7. // Konstruktor
  8. AngemeldetFenster::AngemeldetFenster( Schrift *zSchrift )
  9. {
  10. pos = Punkt( 10, 10 );
  11. gr = Punkt( 780, 480 );
  12. rahmen = new LRahmen();
  13. rahmen->setRamenBreite( 1 );
  14. rahmen->setFarbe( 0xFFFFFFFF );
  15. rahmen->setSize( 780, 480 );
  16. spielName = initTextFeld( 290, 165, 200, 20, zSchrift, TextFeld::Style::Text, "" );
  17. karteName = initTextFeld( 290, 190, 200, 20, zSchrift, TextFeld::Style::Text, "" );
  18. zeit = initTextFeld( 290, 215, 200, 20, zSchrift, TextFeld::Style::Text, "Zeit in Warteschlange: " );
  19. abbrechen = initKnopf( 340, 240, 100, 20, zSchrift, Knopf::Style::Normal, "abbrechen" );
  20. spielGefunden = initTextFeld( 340, 140, 100, 20, zSchrift, TextFeld::Style::Text & ~TextFeld::Style::Sichtbar, "Spiel gefunden" );
  21. warten = initTextFeld( 290, 240, 200, 20, zSchrift, TextFeld::Style::Text & ~TextFeld::Style::Sichtbar, "Warte auf andere Spieler" );
  22. beitreten = initKnopf( 340, 240, 100, 20, zSchrift, Knopf::Style::Normal & ~Knopf::Style::Sichtbar, "beitreten" );
  23. kick = initTextFeld( 190, 215, 400, 20, zSchrift, TextFeld::Style::Text & ~Knopf::Style::Sichtbar, "Du wurdest wegen Abwesenheit aus der Warteschlange entfernt." );
  24. ok = initKnopf( 340, 240, 100, 20, zSchrift, Knopf::Style::Normal & ~Knopf::Style::Sichtbar, "Zurück" );
  25. karteId = 0;
  26. gameId = 0;
  27. animation = 0;
  28. alpha = 0;
  29. aAlpha = 0;
  30. tickVal = 0;
  31. time = 0;
  32. status = 0;
  33. rend = 0;
  34. ref = 1;
  35. }
  36. // Destruktor
  37. AngemeldetFenster::~AngemeldetFenster()
  38. {
  39. if( karteId && anmeldungKlient )
  40. anmeldungKlient->abmelden();
  41. rahmen->release();
  42. spielName->release();
  43. karteName->release();
  44. zeit->release();
  45. abbrechen->release();
  46. spielGefunden->release();
  47. warten->release();
  48. beitreten->release();
  49. kick->release();
  50. ok->release();
  51. }
  52. // nicht constant
  53. bool AngemeldetFenster::setKarteId( int karteId )
  54. {
  55. if( !anmeldungKlient )
  56. return 0;
  57. if( !karteId )
  58. {
  59. if( anmeldungKlient->abmelden() )
  60. {
  61. this->karteId = 0;
  62. return 1;
  63. }
  64. else
  65. return 0;
  66. }
  67. if( !anmeldungKlient->anmelden( karteId ) )
  68. {
  69. if( nachLogin && nachLogin->zNachrichtenListe() )
  70. {
  71. if( anmeldungKlient->getLetzterFehler() )
  72. {
  73. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
  74. new Text( anmeldungKlient->getLetzterFehler() ),
  75. new Text( "Ok" ),
  76. 0,
  77. NachrichtType::nachricht,
  78. 0
  79. );
  80. }
  81. else
  82. {
  83. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
  84. new Text( "Fehler beim anmelden." ),
  85. new Text( "Ok" ),
  86. 0,
  87. NachrichtType::nachricht,
  88. 0
  89. );
  90. }
  91. }
  92. return 0;
  93. }
  94. else
  95. {
  96. time = 0;
  97. this->karteId = karteId;
  98. if( infoKlient )
  99. {
  100. Text *sN = infoKlient->getSpielName( infoKlient->getSpielId( karteId ) );
  101. Text *kN = infoKlient->getKarteName( karteId );
  102. if( sN )
  103. {
  104. spielName->setText( "Spiel: " );
  105. spielName->zText()->append( sN );
  106. }
  107. if( kN )
  108. {
  109. karteName->setText( "Karte: " );
  110. karteName->zText()->append( kN );
  111. }
  112. }
  113. rend = 1;
  114. return 1;
  115. }
  116. }
  117. void AngemeldetFenster::setSichtbar( bool sichtbar )
  118. {
  119. if( sichtbar )
  120. {
  121. status = 1;
  122. spielName->addStyle( TextFeld::Style::Sichtbar );
  123. karteName->addStyle( TextFeld::Style::Sichtbar );
  124. zeit->addStyle( TextFeld::Style::Sichtbar );
  125. abbrechen->addStyle( Knopf::Style::Sichtbar );
  126. spielGefunden->removeStyle( TextFeld::Style::Sichtbar );
  127. warten->removeStyle( TextFeld::Style::Sichtbar );
  128. beitreten->removeStyle( Knopf::Style::Sichtbar );
  129. kick->removeStyle( TextFeld::Style::Sichtbar );
  130. ok->removeStyle( Knopf::Style::Sichtbar );
  131. animation |= 0x1 | 0x4;
  132. }
  133. else
  134. {
  135. animation &= ~( 0x1 | 0x4 | 0x8 );
  136. status = 0;
  137. }
  138. rend = 1;
  139. }
  140. void AngemeldetFenster::setSpielGefunden()
  141. {
  142. status = 2;
  143. spielName->addStyle( TextFeld::Style::Sichtbar );
  144. karteName->addStyle( TextFeld::Style::Sichtbar );
  145. zeit->addStyle( TextFeld::Style::Sichtbar );
  146. abbrechen->removeStyle( Knopf::Style::Sichtbar );
  147. spielGefunden->addStyle( TextFeld::Style::Sichtbar );
  148. warten->removeStyle( TextFeld::Style::Sichtbar );
  149. beitreten->addStyle( Knopf::Style::Sichtbar );
  150. kick->removeStyle( TextFeld::Style::Sichtbar );
  151. ok->removeStyle( Knopf::Style::Sichtbar );
  152. rend = 1;
  153. }
  154. void AngemeldetFenster::setVerbleibendeZeit( int sekunden )
  155. {
  156. if( time != sekunden )
  157. {
  158. time = sekunden;
  159. rend = 1;
  160. }
  161. }
  162. void AngemeldetFenster::spielGefundenAbbruch()
  163. {
  164. status = 4;
  165. spielName->removeStyle( TextFeld::Style::Sichtbar );
  166. karteName->removeStyle( TextFeld::Style::Sichtbar );
  167. zeit->removeStyle( TextFeld::Style::Sichtbar );
  168. abbrechen->removeStyle( Knopf::Style::Sichtbar );
  169. spielGefunden->removeStyle( TextFeld::Style::Sichtbar );
  170. warten->removeStyle( TextFeld::Style::Sichtbar );
  171. beitreten->removeStyle( Knopf::Style::Sichtbar );
  172. kick->addStyle( TextFeld::Style::Sichtbar );
  173. ok->addStyle( Knopf::Style::Sichtbar );
  174. rend = 1;
  175. }
  176. void AngemeldetFenster::zurückInWarteschlange( int stunden, int minuten, int sekunden )
  177. {
  178. time = sekunden + minuten * 60 + stunden * 60 * 60;
  179. status = 1;
  180. spielName->addStyle( TextFeld::Style::Sichtbar );
  181. karteName->addStyle( TextFeld::Style::Sichtbar );
  182. zeit->addStyle( TextFeld::Style::Sichtbar );
  183. abbrechen->addStyle( Knopf::Style::Sichtbar );
  184. spielGefunden->removeStyle( TextFeld::Style::Sichtbar );
  185. warten->removeStyle( TextFeld::Style::Sichtbar );
  186. beitreten->removeStyle( Knopf::Style::Sichtbar );
  187. kick->removeStyle( TextFeld::Style::Sichtbar );
  188. ok->removeStyle( Knopf::Style::Sichtbar );
  189. rend = 1;
  190. }
  191. bool AngemeldetFenster::tick( double tickVal )
  192. {
  193. rend |= spielName->tick( tickVal );
  194. rend |= karteName->tick( tickVal );
  195. rend |= zeit->tick( tickVal );
  196. rend |= abbrechen->tick( tickVal );
  197. rend |= spielGefunden->tick( tickVal );
  198. rend |= warten->tick( tickVal );
  199. rend |= beitreten->tick( tickVal );
  200. rend |= kick->tick( tickVal );
  201. rend |= ok->tick( tickVal );
  202. if( status == 2 || status == 3 )
  203. {
  204. Text txt = "Verbleibende Zeit: ";
  205. txt += (int)( time / 60 / 60 );
  206. txt += ":";
  207. txt += ( (int)( time / 60 ) % 60 );
  208. txt += ":";
  209. txt += (int)time % 60;
  210. if( !zeit->zText()->istGleich( txt ) )
  211. zeit->setText( txt );
  212. }
  213. if( status == 1 )
  214. time += tickVal;
  215. this->tickVal += tickVal * 750;
  216. int val = ( int )this->tickVal;
  217. if( val < 1 )
  218. {
  219. bool ret = rend;
  220. rend = 0;
  221. return ret;
  222. }
  223. if( val > 25 )
  224. val = 25;
  225. this->tickVal -= val;
  226. if( val )
  227. {
  228. if( ( animation | 0x4 ) == animation )
  229. {
  230. if( status == 1 )
  231. {
  232. if( !alpha )
  233. time = 0;
  234. Text txt = "Zeit in Warteschlange: ";
  235. txt += (int)( time / 60 / 60 );
  236. txt += ":";
  237. txt += ( (int)( time / 60 ) % 60 );
  238. txt += ":";
  239. txt += (int)time % 60;
  240. if( !zeit->zText()->istGleich( txt ) )
  241. zeit->setText( txt );
  242. }
  243. if( alpha + ( val / 3 ) > 255 )
  244. alpha = 255;
  245. else
  246. {
  247. alpha += ( val / 3 );
  248. rend = 1;
  249. }
  250. }
  251. else
  252. {
  253. if( alpha - ( val / 2 ) < 0 )
  254. alpha = 0;
  255. else
  256. {
  257. alpha -= ( val / 2 );
  258. rend = 1;
  259. }
  260. }
  261. if( ( animation | 0x1 ) == animation ) // sichtbar
  262. {
  263. if( aAlpha != 255 )
  264. {
  265. if( aAlpha + val > 255 )
  266. aAlpha = 255;
  267. else
  268. aAlpha += val;
  269. rend = 1;
  270. }
  271. }
  272. else // unsichtbar
  273. {
  274. if( aAlpha != 0 )
  275. {
  276. if( aAlpha - val < 0 )
  277. aAlpha = 0;
  278. else
  279. aAlpha -= val;
  280. rend = 1;
  281. }
  282. }
  283. }
  284. bool ret = rend;
  285. rend = 0;
  286. return ret;
  287. }
  288. void AngemeldetFenster::doMausEreignis( MausEreignis &me )
  289. {
  290. me.mx -= pos.x;
  291. me.my -= pos.y;
  292. bool ak = !me.verarbeitet;
  293. abbrechen->doMausEreignis( me );
  294. int aktion = ( abbrechen->hatStyle( Knopf::Style::Sichtbar ) && ak && me.verarbeitet ) ? 1 : 0;
  295. beitreten->doMausEreignis( me );
  296. aktion = ( beitreten->hatStyle( Knopf::Style::Sichtbar ) && ak && me.verarbeitet && !aktion ) ? 2 : aktion;
  297. ok->doMausEreignis( me );
  298. aktion = ( ok->hatStyle( Knopf::Style::Sichtbar ) && ak && me.verarbeitet && !aktion ) ? 3 : aktion;
  299. if( me.id == ME_RLinks )
  300. {
  301. switch( aktion )
  302. {
  303. case 1: // abbrechen
  304. if( anmeldungKlient && anmeldungKlient->abmelden() )
  305. if( nachLogin && nachLogin->zSpielenFenster() )
  306. nachLogin->zSpielenFenster()->anmeldungAbbrechen();
  307. break;
  308. case 2: // beitreten
  309. if( spielKlient->spielErstelltAnnehmen() )
  310. {
  311. status = 3;
  312. spielName->addStyle( TextFeld::Style::Sichtbar );
  313. karteName->addStyle( TextFeld::Style::Sichtbar );
  314. zeit->addStyle( TextFeld::Style::Sichtbar );
  315. abbrechen->removeStyle( Knopf::Style::Sichtbar );
  316. spielGefunden->addStyle( TextFeld::Style::Sichtbar );
  317. warten->addStyle( TextFeld::Style::Sichtbar );
  318. beitreten->removeStyle( Knopf::Style::Sichtbar );
  319. kick->removeStyle( TextFeld::Style::Sichtbar );
  320. ok->removeStyle( Knopf::Style::Sichtbar );
  321. rend = 1;
  322. }
  323. else if( nachLogin && nachLogin->zSpielenFenster() )
  324. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( spielKlient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
  325. break;
  326. case 3: // Zurück
  327. if( nachLogin && nachLogin->zSpielenFenster() )
  328. nachLogin->zSpielenFenster()->anmeldungAbbrechen();
  329. break;
  330. }
  331. }
  332. me.mx += pos.x;
  333. me.my += pos.y;
  334. }
  335. void AngemeldetFenster::render( Bild &zrObj )
  336. {
  337. int x = pos.x;
  338. int y = pos.y;
  339. int br = gr.x;
  340. int hö = gr.y;
  341. if( !zrObj.setDrawOptions( x, y, br, br ) )
  342. return;
  343. zrObj.setAlpha( aAlpha );
  344. rahmen->render( zrObj );
  345. zrObj.setAlpha( alpha );
  346. spielName->render( zrObj );
  347. karteName->render( zrObj );
  348. zeit->render( zrObj );
  349. abbrechen->render( zrObj );
  350. spielGefunden->render( zrObj );
  351. warten->render( zrObj );
  352. beitreten->render( zrObj );
  353. kick->render( zrObj );
  354. ok->render( zrObj );
  355. zrObj.releaseAlpha();
  356. zrObj.releaseDrawOptions();
  357. zrObj.releaseAlpha();
  358. }
  359. int AngemeldetFenster::getAktion()
  360. {
  361. int ret = aktion;
  362. aktion = 0;
  363. return ret;
  364. }
  365. // constant
  366. int AngemeldetFenster::getKarteId() const
  367. {
  368. return karteId;
  369. }
  370. // Reference Countong
  371. AngemeldetFenster *AngemeldetFenster::getThis()
  372. {
  373. ref++;
  374. return this;
  375. }
  376. AngemeldetFenster *AngemeldetFenster::release()
  377. {
  378. ref--;
  379. if( !ref )
  380. delete this;
  381. return 0;
  382. }