123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #include "KartenLeser.h"
- #include <Datei.h>
- #include "Karte.h"
- // Inhalt der KartenLeser Klasse aus KartenLeser.h
- // Kontruktor
- KartenLeser::KartenLeser(int karteId, SSDatenbankV* db, const 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;
- }
|