123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #include "Karte.h"
- // Inhalt der Karte Klasse aus Karte.h
- // Konstruktor
- Karte::Karte()
- {
- size = Vec2< int >( 0, 0 );
- ressources = new RCArray< RessourceStr >();
- objekte = new RCArray< ObjektStr >();
- spieler = new RCArray< SpielerStr >();
- teams = new RCArray< TeamStr >();
- sts = 0;
- ref = 1;
- }
- // Destruktor
- Karte::~Karte()
- {
- ressources->release();
- objekte->release();
- spieler->release();
- teams->release();
- if( sts )
- sts->release();
- }
- // nicht constant
- void Karte::ladeDaten( Datei *zDatei, SSDatenbankV *zDb, SpielerTeamStruktur *zSts, char *tmpPfad, int kId )
- {
- sts = zSts->getThis();
- int ressourceAnz = 0;
- zDatei->lese( (char*)&ressourceAnz, 4 );
- for( int i = 0; i < ressourceAnz; i++ )
- ressources->add( new RessourceStr( zDatei, zDb, tmpPfad, kId ) );
- zDatei->lese( (char*)&size.x, 4 );
- zDatei->lese( (char*)&size.y, 4 );
- int objektAnzahl = 0;
- zDatei->lese( (char*)&objektAnzahl, 4 );
- for( int i = 0; i < objektAnzahl; i++ )
- objekte->add( new ObjektStr( zDatei ) );
- for( int i = 0; i < zSts->spielerAnzahl; i++ )
- spieler->add( new SpielerStr( zDatei ) );
- for( int i = 0; i < zSts->teamAnzahl; i++ )
- teams->add( new TeamStr( zDatei ) );
- }
- // constant
- Vec2< int > Karte::getSize() const
- {
- return size;
- }
- Spieler *Karte::createSpieler( int sNum ) const
- {
- if( !sts || sNum < 0 || sNum >= sts->spielerAnzahl )
- return 0;
- for( auto s = spieler->getIterator(); s; s++ )
- {
- if( s->id == sNum + 1 )
- {
- Spieler *ret = new Spieler( s );
- for( auto i = ressources->getIterator(); i && i._; i++ )
- {
- if( i->getId() == s->m2d )
- ret->setModelData( i->zReccourceM2()->getThis() );
- }
- ret->setSpielerFarbe( sts->spielerFarbe->hat( sNum ) ? sts->spielerFarbe->get( sNum ) : 0 );
- return ret;
- }
- }
- return 0;
- }
- Team *Karte::createTeam( int tNum ) const
- {
- if( !sts || tNum < 0 || tNum >= sts->teamAnzahl )
- return 0;
- Team *ret = 0;
- for( auto t = teams->getIterator(); t; t++ )
- if( t->id == tNum + 1 )
- ret = new Team( sts->teamFarbe->get( tNum ), sts->teamName->z( tNum )->getText(), t );
- return ret;
- }
- SpielObjekt *Karte::createObjekt( int oNum ) const
- {
- if( oNum < 0 || oNum > objekte->getEintragAnzahl() )
- return 0;
- for( auto o = objekte->getIterator(); o; o++ )
- {
- if( o->id == oNum + 1 )
- {
- SpielObjekt *ret = new SpielObjekt( o );
- for( auto i = ressources->getIterator(); i && i._; i++ )
- {
- if( i->getId() == o->m2d )
- ret->setModel( i->zReccourceM2()->getThis() );
- }
- return ret;
- }
- }
- return 0;
- }
- int Karte::getMaxTeamAnzahl() const
- {
- return sts ? sts->teamAnzahl : 0;
- }
- int Karte::getMaxSpielerAnzahl() const
- {
- return sts ? sts->spielerAnzahl : 0;
- }
- int Karte::getObjektAnzahl() const
- {
- return objekte->getEintragAnzahl();
- }
- // Reference Counting
- Karte *Karte::getThis()
- {
- ref++;
- return this;
- }
- Karte *Karte::release()
- {
- ref--;
- if( !ref )
- delete this;
- return 0;
- }
|