HistorieStatistik.cpp 4.3 KB

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