#include "Karte.h" // Inhalt der Karte Klasse aus Karte.h // Konstruktor Karte::Karte() : ReferenceCounter() { size = Vec2< int >( 0, 0 ); ressources = new RCArray< RessourceStr >(); objekte = new RCArray< ObjektStr >(); spieler = new RCArray< SpielerStr >(); teams = new RCArray< TeamStr >(); sts = 0; } // 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 ) { if( s->id == sNum + 1 ) { Spieler* ret = new Spieler( s ); for( auto i : *ressources ) { if( i->getId() == s->m2d ) ret->setModelData( dynamic_cast(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 ) 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 ) return 0; for( auto o : *objekte ) { if( o->id == oNum ) { SpielObjekt* ret = new SpielObjekt( o ); for( auto i : *ressources ) { if( i->getId() == o->m2d ) ret->setModel( dynamic_cast(i->zReccourceM2()->getThis()) ); } return ret; } } return 0; } Iterator< ObjektStr* > Karte::getObjekte() const { return objekte->begin(); } 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(); }