AccountAktivität.cpp 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  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. 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. run = 0;
  164. }
  165. void AccountAktivität::setSichtbar( bool sichtbar, bool nachRechts )
  166. {
  167. if( sichtbar )
  168. {
  169. if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) )
  170. {
  171. if( nachRechts )
  172. aktivitätF->setPosition( -810, 40 );
  173. else
  174. aktivitätF->setPosition( 810, 40 );
  175. }
  176. animation |= 0x1;
  177. }
  178. else
  179. animation &= ~0x1;
  180. if( nachRechts )
  181. animation |= 0x2;
  182. else
  183. animation &= ~0x2;
  184. }
  185. bool AccountAktivität::tick( double zeit )
  186. {
  187. rend |= aktivitätF->tick( zeit );
  188. tickVal += zeit;
  189. int valA = (int)( tickVal * 150 );
  190. int valB = (int)( tickVal * 500 );
  191. tickVal -= valA / 150.0;
  192. if( valA )
  193. {
  194. if( ( animation | 0x4 ) == animation && alpha )
  195. {
  196. if( alpha - valA <= 0 )
  197. alpha = 0;
  198. else
  199. alpha -= valA;
  200. rend = 1;
  201. if( !alpha )
  202. {
  203. reset();
  204. start();
  205. }
  206. }
  207. if( ( animation | 0x4 ) != animation && alpha != 255 )
  208. {
  209. if( alpha + valA >= 255 )
  210. alpha = 255;
  211. else
  212. alpha += valA;
  213. rend = 1;
  214. }
  215. }
  216. if( valB )
  217. {
  218. if( ( animation | 0x1 ) == animation )
  219. { // Sichtbar
  220. if( ( animation | 0x2 ) == animation )
  221. { // Nach Rechts
  222. if( aktivitätF->getX() != 10 )
  223. {
  224. if( aktivitätF->getX() + valB > 10 )
  225. aktivitätF->setPosition( 10, aktivitätF->getY() );
  226. else
  227. aktivitätF->setPosition( aktivitätF->getX() + valB, aktivitätF->getY() );
  228. rend = 1;
  229. }
  230. }
  231. else
  232. { // Nach Links
  233. if( aktivitätF->getX() != 10 )
  234. {
  235. if( aktivitätF->getX() - valB < 10 )
  236. aktivitätF->setPosition( 10, aktivitätF->getY() );
  237. else
  238. aktivitätF->setPosition( aktivitätF->getX() - valB, aktivitätF->getY() );
  239. rend = 1;
  240. }
  241. }
  242. }
  243. else
  244. { // Unsichtbar
  245. if( ( animation | 0x2 ) == animation )
  246. { // Nach Rechts
  247. if( aktivitätF->getX() != 810 )
  248. {
  249. if( aktivitätF->getX() + valB > 810 )
  250. aktivitätF->setPosition( 810, aktivitätF->getY() );
  251. else
  252. aktivitätF->setPosition( aktivitätF->getX() + valB, aktivitätF->getY() );
  253. rend = 1;
  254. }
  255. }
  256. else
  257. { // Nach Links
  258. if( aktivitätF->getX() != -810 )
  259. {
  260. if( aktivitätF->getX() - valB < -810 )
  261. aktivitätF->setPosition( -810, aktivitätF->getY() );
  262. else
  263. aktivitätF->setPosition( aktivitätF->getX() - valB, aktivitätF->getY() );
  264. rend = 1;
  265. }
  266. }
  267. }
  268. }
  269. bool ret = rend;
  270. rend = 0;
  271. return ret;
  272. }
  273. void AccountAktivität::render( Bild &zRObj )
  274. {
  275. zRObj.setAlpha( alpha );
  276. aktivitätF->render( zRObj );
  277. zRObj.releaseAlpha();
  278. }
  279. // constant
  280. int AccountAktivität::getStatus() const
  281. {
  282. return status;
  283. }
  284. // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
  285. Thread *AccountAktivität::release()
  286. {
  287. if( ref == 2 && run )
  288. {
  289. warteAufThread( 1000 );
  290. ende();
  291. }
  292. return Thread::release();
  293. }