AccountAktivität.cpp 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  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 = infoClient->getSpielerName( accId );
  98. if( name )
  99. {
  100. name->insert( 0, "Aktivität von " );
  101. aktivitätF->setTitel( *name );
  102. name->release();
  103. }
  104. Array< KSGClient::AccountActivityInfo > activity;
  105. if( infoClient->getSpielerAktivität( accId, &activity ) )
  106. {
  107. int anz = activity.getEintragAnzahl();
  108. double maxO = 0;
  109. int maxS = 0;
  110. for( int i = 0; i < anz; i++ )
  111. {
  112. KSGClient::AccountActivityInfo info = activity.get( i );
  113. if( info.stOnline > maxO )
  114. maxO = info.stOnline;
  115. if( info.stGespielt > maxO )
  116. maxO = info.stGespielt;
  117. if( info.anzSpiele > maxS )
  118. maxS = info.anzSpiele;
  119. if( info.anzGewonnen > maxS )
  120. maxS = info.anzGewonnen;
  121. }
  122. maxO += ( maxO / 100 ) * 10;
  123. maxS++;
  124. online->addVIntervallText( 0, "0" );
  125. online->addVIntervallText( (int)maxO + 1, Text() += (int)( maxO + 1 ) );
  126. spiele->addVIntervallText( 0, "0" );
  127. spiele->addVIntervallText( (int)maxS + 1, Text() += (int)( maxS + 1 ) );
  128. online->addHIntervallText( 0, activity.get( 0 ).datum );
  129. online->addHIntervallText( anz - 1, activity.get( anz - 1 ).datum );
  130. spiele->addHIntervallText( 0, activity.get( 0 ).datum );
  131. spiele->addHIntervallText( anz - 1, activity.get( anz - 1 ).datum );
  132. DiagWert *w = new DiagWert();
  133. w->farbe = 0xFF00FFFF;
  134. w->hintergrund = 0xFF205050;
  135. w->name->setText( "Zeit Online" );
  136. w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
  137. online->addWert( w );
  138. w = new DiagWert();
  139. w->farbe = 0xFF00FF00;
  140. w->hintergrund = 0xFF205020;
  141. w->name->setText( "Zeit im Spiel" );
  142. w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
  143. online->addWert( w );
  144. w = new DiagWert();
  145. w->farbe = 0xFF00FFFF;
  146. w->hintergrund = 0xFF205050;
  147. w->name->setText( "Spiele am Tag" );
  148. w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
  149. spiele->addWert( w );
  150. w = new DiagWert();
  151. w->farbe = 0xFF00FF00;
  152. w->hintergrund = 0xFF205020;
  153. w->name->setText( "Gewonnene Spiele" );
  154. w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
  155. spiele->addWert( w );
  156. for( int i = 0; i < anz; i++ )
  157. {
  158. KSGClient::AccountActivityInfo info = activity.get( i );
  159. online->addPunkt( 0, i, info.stOnline );
  160. online->addPunkt( 1, i, info.stGespielt );
  161. spiele->addPunkt( 0, i, info.anzSpiele );
  162. spiele->addPunkt( 1, i, info.anzGewonnen );
  163. }
  164. }
  165. else
  166. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Aktivität des Spielers konnte nicht ermittelt werden." ), new Text( "Ok" ) );
  167. animation &= ~0x4;
  168. status = 2;
  169. run = 0;
  170. }
  171. void AccountAktivität::setSichtbar( bool sichtbar, bool nachRechts )
  172. {
  173. if( sichtbar )
  174. {
  175. if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) )
  176. {
  177. if( nachRechts )
  178. aktivitätF->setPosition( -810, 40 );
  179. else
  180. aktivitätF->setPosition( 810, 40 );
  181. }
  182. animation |= 0x1;
  183. }
  184. else
  185. animation &= ~0x1;
  186. if( nachRechts )
  187. animation |= 0x2;
  188. else
  189. animation &= ~0x2;
  190. }
  191. bool AccountAktivität::tick( double zeit )
  192. {
  193. rend |= aktivitätF->tick( zeit );
  194. tickVal += zeit;
  195. int valA = (int)( tickVal * 150 );
  196. int valB = (int)( tickVal * 500 );
  197. tickVal -= valA / 150.0;
  198. if( valA )
  199. {
  200. if( ( animation | 0x4 ) == animation && alpha )
  201. {
  202. if( alpha - valA <= 0 )
  203. alpha = 0;
  204. else
  205. alpha -= valA;
  206. rend = 1;
  207. if( !alpha )
  208. {
  209. reset();
  210. start();
  211. }
  212. }
  213. if( ( animation | 0x4 ) != animation && alpha != 255 )
  214. {
  215. if( alpha + valA >= 255 )
  216. alpha = 255;
  217. else
  218. alpha += valA;
  219. rend = 1;
  220. }
  221. }
  222. if( valB )
  223. {
  224. if( ( animation | 0x1 ) == animation )
  225. { // Sichtbar
  226. if( ( animation | 0x2 ) == animation )
  227. { // Nach Rechts
  228. if( aktivitätF->getX() != 10 )
  229. {
  230. if( aktivitätF->getX() + valB > 10 )
  231. aktivitätF->setPosition( 10, aktivitätF->getY() );
  232. else
  233. aktivitätF->setPosition( aktivitätF->getX() + valB, aktivitätF->getY() );
  234. rend = 1;
  235. }
  236. }
  237. else
  238. { // Nach Links
  239. if( aktivitätF->getX() != 10 )
  240. {
  241. if( aktivitätF->getX() - valB < 10 )
  242. aktivitätF->setPosition( 10, aktivitätF->getY() );
  243. else
  244. aktivitätF->setPosition( aktivitätF->getX() - valB, aktivitätF->getY() );
  245. rend = 1;
  246. }
  247. }
  248. }
  249. else
  250. { // Unsichtbar
  251. if( ( animation | 0x2 ) == animation )
  252. { // Nach Rechts
  253. if( aktivitätF->getX() != 810 )
  254. {
  255. if( aktivitätF->getX() + valB > 810 )
  256. aktivitätF->setPosition( 810, aktivitätF->getY() );
  257. else
  258. aktivitätF->setPosition( aktivitätF->getX() + valB, aktivitätF->getY() );
  259. rend = 1;
  260. }
  261. }
  262. else
  263. { // Nach Links
  264. if( aktivitätF->getX() != -810 )
  265. {
  266. if( aktivitätF->getX() - valB < -810 )
  267. aktivitätF->setPosition( -810, aktivitätF->getY() );
  268. else
  269. aktivitätF->setPosition( aktivitätF->getX() - valB, aktivitätF->getY() );
  270. rend = 1;
  271. }
  272. }
  273. }
  274. }
  275. bool ret = rend;
  276. rend = 0;
  277. return ret;
  278. }
  279. void AccountAktivität::render( Bild &zRObj )
  280. {
  281. zRObj.setAlpha( alpha );
  282. aktivitätF->render( zRObj );
  283. zRObj.releaseAlpha();
  284. }
  285. // constant
  286. int AccountAktivität::getStatus() const
  287. {
  288. return status;
  289. }
  290. // Reference Counting
  291. AccountAktivität *AccountAktivität::getThis()
  292. {
  293. ref++;
  294. return this;
  295. }
  296. AccountAktivität *AccountAktivität::release()
  297. {
  298. ref--;
  299. if( !ref )
  300. delete this;
  301. return 0;
  302. }