ImSpiel.cpp 6.0 KB

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