Angemeldet.cpp 12 KB

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