AccountAktivität.cpp 10.0 KB

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