KartenLeser.cpp 3.1 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, 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. }