AccountAktivität.cpp 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. #include "AccountAktivität.h"
  2. #include "../../../Global/Initialisierung.h"
  3. #include "../../../Global/Variablen.h"
  4. // Inhalt der AccountAktivität Klasse aus AccountAktivität.h
  5. // Konstruktor
  6. AccountAktivität::AccountAktivität( Schrift *zSchrift )
  7. : Thread(),
  8. aktivitätF( initFenster( 810, 40, 780, 450, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen, "Aktivität von " ) ),
  9. online( initLinienDiagramm( 10, 10, 760, 200, zSchrift, LDiag::Style::DatenRahmen, 0 ) ),
  10. spiele( initLinienDiagramm( 10, 220, 760, 200, zSchrift, LDiag::Style::DatenRahmen, 0 ) ),
  11. status( 0 ),
  12. accId( 0 ),
  13. animation( 0 ),
  14. alpha( 255 ),
  15. tickVal( 0 ),
  16. rend( 0 ),
  17. ref( 1 )
  18. {
  19. online->setHIntervallBreite( 36.8 );
  20. spiele->setVIntervallHeight( 36.8 );
  21. online->setDatenStyle( DiagDaten::Style::autoRaster | DiagDaten::Style::intervallTexte | DiagDaten::Style::intervalle | DiagDaten::Style::Sichtbar | DiagDaten::Style::autoIntervall );
  22. spiele->setDatenStyle( DiagDaten::Style::autoRaster | DiagDaten::Style::intervallTexte | DiagDaten::Style::intervalle | DiagDaten::Style::Sichtbar | DiagDaten::Style::autoIntervall );
  23. online->setRasterDicke( 1 );
  24. spiele->setRasterDicke( 1 );
  25. online->setRasterFarbe( 0xFF505050 );
  26. spiele->setRasterFarbe( 0xFF505050 );
  27. online->setHIntervallFarbe( 0xFFFFFFFF );
  28. spiele->setHIntervallFarbe( 0xFFFFFFFF );
  29. online->setHIntervallName( "Tage" );
  30. spiele->setHIntervallName( "Tage" );
  31. online->setVIntervallFarbe( 0xFFFFFFFF );
  32. spiele->setVIntervallFarbe( 0xFFFFFFFF );
  33. online->setVIntervallName( "Stunden" );
  34. spiele->setVIntervallName( "Spiele" );
  35. aktivitätF->addMember( online );
  36. aktivitätF->addMember( spiele );
  37. }
  38. // Destruktor
  39. AccountAktivität::~AccountAktivität()
  40. {
  41. if( run )
  42. {
  43. warteAufThread( 1000 );
  44. ende();
  45. }
  46. aktivitätF->release();
  47. online->release();
  48. spiele->release();
  49. }
  50. // nicht constant
  51. void AccountAktivität::reset()
  52. {
  53. int wAnz = online->zDiagDaten()->werte->getEintragAnzahl();
  54. for( int i = 0; i < wAnz; i++ )
  55. online->removeWert( 0 );
  56. wAnz = spiele->zDiagDaten()->werte->getEintragAnzahl();
  57. for( int i = 0; i < wAnz; i++ )
  58. spiele->removeWert( 0 );
  59. wAnz = online->zDiagDaten()->hIntervallWerte->getEintragAnzahl();
  60. for( int i = 0; i < wAnz; i++ )
  61. online->removeHIntervallText( online->zDiagDaten()->hIntervallWerte->get( 0 ) );
  62. wAnz = spiele->zDiagDaten()->hIntervallWerte->getEintragAnzahl();
  63. for( int i = 0; i < wAnz; i++ )
  64. spiele->removeHIntervallText( spiele->zDiagDaten()->hIntervallWerte->get( 0 ) );
  65. wAnz = online->zDiagDaten()->vIntervallWerte->getEintragAnzahl();
  66. for( int i = 0; i < wAnz; i++ )
  67. online->removeVIntervallText( online->zDiagDaten()->vIntervallWerte->get( 0 ) );
  68. wAnz = spiele->zDiagDaten()->vIntervallWerte->getEintragAnzahl();
  69. for( int i = 0; i < wAnz; i++ )
  70. spiele->removeVIntervallText( spiele->zDiagDaten()->vIntervallWerte->get( 0 ) );
  71. }
  72. void AccountAktivität::ladeStatistik( int accId )
  73. {
  74. if( this->accId == accId )
  75. return;
  76. this->status = 0;
  77. if( run )
  78. {
  79. warteAufThread( 1000 );
  80. ende();
  81. }
  82. if( ( animation | 0x1 ) == animation )
  83. {
  84. animation |= 0x4;
  85. this->accId = accId;
  86. this->status = 1;
  87. return;
  88. }
  89. if( this->accId )
  90. reset();
  91. this->accId = accId;
  92. start();
  93. this->status = 1;
  94. }
  95. void AccountAktivität::thread()
  96. {
  97. Text *name = infoKlient->getSpielerName( accId );
  98. if( name )
  99. {
  100. name->insert( 0, "Aktivität von " );
  101. aktivitätF->setTitel( *name );
  102. name->release();
  103. }
  104. RCArray< Text > *datum = new RCArray< Text >();
  105. Array< double > *stOnline = new Array< double >();
  106. Array< double > *stGespielt = new Array< double >();
  107. Array< int > *anzSpiele = new Array< int >();
  108. Array< int > *anzGewonnen = new Array< int >();
  109. if( infoKlient->getSpielerAktivität( accId, datum, stOnline, stGespielt, anzSpiele, anzGewonnen ) )
  110. {
  111. int anz = datum->getEintragAnzahl();
  112. double maxO = 0;
  113. int maxS = 0;
  114. for( int i = 0; i < anz; i++ )
  115. {
  116. if( stOnline->hat( i ) && stOnline->get( i ) > maxO )
  117. maxO = stOnline->get( i );
  118. if( stGespielt->hat( i ) && stGespielt->get( i ) > maxO )
  119. maxO = stGespielt->get( i );
  120. if( anzSpiele->hat( i ) && anzSpiele->get( i ) > maxS )
  121. maxS = anzSpiele->get( i );
  122. if( anzGewonnen->hat( i ) && anzGewonnen->get( i ) > maxS )
  123. maxS = anzGewonnen->get( i );
  124. }
  125. maxO += ( maxO / 100 ) * 10;
  126. maxS++;
  127. online->addVIntervallText( 0, "0" );
  128. online->addVIntervallText( (int)maxO + 1, Text() += (int)( maxO + 1 ) );
  129. spiele->addVIntervallText( 0, "0" );
  130. spiele->addVIntervallText( (int)maxS + 1, Text() += (int)( maxS + 1 ) );
  131. online->addHIntervallText( 0, datum->z( 0 )->getText() );
  132. online->addHIntervallText( anz - 1, datum->z( anz - 1 )->getText() );
  133. spiele->addHIntervallText( 0, datum->z( 0 )->getText() );
  134. spiele->addHIntervallText( anz - 1, datum->z( anz - 1 )->getText() );
  135. DiagWert *w = new DiagWert();
  136. w->farbe = 0xFF00FFFF;
  137. w->hintergrund = 0xFF205050;
  138. w->name->setText( "Zeit Online" );
  139. w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
  140. online->addWert( w );
  141. w = new DiagWert();
  142. w->farbe = 0xFF00FF00;
  143. w->hintergrund = 0xFF205020;
  144. w->name->setText( "Zeit im Spiel" );
  145. w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
  146. online->addWert( w );
  147. w = new DiagWert();
  148. w->farbe = 0xFF00FFFF;
  149. w->hintergrund = 0xFF205050;
  150. w->name->setText( "Spiele am Tag" );
  151. w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
  152. spiele->addWert( w );
  153. w = new DiagWert();
  154. w->farbe = 0xFF00FF00;
  155. w->hintergrund = 0xFF205020;
  156. w->name->setText( "Gewonnene Spiele" );
  157. w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
  158. spiele->addWert( w );
  159. for( int i = 0; i < anz; i++ )
  160. {
  161. online->addPunkt( 0, i, stOnline->get( i ) );
  162. online->addPunkt( 1, i, stGespielt->get( i ) );
  163. spiele->addPunkt( 0, i, anzSpiele->get( i ) );
  164. spiele->addPunkt( 1, i, anzGewonnen->get( i ) );
  165. }
  166. }
  167. else
  168. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Aktivität des Spielers konnte nicht ermittelt werden." ), new Text( "Ok" ) );
  169. datum->release();
  170. stOnline->release();
  171. stGespielt->release();
  172. anzSpiele->release();
  173. anzGewonnen->release();
  174. animation &= ~0x4;
  175. status = 2;
  176. run = 0;
  177. }
  178. void AccountAktivität::setSichtbar( bool sichtbar, bool nachRechts )
  179. {
  180. if( sichtbar )
  181. {
  182. if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) )
  183. {
  184. if( nachRechts )
  185. aktivitätF->setPosition( -810, 40 );
  186. else
  187. aktivitätF->setPosition( 810, 40 );
  188. }
  189. animation |= 0x1;
  190. }
  191. else
  192. animation &= ~0x1;
  193. if( nachRechts )
  194. animation |= 0x2;
  195. else
  196. animation &= ~0x2;
  197. }
  198. bool AccountAktivität::tick( double zeit )
  199. {
  200. rend |= aktivitätF->tick( zeit );
  201. tickVal += zeit;
  202. int valA = (int)( tickVal * 150 );
  203. int valB = (int)( tickVal * 500 );
  204. tickVal -= valA / 150.0;
  205. if( valA )
  206. {
  207. if( ( animation | 0x4 ) == animation && alpha )
  208. {
  209. if( alpha - valA <= 0 )
  210. alpha = 0;
  211. else
  212. alpha -= valA;
  213. rend = 1;
  214. if( !alpha )
  215. {
  216. reset();
  217. start();
  218. }
  219. }
  220. if( ( animation | 0x4 ) != animation && alpha != 255 )
  221. {
  222. if( alpha + valA >= 255 )
  223. alpha = 255;
  224. else
  225. alpha += valA;
  226. rend = 1;
  227. }
  228. }
  229. if( valB )
  230. {
  231. if( ( animation | 0x1 ) == animation )
  232. { // Sichtbar
  233. if( ( animation | 0x2 ) == animation )
  234. { // Nach Rechts
  235. if( aktivitätF->getX() != 10 )
  236. {
  237. if( aktivitätF->getX() + valB > 10 )
  238. aktivitätF->setPosition( 10, aktivitätF->getY() );
  239. else
  240. aktivitätF->setPosition( aktivitätF->getX() + valB, aktivitätF->getY() );
  241. rend = 1;
  242. }
  243. }
  244. else
  245. { // Nach Links
  246. if( aktivitätF->getX() != 10 )
  247. {
  248. if( aktivitätF->getX() - valB < 10 )
  249. aktivitätF->setPosition( 10, aktivitätF->getY() );
  250. else
  251. aktivitätF->setPosition( aktivitätF->getX() - valB, aktivitätF->getY() );
  252. rend = 1;
  253. }
  254. }
  255. }
  256. else
  257. { // Unsichtbar
  258. if( ( animation | 0x2 ) == animation )
  259. { // Nach Rechts
  260. if( aktivitätF->getX() != 810 )
  261. {
  262. if( aktivitätF->getX() + valB > 810 )
  263. aktivitätF->setPosition( 810, aktivitätF->getY() );
  264. else
  265. aktivitätF->setPosition( aktivitätF->getX() + valB, aktivitätF->getY() );
  266. rend = 1;
  267. }
  268. }
  269. else
  270. { // Nach Links
  271. if( aktivitätF->getX() != -810 )
  272. {
  273. if( aktivitätF->getX() - valB < -810 )
  274. aktivitätF->setPosition( -810, aktivitätF->getY() );
  275. else
  276. aktivitätF->setPosition( aktivitätF->getX() - valB, aktivitätF->getY() );
  277. rend = 1;
  278. }
  279. }
  280. }
  281. }
  282. bool ret = rend;
  283. rend = 0;
  284. return ret;
  285. }
  286. void AccountAktivität::render( Bild &zRObj )
  287. {
  288. zRObj.setAlpha( alpha );
  289. aktivitätF->render( zRObj );
  290. zRObj.releaseAlpha();
  291. }
  292. // constant
  293. int AccountAktivität::getStatus() const
  294. {
  295. return status;
  296. }
  297. // Reference Counting
  298. AccountAktivität *AccountAktivität::getThis()
  299. {
  300. ref++;
  301. return this;
  302. }
  303. AccountAktivität *AccountAktivität::release()
  304. {
  305. ref--;
  306. if( !ref )
  307. delete this;
  308. return 0;
  309. }