HistorieStatistik.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. #include "HistorieStatistik.h"
  2. #include <Knopf.h>
  3. #include <MausEreignis.h>
  4. #include <Bildschirm.h>
  5. #include <InitDatei.h>
  6. #include <DateiSystem.h>
  7. #include "StatistikLeser.h"
  8. // Inhalt der HistorieStatistik Klasse aus HistorieStatistik.h
  9. // Konstruktor
  10. HistorieStatistik::HistorieStatistik()
  11. : ReferenceCounter()
  12. {
  13. gss = new Array< SSDGesamtSpieler * >();
  14. gts = new Array< SSDGesamtTeam * >();
  15. rs = new Array< SSDRunde * >();
  16. runde = 0;
  17. tabelle = 0;
  18. fertig = 0;
  19. geladen = 0;
  20. geschlossen = 0;
  21. alpha = 0;
  22. sichtbar = 0;
  23. tickVal = 0;
  24. rend = 0;
  25. }
  26. // Destruktor
  27. HistorieStatistik::~HistorieStatistik()
  28. {
  29. if( !geladen )
  30. {
  31. gss->release();
  32. gts->release();
  33. rs->release();
  34. }
  35. else
  36. {
  37. int anz = gss->getEintragAnzahl();
  38. for( int i = 0; i < anz; i++ )
  39. {
  40. if( gss->hat( i ) )
  41. delete gss->get( i );
  42. }
  43. gss->release();
  44. anz = gts->getEintragAnzahl();
  45. for( int i = 0; i < anz; i++ )
  46. {
  47. if( gts->hat( i ) )
  48. delete gts->get( i );
  49. }
  50. gts->release();
  51. anz = rs->getEintragAnzahl();
  52. for( int i = 0; i < anz; i++ )
  53. {
  54. if( rs->hat( i ) )
  55. {
  56. int anz2 = rs->get( i )->spieler.getEintragAnzahl();
  57. for( int j = 0; j < anz2; j++ )
  58. {
  59. if( rs->get( i )->spieler.hat( j ) )
  60. delete rs->get( i )->spieler.get( j );
  61. }
  62. anz2 = rs->get( i )->teams.getEintragAnzahl();
  63. for( int j = 0; j < anz2; j++ )
  64. {
  65. if( rs->get( i )->teams.hat( j ) )
  66. delete rs->get( i )->teams.get( j );
  67. }
  68. delete rs->get( i );
  69. }
  70. }
  71. rs->release();
  72. }
  73. if( runde )
  74. runde->release();
  75. if( tabelle )
  76. tabelle->release();
  77. if( fertig )
  78. fertig->release();
  79. }
  80. // nicht constant
  81. void HistorieStatistik::setUIFactory( UIInit &factory )
  82. {
  83. uiFactory = factory;
  84. }
  85. void HistorieStatistik::ladeDaten( int spielId )
  86. {
  87. if( geladen )
  88. return;
  89. StatistikLeser *reader = new StatistikLeser( spielId );
  90. for( int i = 0; i < reader->getSpielerAnzahl(); i++ )
  91. gss->set( reader->getSSDGS( i ), i );
  92. for( int i = 0; i < reader->getTeamAnzahl(); i++ )
  93. gts->set( reader->getSSDGT( i ), i );
  94. for( int i = 0; i < reader->getRundenAnzahl(); i++ )
  95. rs->set( reader->getSSDR( i ), i );
  96. reader->release();
  97. tabelle = new StatistikTabelle( dynamic_cast<Array<SSDGesamtSpieler *> *>( gss->getThis() ), dynamic_cast<Array<SSDGesamtTeam *> *>( gts->getThis() ), dynamic_cast<Array<SSDRunde *> *>( rs->getThis() ), uiFactory, 1 );
  98. runde = new StatistikRunde( uiFactory, dynamic_cast<Array<SSDRunde *> *>( rs->getThis() ), 1 );
  99. fertig = uiFactory.createKnopf( uiFactory.initParam );
  100. fertig->setPosition( 600, 390 );
  101. fertig->setSize( 100, 20 );
  102. fertig->setText( "Zurück" );
  103. geladen = 1;
  104. }
  105. void HistorieStatistik::setSichtbar( bool sichtbar )
  106. {
  107. this->sichtbar = sichtbar;
  108. }
  109. void HistorieStatistik::doPublicMausEreignis( MausEreignis &me )
  110. {
  111. if( !geladen )
  112. return;
  113. tabelle->doPublicMausEreignis( me );
  114. runde->doPublicMausEreignis( me );
  115. bool vera = me.verarbeitet;
  116. fertig->doPublicMausEreignis( me );
  117. if( !vera && me.verarbeitet && me.id == ME_RLinks )
  118. geschlossen = 1;
  119. }
  120. void HistorieStatistik::doTastaturEreignis( TastaturEreignis &te )
  121. {}
  122. bool HistorieStatistik::tick( double tickVal )
  123. {
  124. if( !geladen )
  125. return 0;
  126. runde->setRunde( tabelle->getRunde() );
  127. rend |= tabelle->tick( tickVal );
  128. rend |= runde->tick( tickVal );
  129. rend |= fertig->tick( tickVal );
  130. this->tickVal += tickVal * 150;
  131. int val = (int)this->tickVal;
  132. this->tickVal -= val;
  133. if( val )
  134. {
  135. if( sichtbar && alpha != 255 )
  136. {
  137. if( alpha + val > 255 )
  138. alpha = 255;
  139. else
  140. alpha += val;
  141. rend = 1;
  142. }
  143. if( !sichtbar && alpha )
  144. {
  145. if( alpha - val < 0 )
  146. alpha = 0;
  147. else
  148. alpha -= val;
  149. rend = 1;
  150. }
  151. }
  152. bool ret = rend;
  153. rend = 0;
  154. return ret;
  155. }
  156. void HistorieStatistik::render( Bild &zRObj )
  157. {
  158. if( !geladen )
  159. return;
  160. zRObj.setAlpha( alpha );
  161. tabelle->render( zRObj );
  162. runde->render( zRObj );
  163. fertig->render( zRObj );
  164. zRObj.releaseAlpha();
  165. }
  166. // constant
  167. bool HistorieStatistik::istNochSichtbar() const
  168. {
  169. return alpha != 0 || sichtbar;
  170. }
  171. bool HistorieStatistik::wurdeGeschlossen() const
  172. {
  173. return geschlossen;
  174. }