#include "HistorieStatistik.h" #include #include #include #include "../Initialisierung/Initialisierung.h" #include #include #include "StatistikLeser.h" // Inhalt der HistorieStatistik Klasse aus HistorieStatistik.h // Konstruktor HistorieStatistik::HistorieStatistik() { schrift = 0; screen = 0; gss = new Array< SSDGesamtSpieler* >(); gts = new Array< SSDGesamtTeam* >(); rs = new Array< SSDRunde* >(); runde = 0; tabelle = 0; fertig = 0; geladen = 0; geschlossen = 0; alpha = 0; sichtbar = 0; tickVal = 0; rend = 0; ref = 1; } // Destruktor HistorieStatistik::~HistorieStatistik() { if( schrift ) schrift->release(); if( !geladen ) { gss->release(); gts->release(); rs->release(); } else { int anz = gss->getEintragAnzahl(); for( int i = 0; i < anz; i++ ) { if( gss->hat( i ) ) delete gss->get( i ); } gss->release(); anz = gts->getEintragAnzahl(); for( int i = 0; i < anz; i++ ) { if( gts->hat( i ) ) delete gts->get( i ); } gts->release(); anz = rs->getEintragAnzahl(); for( int i = 0; i < anz; i++ ) { if( rs->hat( i ) ) { int anz2 = rs->get( i )->spieler.getEintragAnzahl(); for( int j = 0; j < anz2; j++ ) { if( rs->get( i )->spieler.hat( j ) ) delete rs->get( i )->spieler.get( j ); } anz2 = rs->get( i )->teams.getEintragAnzahl(); for( int j = 0; j < anz2; j++ ) { if( rs->get( i )->teams.hat( j ) ) delete rs->get( i )->teams.get( j ); } delete rs->get( i ); } } rs->release(); } if( runde ) runde->release(); if( tabelle ) tabelle->release(); if( fertig ) fertig->release(); } // nicht constant void HistorieStatistik::setSchrift( Schrift *schrift ) { if( this->schrift ) this->schrift->release(); this->schrift = schrift; } void HistorieStatistik::setBildschirm( Bildschirm *zScreen ) { screen = zScreen; } void HistorieStatistik::ladeDaten( int spielId ) { if( geladen ) return; StatistikLeser *reader = new StatistikLeser( spielId ); for( int i = 0; i < reader->getSpielerAnzahl(); i++ ) gss->set( reader->getSSDGS( i ), i ); for( int i = 0; i < reader->getTeamAnzahl(); i++ ) gts->set( reader->getSSDGT( i ), i ); for( int i = 0; i < reader->getRundenAnzahl(); i++ ) rs->set( reader->getSSDR( i ), i ); reader->release(); tabelle = new StatistikTabelle( gss->getThis(), gts->getThis(), rs->getThis(), schrift, screen, 1 ); runde = new StatistikRunde( schrift, rs->getThis(), 1 ); fertig = initKnopf( 600, 390, 100, 20, schrift, Knopf::Style::Sichtbar, "Zurück" ); geladen = 1; } void HistorieStatistik::setSichtbar( bool sichtbar ) { this->sichtbar = sichtbar; } void HistorieStatistik::doPublicMausEreignis( MausEreignis &me ) { if( !geladen ) return; tabelle->doPublicMausEreignis( me ); runde->doPublicMausEreignis( me ); bool vera = me.verarbeitet; fertig->doPublicMausEreignis( me ); if( !vera && me.verarbeitet && me.id == ME_RLinks ) geschlossen = 1; } void HistorieStatistik::doTastaturEreignis( TastaturEreignis &te ) { } bool HistorieStatistik::tick( double tickVal ) { if( !geladen ) return 0; runde->setRunde( tabelle->getRunde() ); rend |= tabelle->tick( tickVal ); rend |= runde->tick( tickVal ); rend |= fertig->tick( tickVal ); this->tickVal += tickVal * 150; int val = ( int )this->tickVal; this->tickVal -= val; if( val ) { if( sichtbar && alpha != 255 ) { if( alpha + val > 255 ) alpha = 255; else alpha += val; rend = 1; } if( !sichtbar && alpha ) { if( alpha - val < 0 ) alpha = 0; else alpha -= val; rend = 1; } } bool ret = rend; rend = 0; return ret; } void HistorieStatistik::render( Bild &zRObj ) { if( !geladen ) return; zRObj.setAlpha( alpha ); tabelle->render( zRObj ); runde->render( zRObj ); fertig->render( zRObj ); zRObj.releaseAlpha(); } // constant bool HistorieStatistik::istNochSichtbar() const { return alpha != 0 || sichtbar; } bool HistorieStatistik::wurdeGeschlossen() const { return geschlossen; } // Reference Counting AccountHistorieStatistikV *HistorieStatistik::getThis() { ref++; return this; } AccountHistorieStatistikV *HistorieStatistik::release() { ref--; if( !ref ) delete this; return 0; }