ImSpiel.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. #include "ImSpiel.h"
  2. #include <Fenster.h>
  3. #include <Schrift.h>
  4. #include "..\..\Leser\KartenLeser.h"
  5. #include "..\..\Global\Variablen.h"
  6. #include <Globals.h>
  7. typedef SpielV* ( *DllStart )( void );
  8. // Inhalt der ImSpielObj Klasse aus ImSpiel.h
  9. // Konstruktor
  10. ImSpiel::ImSpiel( Schrift *zSchrift )
  11. : Thread()
  12. {
  13. sichtbar = 0;
  14. ladenFenster = 0;
  15. spielFenster = 0;
  16. schrift = zSchrift->getThis();
  17. ladenStatus = 0;
  18. karteId = 0;
  19. mainDll = 0;
  20. dllName = 0;
  21. rend = 0;
  22. }
  23. // Destruktor
  24. ImSpiel::~ImSpiel()
  25. {
  26. if( sichtbar )
  27. setSichtbar( 0 );
  28. schrift->release();
  29. }
  30. // nicht constant
  31. void ImSpiel::setSichtbar( bool sichtbar )
  32. {
  33. if( sichtbar && !this->sichtbar )
  34. {
  35. ladenFenster = new SpielLaden( schrift );
  36. spielFenster = 0;
  37. ladenStatus = 0;
  38. karteId = 0;
  39. mainDll = 0;
  40. dllName = new Text( "" );
  41. this->sichtbar = 1;
  42. }
  43. else if( !sichtbar && this->sichtbar )
  44. {
  45. if( ladenFenster )
  46. ladenFenster->release();
  47. if( spielFenster )
  48. spielFenster->release();
  49. if( mainDll )
  50. Framework::getDLLRegister()->releaseDLL( *dllName );
  51. dllName->release();
  52. this->sichtbar = 0;
  53. }
  54. }
  55. void ImSpiel::beginnLaden( int karteId, SpielerTeamStruktur *sts )
  56. {
  57. if( !sichtbar )
  58. return;
  59. ladenFenster->setSpielerTeamStruktur( sts );
  60. ladenFenster->setKarte( karteId );
  61. ladenFenster->setSichtbar( 1 );
  62. this->karteId = karteId;
  63. spielClient->bereitZumLaden();
  64. rend = 1;
  65. start();
  66. }
  67. void ImSpiel::lBAddSpieler( int accountId, int spielerNummer )
  68. {
  69. if( !sichtbar )
  70. return;
  71. ladenFenster->addSpieler( accountId, spielerNummer );
  72. rend = 1;
  73. }
  74. void ImSpiel::lBSetSpielerProzent( int accountId, int prozent )
  75. {
  76. if( !sichtbar )
  77. return;
  78. ladenFenster->setSpielerFortschritt( accountId, prozent );
  79. rend = 1;
  80. }
  81. void ImSpiel::lBSetSpielerPing( int accountId, int ping )
  82. {
  83. if( !sichtbar )
  84. return;
  85. ladenFenster->setSpielerPing( accountId, ping );
  86. rend = 1;
  87. }
  88. void ImSpiel::spielNachricht( int län, char *bytes )
  89. {
  90. if( !sichtbar )
  91. return;
  92. if( ladenStatus > 1 )
  93. spielFenster->nachricht( län, bytes );
  94. }
  95. void ImSpiel::endLaden()
  96. {
  97. if( !sichtbar )
  98. return;
  99. ladenFenster->setSichtbar( 0 );
  100. }
  101. void ImSpiel::thread()
  102. {
  103. KartenLeser *reader = KartenLeser::getInstance();
  104. reader->lock();
  105. reader->setKarteId( karteId );
  106. Text *pfad = reader->getSpielPfad();
  107. pfad->append( "bin/" );
  108. pfad->append( reader->getSpielName() );
  109. pfad->append( ".dll" );
  110. dllName->setText( "Spiele/" );
  111. dllName->append( reader->getSpielName() );
  112. reader->unlock();
  113. reader->release();
  114. dllName->append( ".dll" );
  115. mainDll = Framework::getDLLRegister()->ladeDLL( *dllName, *pfad );
  116. if( !mainDll )
  117. {
  118. Text *nachricht = new Text( "Die Spiel DLL " );
  119. nachricht->append( pfad->getText() );
  120. nachricht->append( " konnte nicht geladen werden.\n" );
  121. nachricht->append( "Wenn sie nicht existiert dann installiere das Spiel neu." );
  122. WMessageBox( 0, new Text( "Unerwarteter Fehler" ), nachricht, MB_ICONERROR );
  123. //------------------------------
  124. exit( 0 );
  125. }
  126. pfad->release();
  127. DllStart getSpielKlasse = (DllStart)GetProcAddress( mainDll, "getSpielKlasse" );
  128. if( !getSpielKlasse )
  129. {
  130. Text *nachricht = new Text( "Die Spiel DLL " );
  131. nachricht->append( pfad->getText() );
  132. nachricht->append( " konnte nicht geladen werden.\n" );
  133. nachricht->append( "Die Einstiegsfunktion getSpielKlasse() wurde nicht gefunden." );
  134. WMessageBox( 0, new Text( "Unerwarteter Fehler" ), nachricht, MB_ICONERROR );
  135. //------------------------------
  136. exit( 0 );
  137. }
  138. int port = 0;
  139. Text ip;
  140. KSGClient::KartenServerClient *kartenClient = infoClient->createKartenServerClient( karteId );
  141. if( kartenClient && kartenClient->verbinde() )
  142. {
  143. kartenClient->downloadKarte( karteId );
  144. kartenClient->trenne( 1 );
  145. }
  146. if( kartenClient )
  147. kartenClient->release();
  148. spielFenster = getSpielKlasse();
  149. ladenStatus = 1;
  150. spielFenster->setKarteId( karteId );
  151. spielFenster->setKlients( infoClient->getThis(), spielClient->getThis() );
  152. spielFenster->setBildschirm( hauptScreen );
  153. spielFenster->setSchrift( schrift->getThis() );
  154. spielFenster->ladeDaten();
  155. ladenStatus = 2;
  156. run = 0;
  157. }
  158. bool ImSpiel::tick( double tickVal )
  159. {
  160. if( !sichtbar )
  161. return 0;
  162. if( ladenStatus < 3 ) // Vor dem Spiel
  163. rend |= ladenFenster->tick( tickVal );
  164. if( ladenStatus == 2 ) // Im spiel
  165. {
  166. rend |= spielFenster->tick( tickVal );
  167. if( spielFenster->läuft() == 1 )
  168. {
  169. ladenStatus = 3;
  170. rend = 1;
  171. }
  172. }
  173. if( ladenStatus == 3 ) // Ende des Spiels
  174. {
  175. rend |= spielFenster->tick( tickVal );
  176. if( !spielFenster->läuft() )
  177. {
  178. ladenStatus = 4;
  179. aktion = 6; // Spiel Statistik laden (Render => new AktionsThread( 20, 0, 0, 0, 0, 0 ))
  180. rend = 1;
  181. }
  182. }
  183. bool ret = rend;
  184. rend = 0;
  185. return ret;
  186. }
  187. void ImSpiel::doMausEreignis( MausEreignis &me )
  188. {
  189. if( !sichtbar )
  190. return;
  191. if( ladenStatus > 1 )
  192. spielFenster->doMausEreignis( me );
  193. }
  194. void ImSpiel::doTastaturEreignis( TastaturEreignis &te )
  195. {
  196. if( !sichtbar )
  197. return;
  198. if( ladenStatus > 1 )
  199. spielFenster->doTastaturEreignis( te );
  200. }
  201. void ImSpiel::render( Bild &zRObj )
  202. {
  203. if( !sichtbar )
  204. return;
  205. if( ladenStatus < 3 && ( !spielFenster || spielFenster->läuft() == 3 ) )
  206. ladenFenster->render( zRObj );
  207. if( ladenStatus == 3 || ladenStatus == 2 )
  208. spielFenster->render( zRObj );
  209. }
  210. // constant
  211. int ImSpiel::getKarteId() const
  212. {
  213. return karteId;
  214. }
  215. bool ImSpiel::istSichtbar() const
  216. {
  217. return sichtbar;
  218. }