#include "AccountAktivität.h" #include "../../../Global/Initialisierung.h" #include "../../../Global/Variablen.h" // Inhalt der AccountAktivität Klasse aus AccountAktivität.h // Konstruktor AccountAktivität::AccountAktivität() : Thread(), aktivitätF( initFenster( 810, 40, 780, 450, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Rahmen, "Aktivität von " ) ), online( initLinienDiagramm( 10, 10, 760, 200, LDiag::Style::DatenRahmen, 0 ) ), spiele( initLinienDiagramm( 10, 220, 760, 200, LDiag::Style::DatenRahmen, 0 ) ), status( 0 ), accId( 0 ), animation( 0 ), alpha( 255 ), tickVal( 0 ), rend( 0 ) { online->setHIntervallBreite( 36.8 ); spiele->setVIntervallHeight( 36.8 ); online->setDatenStyle( DiagDaten::Style::autoRaster | DiagDaten::Style::intervallTexte | DiagDaten::Style::intervalle | DiagDaten::Style::Sichtbar | DiagDaten::Style::autoIntervall ); spiele->setDatenStyle( DiagDaten::Style::autoRaster | DiagDaten::Style::intervallTexte | DiagDaten::Style::intervalle | DiagDaten::Style::Sichtbar | DiagDaten::Style::autoIntervall ); online->setRasterDicke( 1 ); spiele->setRasterDicke( 1 ); online->setRasterFarbe( 0xFF505050 ); spiele->setRasterFarbe( 0xFF505050 ); online->setHIntervallFarbe( 0xFFFFFFFF ); spiele->setHIntervallFarbe( 0xFFFFFFFF ); online->setHIntervallName( "Tage" ); spiele->setHIntervallName( "Tage" ); online->setVIntervallFarbe( 0xFFFFFFFF ); spiele->setVIntervallFarbe( 0xFFFFFFFF ); online->setVIntervallName( "Stunden" ); spiele->setVIntervallName( "Spiele" ); aktivitätF->addMember( dynamic_cast( online->getThis() ) ); aktivitätF->addMember( dynamic_cast( spiele->getThis() ) ); } // Destruktor AccountAktivität::~AccountAktivität() { aktivitätF->release(); online->release(); spiele->release(); } // nicht constant void AccountAktivität::reset() { int wAnz = online->zDiagDaten()->werte->getEintragAnzahl(); for( int i = 0; i < wAnz; i++ ) online->removeWert( 0 ); wAnz = spiele->zDiagDaten()->werte->getEintragAnzahl(); for( int i = 0; i < wAnz; i++ ) spiele->removeWert( 0 ); wAnz = online->zDiagDaten()->hIntervallWerte->getEintragAnzahl(); for( int i = 0; i < wAnz; i++ ) online->removeHIntervallText( online->zDiagDaten()->hIntervallWerte->get( 0 ) ); wAnz = spiele->zDiagDaten()->hIntervallWerte->getEintragAnzahl(); for( int i = 0; i < wAnz; i++ ) spiele->removeHIntervallText( spiele->zDiagDaten()->hIntervallWerte->get( 0 ) ); wAnz = online->zDiagDaten()->vIntervallWerte->getEintragAnzahl(); for( int i = 0; i < wAnz; i++ ) online->removeVIntervallText( online->zDiagDaten()->vIntervallWerte->get( 0 ) ); wAnz = spiele->zDiagDaten()->vIntervallWerte->getEintragAnzahl(); for( int i = 0; i < wAnz; i++ ) spiele->removeVIntervallText( spiele->zDiagDaten()->vIntervallWerte->get( 0 ) ); } void AccountAktivität::ladeStatistik( int accId ) { if( this->accId == accId ) return; this->status = 0; if( run ) { warteAufThread( 1000 ); ende(); } if( ( animation | 0x1 ) == animation ) { animation |= 0x4; this->accId = accId; this->status = 1; return; } if( this->accId ) reset(); this->accId = accId; start(); this->status = 1; } void AccountAktivität::thread() { Text *name = infoClient->getSpielerName( accId ); if( name ) { name->insert( 0, "Aktivität von " ); aktivitätF->setTitel( *name ); name->release(); } Array< KSGClient::AccountActivityInfo > activity; if( infoClient->getSpielerAktivität( accId, &activity ) ) { int anz = activity.getEintragAnzahl(); double maxO = 0; int maxS = 0; for( int i = 0; i < anz; i++ ) { KSGClient::AccountActivityInfo info = activity.get( i ); if( info.stOnline > maxO ) maxO = info.stOnline; if( info.stGespielt > maxO ) maxO = info.stGespielt; if( info.anzSpiele > maxS ) maxS = info.anzSpiele; if( info.anzGewonnen > maxS ) maxS = info.anzGewonnen; } maxO += ( maxO / 100 ) * 10; maxS++; online->addVIntervallText( 0, "0" ); online->addVIntervallText( (int)maxO + 1, Text() += (int)( maxO + 1 ) ); spiele->addVIntervallText( 0, "0" ); spiele->addVIntervallText( (int)maxS + 1, Text() += (int)( maxS + 1 ) ); online->addHIntervallText( 0, activity.get( 0 ).datum ); online->addHIntervallText( anz - 1, activity.get( anz - 1 ).datum ); spiele->addHIntervallText( 0, activity.get( 0 ).datum ); spiele->addHIntervallText( anz - 1, activity.get( anz - 1 ).datum ); DiagWert *w = new DiagWert(); w->farbe = 0xFF00FFFF; w->hintergrund = 0xFF205050; w->name->setText( "Zeit Online" ); w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund; online->addWert( w ); w = new DiagWert(); w->farbe = 0xFF00FF00; w->hintergrund = 0xFF205020; w->name->setText( "Zeit im Spiel" ); w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund; online->addWert( w ); w = new DiagWert(); w->farbe = 0xFF00FFFF; w->hintergrund = 0xFF205050; w->name->setText( "Spiele am Tag" ); w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund; spiele->addWert( w ); w = new DiagWert(); w->farbe = 0xFF00FF00; w->hintergrund = 0xFF205020; w->name->setText( "Gewonnene Spiele" ); w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund; spiele->addWert( w ); for( int i = 0; i < anz; i++ ) { KSGClient::AccountActivityInfo info = activity.get( i ); online->addPunkt( 0, i, info.stOnline ); online->addPunkt( 1, i, info.stGespielt ); spiele->addPunkt( 0, i, info.anzSpiele ); spiele->addPunkt( 1, i, info.anzGewonnen ); } } else nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Aktivität des Spielers konnte nicht ermittelt werden." ), new Text( "Ok" ) ); animation &= ~0x4; status = 2; } void AccountAktivität::setSichtbar( bool sichtbar, bool nachRechts ) { if( sichtbar ) { if( ( animation | 0x1 ) != animation || ( ( nachRechts && ( animation | 0x2 ) != animation ) || !nachRechts && ( animation | 0x2 ) == animation ) ) { if( nachRechts ) aktivitätF->setPosition( -810, 40 ); else aktivitätF->setPosition( 810, 40 ); } animation |= 0x1; } else animation &= ~0x1; if( nachRechts ) animation |= 0x2; else animation &= ~0x2; } bool AccountAktivität::tick( double zeit ) { rend |= aktivitätF->tick( zeit ); tickVal += zeit; int valA = (int)( tickVal * 150 ); int valB = (int)( tickVal * 500 ); tickVal -= valA / 150.0; if( valA ) { if( ( animation | 0x4 ) == animation && alpha ) { if( alpha - valA <= 0 ) alpha = 0; else alpha -= valA; rend = 1; if( !alpha ) { reset(); start(); } } if( ( animation | 0x4 ) != animation && alpha != 255 ) { if( alpha + valA >= 255 ) alpha = 255; else alpha += valA; rend = 1; } } if( valB ) { if( ( animation | 0x1 ) == animation ) { // Sichtbar if( ( animation | 0x2 ) == animation ) { // Nach Rechts if( aktivitätF->getX() != 10 ) { if( aktivitätF->getX() + valB > 10 ) aktivitätF->setPosition( 10, aktivitätF->getY() ); else aktivitätF->setPosition( aktivitätF->getX() + valB, aktivitätF->getY() ); rend = 1; } } else { // Nach Links if( aktivitätF->getX() != 10 ) { if( aktivitätF->getX() - valB < 10 ) aktivitätF->setPosition( 10, aktivitätF->getY() ); else aktivitätF->setPosition( aktivitätF->getX() - valB, aktivitätF->getY() ); rend = 1; } } } else { // Unsichtbar if( ( animation | 0x2 ) == animation ) { // Nach Rechts if( aktivitätF->getX() != 810 ) { if( aktivitätF->getX() + valB > 810 ) aktivitätF->setPosition( 810, aktivitätF->getY() ); else aktivitätF->setPosition( aktivitätF->getX() + valB, aktivitätF->getY() ); rend = 1; } } else { // Nach Links if( aktivitätF->getX() != -810 ) { if( aktivitätF->getX() - valB < -810 ) aktivitätF->setPosition( -810, aktivitätF->getY() ); else aktivitätF->setPosition( aktivitätF->getX() - valB, aktivitätF->getY() ); rend = 1; } } } } bool ret = rend; rend = 0; return ret; } void AccountAktivität::render( Bild &zRObj ) { zRObj.setAlpha( alpha ); aktivitätF->render( zRObj ); zRObj.releaseAlpha(); } // constant int AccountAktivität::getStatus() const { return status; }