AccountAktivität.cpp 8.4 KB

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