#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, const 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(); }