SpielStatistik.cpp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. #include "SpielStatistik.h"
  2. #include <Punkt.h>
  3. #include "../../../Global/Variablen.h"
  4. typedef SpielStatistikV* ( *GetStatistikKlasse )( void );
  5. // Inhalt der SpielStatistik Klasse aus SpielStatistik.h
  6. // Konstruktor
  7. SpielStatistik::SpielStatistik( Schrift *zSchrift )
  8. : pos( 10, 10 ),
  9. gr( 780, 480 )
  10. {
  11. stat = 0;
  12. spielDll = 0;
  13. la = (Animation2D*)ladeAnimation->dublizieren();
  14. la->setPosition( 365, 215 );
  15. la->setSichtbar( 0 );
  16. schrift = zSchrift->getThis();
  17. tickVal = 0;
  18. sichtbar = 0;
  19. alpha = 0;
  20. spielArt = 0;
  21. rend = 0;
  22. ref = 1;
  23. }
  24. // Destruktor
  25. SpielStatistik::~SpielStatistik()
  26. {
  27. if( stat )
  28. stat->release();
  29. if( spielDll )
  30. FreeLibrary( spielDll );
  31. la->release();
  32. schrift->release();
  33. }
  34. // nicht constant
  35. void SpielStatistik::setSpielArt( int spielArt )
  36. {
  37. if( this->spielArt )
  38. return;
  39. this->spielArt = spielArt;
  40. la->setSichtbar( 1 );
  41. Text *name = infoClient->getSpielName( spielArt );
  42. if( !name )
  43. {
  44. this->spielArt = 0;
  45. la->setSichtbar( 0 );
  46. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spiel Statistik konnte nicht geladen werden." ), new Text( "Ok" ) );
  47. return;
  48. }
  49. Text *pfad = new Text( "data/spiele/" );
  50. pfad->append( name->getText() );
  51. pfad->append( "/bin/" );
  52. pfad->append( name );
  53. pfad->append( ".dll" );
  54. spielDll = LoadLibrary( pfad->getText() );
  55. pfad->release();
  56. if( !spielDll )
  57. {
  58. this->spielArt = 0;
  59. la->setSichtbar( 0 );
  60. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spiel Statistik konnte nicht geladen werden." ), new Text( "Ok" ) );
  61. return;
  62. }
  63. GetStatistikKlasse gsk = (GetStatistikKlasse)GetProcAddress( spielDll, "GetStatistikKlasse" );
  64. if( !gsk )
  65. {
  66. FreeLibrary( spielDll );
  67. this->spielArt = 0;
  68. la->setSichtbar( 0 );
  69. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spiel Statistik konnte nicht geladen werden." ), new Text( "Ok" ) );
  70. return;
  71. }
  72. stat = gsk();
  73. if( !stat )
  74. {
  75. FreeLibrary( spielDll );
  76. this->spielArt = 0;
  77. la->setSichtbar( 0 );
  78. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Spiel Statistik konnte nicht geladen werden." ), new Text( "Ok" ) );
  79. return;
  80. }
  81. stat->setAccountId( loginClient->getAccountId() );
  82. stat->setBilder( bilder );
  83. stat->setRückrufFunktionen( spielStatistikAddNachrichtF, spielStatistikAddChatF, spielStatistikAddFreundF, spielStatistikAccountAnsehenF, spielStatistikIstFreundF, this );
  84. stat->setSchrift( schrift->getThis() );
  85. stat->setBildschirm( hauptScreen );
  86. stat->setKlients( infoClient->getThis(), spielClient->getThis() );
  87. stat->bereit();
  88. }
  89. void SpielStatistik::nachricht( int län, char *bytes )
  90. {
  91. if( stat )
  92. stat->nachricht( län, bytes );
  93. }
  94. void SpielStatistik::reset()
  95. {
  96. spielArt = 0;
  97. la->setSichtbar( 0 );
  98. sichtbar = 0;
  99. alpha = 0;
  100. stat = stat->release();
  101. FreeLibrary( spielDll );
  102. spielDll = 0;
  103. }
  104. void SpielStatistik::doMausEreignis( MausEreignis &me )
  105. {
  106. me.mx -= pos.x;
  107. me.my -= pos.y;
  108. if( stat )
  109. stat->doMausEreignis( me );
  110. me.mx += pos.x;
  111. me.my += pos.y;
  112. }
  113. void SpielStatistik::doTastaturEreignis( TastaturEreignis &te )
  114. {
  115. if( stat )
  116. stat->doTastaturEreignis( te );
  117. }
  118. bool SpielStatistik::tick( double zeit )
  119. {
  120. if( stat && stat->getStatus() == 1 )
  121. {
  122. sichtbar = 1;
  123. la->setSichtbar( 0 );
  124. }
  125. else
  126. sichtbar = 0;
  127. tickVal += zeit * 250;
  128. int val = (int)tickVal;
  129. if( val > 10 )
  130. val = 10;
  131. tickVal -= val;
  132. if( val )
  133. {
  134. if( sichtbar && alpha != 255 )
  135. {
  136. if( alpha + val > 255 )
  137. alpha = 255;
  138. else
  139. alpha += val;
  140. rend = 1;
  141. }
  142. if( !sichtbar && alpha != 0 )
  143. {
  144. if( alpha - val < 0 )
  145. alpha = 0;
  146. else
  147. alpha -= val;
  148. rend = 1;
  149. }
  150. }
  151. if( stat && sichtbar )
  152. rend |= stat->tick( zeit );
  153. rend |= la->tick( zeit );
  154. bool ret = rend;
  155. rend = 0;
  156. return ret;
  157. }
  158. void SpielStatistik::render( Bild &zRObj )
  159. {
  160. if( !zRObj.setDrawOptions( pos, gr ) )
  161. return;
  162. la->render( zRObj );
  163. zRObj.setAlpha( alpha );
  164. if( stat )
  165. stat->render( zRObj );
  166. zRObj.releaseAlpha();
  167. zRObj.releaseDrawOptions();
  168. }
  169. void SpielStatistik::addNachrichtF( Text *t, Text *n, Text *rp, Text *rn )
  170. {
  171. nachLogin->zNachrichtenListe()->addNachricht( t, n, rp, rn );
  172. }
  173. void SpielStatistik::addChatF( int acc )
  174. {
  175. nachLogin->zChatLeiste()->addChat( acc, 0 );
  176. }
  177. void SpielStatistik::addFreundF( int acc )
  178. {
  179. if( !chatClient->freundesAnfrage( acc ) )
  180. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Die Freundesanfrage konnte nicht gesendet werden." ), new Text( "Ok" ) );
  181. else
  182. nachLogin->zNachrichtenListe()->addNachricht( new Text( "Freundesanfrage" ), new Text( "Es wurde eine Freundesanfrage an den Spieler gesendet." ), new Text( "Ok" ) );
  183. }
  184. void SpielStatistik::accountAnsehenF( int acc )
  185. {
  186. if( nachLogin->zAccountAnsehenFenster()->setSpielerDetails( acc, 2 ) )
  187. {
  188. MausEreignis me = { ME_RLinks, 0, 0, 0, 0, 0 };
  189. nachLogin->zTitelLeiste()->druckAccountAnsehen( me );
  190. }
  191. }
  192. bool SpielStatistik::istFreundF( int acc )
  193. {
  194. return nachLogin->zFreundesListe()->istFreund( acc );
  195. }
  196. void SpielStatistik::verlassen()
  197. {
  198. if( stat )
  199. stat->verlassen();
  200. }
  201. // constant
  202. bool SpielStatistik::istSichtbar()
  203. {
  204. return sichtbar || alpha || la->istSichtbar();
  205. }
  206. // Reference Counting
  207. SpielStatistik *SpielStatistik::getThis()
  208. {
  209. ref++;
  210. return this;
  211. }
  212. SpielStatistik *SpielStatistik::release()
  213. {
  214. ref--;
  215. if( !ref )
  216. delete this;
  217. return 0;
  218. }
  219. // Rückruf Funktionen
  220. void spielStatistikAddNachrichtF( void *p, Text *t, Text *n, Text *rp, Text *rn )
  221. {
  222. if( p )
  223. ( (SpielStatistik*)p )->addNachrichtF( t, n, rp, rn );
  224. }
  225. void spielStatistikAddChatF( void *p, int acc )
  226. {
  227. if( p )
  228. ( (SpielStatistik*)p )->addChatF( acc );
  229. }
  230. void spielStatistikAddFreundF( void *p, int acc )
  231. {
  232. if( p )
  233. ( (SpielStatistik*)p )->addFreundF( acc );
  234. }
  235. void spielStatistikAccountAnsehenF( void *p, int acc )
  236. {
  237. if( p )
  238. ( (SpielStatistik*)p )->accountAnsehenF( acc );
  239. }
  240. bool spielStatistikIstFreundF( void *p, int acc )
  241. {
  242. if( p )
  243. return ( (SpielStatistik*)p )->istFreundF( acc );
  244. return 0;
  245. }