Karte.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #include "Karte.h"
  2. // Inhalt der Karte Klasse aus Karte.h
  3. // Konstruktor
  4. Karte::Karte()
  5. : ReferenceCounter()
  6. {
  7. size = Vec2< int >(0, 0);
  8. ressources = new RCArray< RessourceStr >();
  9. objekte = new RCArray< ObjektStr >();
  10. spieler = new RCArray< SpielerStr >();
  11. teams = new RCArray< TeamStr >();
  12. sts = 0;
  13. }
  14. // Destruktor
  15. Karte::~Karte()
  16. {
  17. ressources->release();
  18. objekte->release();
  19. spieler->release();
  20. teams->release();
  21. if (sts)
  22. sts->release();
  23. }
  24. // nicht constant
  25. void Karte::ladeDaten(Datei* zDatei, SSDatenbankV* zDb, SpielerTeamStruktur* zSts, const char* tmpPfad, int kId)
  26. {
  27. sts = zSts->getThis();
  28. int ressourceAnz = 0;
  29. zDatei->lese((char*)&ressourceAnz, 4);
  30. for (int i = 0; i < ressourceAnz; i++)
  31. ressources->add(new RessourceStr(zDatei, zDb, tmpPfad, kId));
  32. zDatei->lese((char*)&size.x, 4);
  33. zDatei->lese((char*)&size.y, 4);
  34. int objektAnzahl = 0;
  35. zDatei->lese((char*)&objektAnzahl, 4);
  36. for (int i = 0; i < objektAnzahl; i++)
  37. objekte->add(new ObjektStr(zDatei));
  38. for (int i = 0; i < zSts->spielerAnzahl; i++)
  39. spieler->add(new SpielerStr(zDatei));
  40. for (int i = 0; i < zSts->teamAnzahl; i++)
  41. teams->add(new TeamStr(zDatei));
  42. }
  43. // constant
  44. Vec2< int > Karte::getSize() const
  45. {
  46. return size;
  47. }
  48. Spieler* Karte::createSpieler(int sNum) const
  49. {
  50. if (!sts || sNum < 0 || sNum >= sts->spielerAnzahl)
  51. return 0;
  52. for (auto s : *spieler)
  53. {
  54. if (s->id == sNum + 1)
  55. {
  56. Spieler* ret = new Spieler(s);
  57. for (auto i : *ressources)
  58. {
  59. if (i->getId() == s->m2d)
  60. ret->setModelData(dynamic_cast<Model2DData*>(i->zReccourceM2()->getThis()));
  61. }
  62. ret->setSpielerFarbe(sts->spielerFarbe->hat(sNum) ? sts->spielerFarbe->get(sNum) : 0);
  63. return ret;
  64. }
  65. }
  66. return 0;
  67. }
  68. Team* Karte::createTeam(int tNum) const
  69. {
  70. if (!sts || tNum < 0 || tNum >= sts->teamAnzahl)
  71. return 0;
  72. Team* ret = 0;
  73. for (auto t : *teams)
  74. if (t->id == tNum + 1)
  75. ret = new Team(sts->teamFarbe->get(tNum), sts->teamName->z(tNum)->getText(), t);
  76. return ret;
  77. }
  78. SpielObjekt* Karte::createObjekt(int oNum) const
  79. {
  80. if (oNum <= 0)
  81. return 0;
  82. for (auto o : *objekte)
  83. {
  84. if (o->id == oNum)
  85. {
  86. SpielObjekt* ret = new SpielObjekt(o);
  87. for (auto i : *ressources)
  88. {
  89. if (i->getId() == o->m2d)
  90. ret->setModel(dynamic_cast<Model2DData*>(i->zReccourceM2()->getThis()));
  91. }
  92. return ret;
  93. }
  94. }
  95. return 0;
  96. }
  97. Iterator< ObjektStr* > Karte::getObjekte() const
  98. {
  99. return objekte->begin();
  100. }
  101. int Karte::getMaxTeamAnzahl() const
  102. {
  103. return sts ? sts->teamAnzahl : 0;
  104. }
  105. int Karte::getMaxSpielerAnzahl() const
  106. {
  107. return sts ? sts->spielerAnzahl : 0;
  108. }
  109. int Karte::getObjektAnzahl() const
  110. {
  111. return objekte->getEintragAnzahl();
  112. }