123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #include "KartenLeser.h"
- #include <Datei.h>
- #include "Karte.h"
- // Inhalt der KartenLeser Klasse aus KartenLeser.h
- // Kontruktor
- KartenLeser::KartenLeser( int karteId, SSDatenbankV *db, char *tmpPfad )
- {
- this->karteId = karteId;
- this->db = db;
- pfad = new Text( tmpPfad );
- ref = 1;
- }
- // Destruktor
- KartenLeser::~KartenLeser()
- {
- if( db )
- db->release();
- if( pfad )
- pfad->release();
- }
- // nicht constant
- bool KartenLeser::ladeSpielerTeamStruktur( SpielerTeamStruktur *zSts )
- {
- if( !pfad )
- return 0;
- Text *pf = new Text( pfad->getText() );
- pf->append( "sts.ltgd" );
- Datei *datei = new Datei();
- datei->setDatei( pf );
- if( !datei->existiert() || datei->istOrdner() )
- {
- datei->release();
- return 0;
- }
- datei->open( Datei::Style::lesen );
- datei->lese( (char *)&zSts->spielerAnzahl, 4 );
- datei->lese( (char *)&zSts->teamAnzahl, 4 );
- if( zSts->spielerFarbe )
- zSts->spielerFarbe->release();
- zSts->spielerFarbe = new Array< int >();
- for( int i = 0; i < zSts->spielerAnzahl; i++ )
- {
- int farbe = 0;
- datei->lese( (char *)&farbe, 4 );
- zSts->spielerFarbe->set( farbe, i );
- }
- if( zSts->teamFarbe )
- zSts->teamFarbe->release();
- zSts->teamFarbe = new Array< int >();
- for( int i = 0; i < zSts->teamAnzahl; i++ )
- {
- int farbe = 0;
- datei->lese( (char *)&farbe, 4 );
- zSts->teamFarbe->set( farbe, i );
- }
- if( zSts->teamName )
- zSts->teamName->release();
- zSts->teamName = new RCArray< Text >();
- for( int i = 0; i < zSts->teamAnzahl; i++ )
- {
- char len = 0;
- datei->lese( &len, 1 );
- char *txt = new char[ len + 1 ];
- txt[ (int)len ] = 0;
- datei->lese( txt, len );
- Text *name = new Text( txt );
- delete[] txt;
- zSts->teamName->set( name, i );
- }
- if( zSts->teamSize )
- zSts->teamSize->release();
- zSts->teamSize = new Array< int >();
- for( int i = 0; i < zSts->teamAnzahl; i++ )
- {
- int size = 0;
- datei->lese( (char *)&size, 4 );
- zSts->teamSize->set( size, i );
- }
- datei->close();
- datei->release();
- return 1;
- }
- Karte *KartenLeser::ladeKarte( SpielerTeamStruktur *zSts )
- {
- if( !pfad )
- return 0;
- Text *pf = new Text( pfad->getText() );
- pf->append( "data.map" );
- Datei *datei = new Datei();
- datei->setDatei( pf );
- if( !datei->existiert() || datei->istOrdner() )
- {
- datei->release();
- return 0;
- }
- datei->open( Datei::Style::lesen );
- Karte *ret = new Karte();
- ret->ladeDaten( datei, db, zSts, pfad->getText(), karteId );
- datei->close();
- datei->release();
- return ret;
- }
- // constant
- int KartenLeser::getKarteId() const
- {
- return karteId;
- }
- Text *KartenLeser::getPfad() const
- {
- return pfad ? dynamic_cast<Text *>( pfad->getThis() ) : 0;
- }
- Text *KartenLeser::zPfad() const
- {
- return pfad;
- }
- // Reference Counting
- KartenLeser *KartenLeser::getThis()
- {
- ref++;
- return this;
- }
- KartenLeser *KartenLeser::release()
- {
- ref--;
- if( !ref )
- delete this;
- return 0;
- }
|