#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; }