123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- #include "ImSpiel.h"
- #include <Fenster.h>
- #include <Schrift.h>
- #include "..\..\Leser\KartenLeser.h"
- #include "..\..\Global\Variablen.h"
- #include <Globals.h>
- typedef SpielV *( *DllStart )( void );
- // Inhalt der ImSpielObj Klasse aus ImSpiel.h
- // Konstruktor
- ImSpiel::ImSpiel()
- : Thread()
- {
- sichtbar = 0;
- ladenFenster = 0;
- spielFenster = 0;
- ladenStatus = 0;
- karteId = 0;
- mainDll = 0;
- dllName = 0;
- rend = 0;
- }
- // Destruktor
- ImSpiel::~ImSpiel()
- {
- if( sichtbar )
- setSichtbar( 0 );
- }
- // nicht constant
- void ImSpiel::setSichtbar( bool sichtbar )
- {
- if( sichtbar && !this->sichtbar )
- {
- ladenFenster = new SpielLaden();
- spielFenster = 0;
- ladenStatus = 0;
- karteId = 0;
- mainDll = 0;
- dllName = new Text( "" );
- this->sichtbar = 1;
- }
- else if( !sichtbar && this->sichtbar )
- {
- if( ladenFenster )
- {
- ladenFenster->warteAufThread( 10000 );
- dynamic_cast<Thread *>( ladenFenster )->ende();
- ladenFenster->release();
- }
- if( spielFenster )
- spielFenster->release();
- if( mainDll )
- Framework::getDLLRegister()->releaseDLL( *dllName );
- dllName->release();
- this->sichtbar = 0;
- }
- }
- void ImSpiel::beginnLaden( int karteId, SpielerTeamStruktur *sts )
- {
- if( !sichtbar )
- return;
- ladenFenster->setSpielerTeamStruktur( sts );
- ladenFenster->setKarte( karteId );
- ladenFenster->setSichtbar( 1 );
- this->karteId = karteId;
- spielClient->bereitZumLaden();
- rend = 1;
- start();
- }
- void ImSpiel::lBAddSpieler( int accountId, int spielerNummer )
- {
- if( !sichtbar )
- return;
- ladenFenster->addSpieler( accountId, spielerNummer );
- rend = 1;
- }
- void ImSpiel::lBSetSpielerProzent( int accountId, int prozent )
- {
- if( !sichtbar )
- return;
- ladenFenster->setSpielerFortschritt( accountId, prozent );
- rend = 1;
- }
- void ImSpiel::lBSetSpielerPing( int accountId, int ping )
- {
- if( !sichtbar )
- return;
- ladenFenster->setSpielerPing( accountId, ping );
- rend = 1;
- }
- void ImSpiel::spielNachricht( int län, char *bytes )
- {
- if( !sichtbar )
- return;
- if( ladenStatus > 1 )
- spielFenster->nachricht( län, bytes );
- }
- void ImSpiel::endLaden()
- {
- if( !sichtbar )
- return;
- ladenFenster->setSichtbar( 0 );
- }
- void ImSpiel::thread()
- {
- KartenLeser *reader = KartenLeser::getInstance();
- reader->lock();
- reader->setKarteId( karteId );
- Text *pfad = reader->getSpielPfad();
- pfad->append( "bin/" );
- pfad->append( reader->getSpielName() );
- pfad->append( ".dll" );
- dllName->setText( "Spiele/" );
- dllName->append( reader->getSpielName() );
- reader->unlock();
- reader->release();
- dllName->append( ".dll" );
- mainDll = Framework::getDLLRegister()->ladeDLL( *dllName, *pfad );
- if( !mainDll )
- {
- Text *nachricht = new Text( "Die Spiel DLL " );
- nachricht->append( pfad->getText() );
- nachricht->append( " konnte nicht geladen werden.\n" );
- nachricht->append( "Wenn sie nicht existiert dann installiere das Spiel neu." );
- WMessageBox( 0, new Text( "Unerwarteter Fehler" ), nachricht, MB_ICONERROR );
- //------------------------------
- exit( 0 );
- }
- pfad->release();
- DllStart getSpielKlasse = (DllStart)GetProcAddress( mainDll, "getSpielKlasse" );
- if( !getSpielKlasse )
- {
- Text *nachricht = new Text( "Die Spiel DLL " );
- nachricht->append( pfad->getText() );
- nachricht->append( " konnte nicht geladen werden.\n" );
- nachricht->append( "Die Einstiegsfunktion getSpielKlasse() wurde nicht gefunden." );
- WMessageBox( 0, new Text( "Unerwarteter Fehler" ), nachricht, MB_ICONERROR );
- //------------------------------
- exit( 0 );
- }
- int port = 0;
- Text ip;
- KSGClient::KartenServerClient *kartenClient = infoClient->createKartenServerClient( karteId );
- if( kartenClient && kartenClient->verbinde() )
- {
- kartenClient->downloadKarte( karteId );
- kartenClient->trenne( 1 );
- }
- if( kartenClient )
- kartenClient->release();
- spielFenster = getSpielKlasse();
- ladenStatus = 1;
- spielFenster->setKarteId( karteId );
- spielFenster->setKlients( dynamic_cast<KSGClient::InformationServerClient *>( infoClient->getThis() ), dynamic_cast<KSGClient::SpielServerClient *>( spielClient->getThis() ) );
- spielFenster->setUIFactory( uiFactory );
- spielFenster->ladeDaten();
- ladenStatus = 2;
- run = 0;
- }
- bool ImSpiel::tick( double tickVal )
- {
- if( !sichtbar )
- return 0;
- if( ladenStatus < 3 ) // Vor dem Spiel
- rend |= ladenFenster->tick( tickVal );
- if( ladenStatus == 2 ) // Im spiel
- {
- rend |= spielFenster->tick( tickVal );
- if( spielFenster->läuft() == 1 )
- {
- ladenStatus = 3;
- rend = 1;
- }
- }
- if( ladenStatus == 3 ) // Ende des Spiels
- {
- rend |= spielFenster->tick( tickVal );
- if( !spielFenster->läuft() )
- {
- ladenStatus = 4;
- aktion = 6; // Spiel Statistik laden (Render => new AktionsThread( 20, 0, 0, 0, 0, 0 ))
- rend = 1;
- }
- }
- bool ret = rend;
- rend = 0;
- return ret;
- }
- void ImSpiel::doPublicMausEreignis( MausEreignis &me )
- {
- if( !sichtbar )
- return;
- if( ladenStatus > 1 )
- spielFenster->doPublicMausEreignis( me );
- }
- void ImSpiel::doTastaturEreignis( TastaturEreignis &te )
- {
- if( !sichtbar )
- return;
- if( ladenStatus > 1 )
- spielFenster->doTastaturEreignis( te );
- }
- void ImSpiel::render( Bild &zRObj )
- {
- if( !sichtbar )
- return;
- if( ladenStatus < 3 && ( !spielFenster || spielFenster->läuft() == 3 ) )
- ladenFenster->render( zRObj );
- if( ladenStatus == 3 || ladenStatus == 2 )
- spielFenster->render( zRObj );
- }
- // constant
- int ImSpiel::getKarteId() const
- {
- return karteId;
- }
- bool ImSpiel::istSichtbar() const
- {
- return sichtbar;
- }
|