123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- #include "HistorieStatistik.h"
- #include <Knopf.h>
- #include <MausEreignis.h>
- #include <Bildschirm.h>
- #include "../Initialisierung/Initialisierung.h"
- #include <InitDatei.h>
- #include <DateiSystem.h>
- #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;
- }
|