Angemeldet.cpp 12 KB

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