Karte.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include "Karte.h"
  2. // Inhalt der Karte Klasse aus Karte.h
  3. // Konstruktor
  4. Karte::Karte()
  5. {
  6. size = Vec2< int >( 0, 0 );
  7. ressources = new RCArray< RessourceStr >();
  8. objekte = new RCArray< ObjektStr >();
  9. spieler = new RCArray< SpielerStr >();
  10. teams = new RCArray< TeamStr >();
  11. sts = 0;
  12. ref = 1;
  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, 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->getIterator(); s; s++ )
  53. {
  54. if( s->id == sNum + 1 )
  55. {
  56. Spieler *ret = new Spieler( s );
  57. for( auto i = ressources->getIterator(); i && i._; i++ )
  58. {
  59. if( i->getId() == s->m2d )
  60. ret->setModelData( 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->getIterator(); t; t++ )
  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 || oNum > objekte->getEintragAnzahl() )
  81. return 0;
  82. for( auto o = objekte->getIterator(); o; o++ )
  83. {
  84. if( o->id == oNum + 1 )
  85. {
  86. SpielObjekt *ret = new SpielObjekt( o );
  87. for( auto i = ressources->getIterator(); i && i._; i++ )
  88. {
  89. if( i->getId() == o->m2d )
  90. ret->setModel( i->zReccourceM2()->getThis() );
  91. }
  92. return ret;
  93. }
  94. }
  95. return 0;
  96. }
  97. int Karte::getMaxTeamAnzahl() const
  98. {
  99. return sts ? sts->teamAnzahl : 0;
  100. }
  101. int Karte::getMaxSpielerAnzahl() const
  102. {
  103. return sts ? sts->spielerAnzahl : 0;
  104. }
  105. int Karte::getObjektAnzahl() const
  106. {
  107. return objekte->getEintragAnzahl();
  108. }
  109. // Reference Counting
  110. Karte *Karte::getThis()
  111. {
  112. ref++;
  113. return this;
  114. }
  115. Karte *Karte::release()
  116. {
  117. ref--;
  118. if( !ref )
  119. delete this;
  120. return 0;
  121. }