KartenLeser.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #include "KartenLeser.h"
  2. #include <Datei.h>
  3. #include "Karte.h"
  4. // Inhalt der KartenLeser Klasse aus KartenLeser.h
  5. // Kontruktor
  6. KartenLeser::KartenLeser(int karteId, SSDatenbankV* db, const char* tmpPfad)
  7. {
  8. this->karteId = karteId;
  9. this->db = db;
  10. pfad = new Text(tmpPfad);
  11. ref = 1;
  12. }
  13. // Destruktor
  14. KartenLeser::~KartenLeser()
  15. {
  16. if (db)
  17. db->release();
  18. if (pfad)
  19. pfad->release();
  20. }
  21. // nicht constant
  22. bool KartenLeser::ladeSpielerTeamStruktur(SpielerTeamStruktur* zSts)
  23. {
  24. if (!pfad)
  25. return 0;
  26. Text* pf = new Text(pfad->getText());
  27. pf->append("sts.ltgd");
  28. Datei* datei = new Datei();
  29. datei->setDatei(pf);
  30. if (!datei->existiert() || datei->istOrdner())
  31. {
  32. datei->release();
  33. return 0;
  34. }
  35. datei->open(Datei::Style::lesen);
  36. datei->lese((char*)&zSts->spielerAnzahl, 4);
  37. datei->lese((char*)&zSts->teamAnzahl, 4);
  38. if (zSts->spielerFarbe)
  39. zSts->spielerFarbe->release();
  40. zSts->spielerFarbe = new Array< int >();
  41. for (int i = 0; i < zSts->spielerAnzahl; i++)
  42. {
  43. int farbe = 0;
  44. datei->lese((char*)&farbe, 4);
  45. zSts->spielerFarbe->set(farbe, i);
  46. }
  47. if (zSts->teamFarbe)
  48. zSts->teamFarbe->release();
  49. zSts->teamFarbe = new Array< int >();
  50. for (int i = 0; i < zSts->teamAnzahl; i++)
  51. {
  52. int farbe = 0;
  53. datei->lese((char*)&farbe, 4);
  54. zSts->teamFarbe->set(farbe, i);
  55. }
  56. if (zSts->teamName)
  57. zSts->teamName->release();
  58. zSts->teamName = new RCArray< Text >();
  59. for (int i = 0; i < zSts->teamAnzahl; i++)
  60. {
  61. char len = 0;
  62. datei->lese(&len, 1);
  63. char* txt = new char[len + 1];
  64. txt[(int)len] = 0;
  65. datei->lese(txt, len);
  66. Text* name = new Text(txt);
  67. delete[] txt;
  68. zSts->teamName->set(name, i);
  69. }
  70. if (zSts->teamSize)
  71. zSts->teamSize->release();
  72. zSts->teamSize = new Array< int >();
  73. for (int i = 0; i < zSts->teamAnzahl; i++)
  74. {
  75. int size = 0;
  76. datei->lese((char*)&size, 4);
  77. zSts->teamSize->set(size, i);
  78. }
  79. datei->close();
  80. datei->release();
  81. return 1;
  82. }
  83. Karte* KartenLeser::ladeKarte(SpielerTeamStruktur* zSts)
  84. {
  85. if (!pfad)
  86. return 0;
  87. Text* pf = new Text(pfad->getText());
  88. pf->append("data.map");
  89. Datei* datei = new Datei();
  90. datei->setDatei(pf);
  91. if (!datei->existiert() || datei->istOrdner())
  92. {
  93. datei->release();
  94. return 0;
  95. }
  96. datei->open(Datei::Style::lesen);
  97. Karte* ret = new Karte();
  98. ret->ladeDaten(datei, db, zSts, pfad->getText(), karteId);
  99. datei->close();
  100. datei->release();
  101. return ret;
  102. }
  103. // constant
  104. int KartenLeser::getKarteId() const
  105. {
  106. return karteId;
  107. }
  108. Text* KartenLeser::getPfad() const
  109. {
  110. return pfad ? dynamic_cast<Text*>(pfad->getThis()) : 0;
  111. }
  112. Text* KartenLeser::zPfad() const
  113. {
  114. return pfad;
  115. }
  116. // Reference Counting
  117. KartenLeser* KartenLeser::getThis()
  118. {
  119. ref++;
  120. return this;
  121. }
  122. KartenLeser* KartenLeser::release()
  123. {
  124. ref--;
  125. if (!ref)
  126. delete this;
  127. return 0;
  128. }