#include "Angemeldet.h" #include #include #include "..\..\..\Global\Initialisierung.h" #include "..\..\..\Global\Variablen.h" // Inhalt der AngemeldetFenster Klasse aus Angemeldet.h // Konstruktor AngemeldetFenster::AngemeldetFenster( Schrift *zSchrift ) { pos = Punkt( 10, 10 ); gr = Punkt( 780, 480 ); rahmen = new LRahmen(); rahmen->setRamenBreite( 1 ); rahmen->setFarbe( 0xFFFFFFFF ); rahmen->setSize( 780, 480 ); spielName = initTextFeld( 290, 165, 200, 20, zSchrift, TextFeld::Style::Text, "" ); karteName = initTextFeld( 290, 190, 200, 20, zSchrift, TextFeld::Style::Text, "" ); zeit = initTextFeld( 290, 215, 200, 20, zSchrift, TextFeld::Style::Text, "Zeit in Warteschlange: " ); abbrechen = initKnopf( 340, 240, 100, 20, zSchrift, Knopf::Style::Normal, "abbrechen" ); spielGefunden = initTextFeld( 340, 140, 100, 20, zSchrift, TextFeld::Style::Text & ~TextFeld::Style::Sichtbar, "Spiel gefunden" ); warten = initTextFeld( 290, 240, 200, 20, zSchrift, TextFeld::Style::Text & ~TextFeld::Style::Sichtbar, "Warte auf andere Spieler" ); beitreten = initKnopf( 340, 240, 100, 20, zSchrift, Knopf::Style::Normal & ~Knopf::Style::Sichtbar, "beitreten" ); kick = initTextFeld( 190, 215, 400, 20, zSchrift, TextFeld::Style::Text & ~Knopf::Style::Sichtbar, "Du wurdest wegen Abwesenheit aus der Warteschlange entfernt." ); ok = initKnopf( 340, 240, 100, 20, zSchrift, Knopf::Style::Normal & ~Knopf::Style::Sichtbar, "Zurück" ); karteId = 0; gameId = 0; animation = 0; alpha = 0; aAlpha = 0; tickVal = 0; time = 0; status = 0; rend = 0; ref = 1; } // Destruktor AngemeldetFenster::~AngemeldetFenster() { if( karteId && anmeldungKlient ) anmeldungKlient->abmelden(); rahmen->release(); spielName->release(); karteName->release(); zeit->release(); abbrechen->release(); spielGefunden->release(); warten->release(); beitreten->release(); kick->release(); ok->release(); } // nicht constant bool AngemeldetFenster::setKarteId( int karteId ) { if( !anmeldungKlient ) return 0; if( !karteId ) { if( anmeldungKlient->abmelden() ) { this->karteId = 0; return 1; } else return 0; } if( !anmeldungKlient->anmelden( karteId ) ) { if( nachLogin && nachLogin->zNachrichtenListe() ) { if( anmeldungKlient->getLetzterFehler() ) { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( anmeldungKlient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 ); } else { nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( "Fehler beim anmelden." ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 ); } } return 0; } else { time = 0; this->karteId = karteId; if( infoKlient ) { Text *sN = infoKlient->getSpielName( infoKlient->getSpielId( karteId ) ); Text *kN = infoKlient->getKarteName( karteId ); if( sN ) { spielName->setText( "Spiel: " ); spielName->zText()->append( sN ); } if( kN ) { karteName->setText( "Karte: " ); karteName->zText()->append( kN ); } } rend = 1; return 1; } } void AngemeldetFenster::setSichtbar( bool sichtbar ) { if( sichtbar ) { status = 1; spielName->addStyle( TextFeld::Style::Sichtbar ); karteName->addStyle( TextFeld::Style::Sichtbar ); zeit->addStyle( TextFeld::Style::Sichtbar ); abbrechen->addStyle( Knopf::Style::Sichtbar ); spielGefunden->removeStyle( TextFeld::Style::Sichtbar ); warten->removeStyle( TextFeld::Style::Sichtbar ); beitreten->removeStyle( Knopf::Style::Sichtbar ); kick->removeStyle( TextFeld::Style::Sichtbar ); ok->removeStyle( Knopf::Style::Sichtbar ); animation |= 0x1 | 0x4; } else { animation &= ~( 0x1 | 0x4 | 0x8 ); status = 0; } rend = 1; } void AngemeldetFenster::setSpielGefunden() { status = 2; spielName->addStyle( TextFeld::Style::Sichtbar ); karteName->addStyle( TextFeld::Style::Sichtbar ); zeit->addStyle( TextFeld::Style::Sichtbar ); abbrechen->removeStyle( Knopf::Style::Sichtbar ); spielGefunden->addStyle( TextFeld::Style::Sichtbar ); warten->removeStyle( TextFeld::Style::Sichtbar ); beitreten->addStyle( Knopf::Style::Sichtbar ); kick->removeStyle( TextFeld::Style::Sichtbar ); ok->removeStyle( Knopf::Style::Sichtbar ); rend = 1; } void AngemeldetFenster::setVerbleibendeZeit( int sekunden ) { if( time != sekunden ) { time = sekunden; rend = 1; } } void AngemeldetFenster::spielGefundenAbbruch() { status = 4; spielName->removeStyle( TextFeld::Style::Sichtbar ); karteName->removeStyle( TextFeld::Style::Sichtbar ); zeit->removeStyle( TextFeld::Style::Sichtbar ); abbrechen->removeStyle( Knopf::Style::Sichtbar ); spielGefunden->removeStyle( TextFeld::Style::Sichtbar ); warten->removeStyle( TextFeld::Style::Sichtbar ); beitreten->removeStyle( Knopf::Style::Sichtbar ); kick->addStyle( TextFeld::Style::Sichtbar ); ok->addStyle( Knopf::Style::Sichtbar ); rend = 1; } void AngemeldetFenster::zurückInWarteschlange( int stunden, int minuten, int sekunden ) { time = sekunden + minuten * 60 + stunden * 60 * 60; status = 1; spielName->addStyle( TextFeld::Style::Sichtbar ); karteName->addStyle( TextFeld::Style::Sichtbar ); zeit->addStyle( TextFeld::Style::Sichtbar ); abbrechen->addStyle( Knopf::Style::Sichtbar ); spielGefunden->removeStyle( TextFeld::Style::Sichtbar ); warten->removeStyle( TextFeld::Style::Sichtbar ); beitreten->removeStyle( Knopf::Style::Sichtbar ); kick->removeStyle( TextFeld::Style::Sichtbar ); ok->removeStyle( Knopf::Style::Sichtbar ); rend = 1; } bool AngemeldetFenster::tick( double tickVal ) { rend |= spielName->tick( tickVal ); rend |= karteName->tick( tickVal ); rend |= zeit->tick( tickVal ); rend |= abbrechen->tick( tickVal ); rend |= spielGefunden->tick( tickVal ); rend |= warten->tick( tickVal ); rend |= beitreten->tick( tickVal ); rend |= kick->tick( tickVal ); rend |= ok->tick( tickVal ); if( status == 2 || status == 3 ) { Text txt = "Verbleibende Zeit: "; txt += (int)( time / 60 / 60 ); txt += ":"; txt += ( (int)( time / 60 ) % 60 ); txt += ":"; txt += (int)time % 60; if( !zeit->zText()->istGleich( txt ) ) zeit->setText( txt ); } if( status == 1 ) time += tickVal; this->tickVal += tickVal * 750; int val = ( int )this->tickVal; if( val < 1 ) { bool ret = rend; rend = 0; return ret; } if( val > 25 ) val = 25; this->tickVal -= val; if( val ) { if( ( animation | 0x4 ) == animation ) { if( status == 1 ) { if( !alpha ) time = 0; Text txt = "Zeit in Warteschlange: "; txt += (int)( time / 60 / 60 ); txt += ":"; txt += ( (int)( time / 60 ) % 60 ); txt += ":"; txt += (int)time % 60; if( !zeit->zText()->istGleich( txt ) ) zeit->setText( txt ); } if( alpha + ( val / 3 ) > 255 ) alpha = 255; else { alpha += ( val / 3 ); rend = 1; } } else { if( alpha - ( val / 2 ) < 0 ) alpha = 0; else { alpha -= ( val / 2 ); rend = 1; } } if( ( animation | 0x1 ) == animation ) // sichtbar { if( aAlpha != 255 ) { if( aAlpha + val > 255 ) aAlpha = 255; else aAlpha += val; rend = 1; } } else // unsichtbar { if( aAlpha != 0 ) { if( aAlpha - val < 0 ) aAlpha = 0; else aAlpha -= val; rend = 1; } } } bool ret = rend; rend = 0; return ret; } void AngemeldetFenster::doMausEreignis( MausEreignis &me ) { me.mx -= pos.x; me.my -= pos.y; bool ak = !me.verarbeitet; abbrechen->doMausEreignis( me ); int aktion = ( abbrechen->hatStyle( Knopf::Style::Sichtbar ) && ak && me.verarbeitet ) ? 1 : 0; beitreten->doMausEreignis( me ); aktion = ( beitreten->hatStyle( Knopf::Style::Sichtbar ) && ak && me.verarbeitet && !aktion ) ? 2 : aktion; ok->doMausEreignis( me ); aktion = ( ok->hatStyle( Knopf::Style::Sichtbar ) && ak && me.verarbeitet && !aktion ) ? 3 : aktion; if( me.id == ME_RLinks ) { switch( aktion ) { case 1: // abbrechen if( anmeldungKlient && anmeldungKlient->abmelden() ) if( nachLogin && nachLogin->zSpielenFenster() ) nachLogin->zSpielenFenster()->anmeldungAbbrechen(); break; case 2: // beitreten if( spielKlient->spielErstelltAnnehmen() ) { status = 3; spielName->addStyle( TextFeld::Style::Sichtbar ); karteName->addStyle( TextFeld::Style::Sichtbar ); zeit->addStyle( TextFeld::Style::Sichtbar ); abbrechen->removeStyle( Knopf::Style::Sichtbar ); spielGefunden->addStyle( TextFeld::Style::Sichtbar ); warten->addStyle( TextFeld::Style::Sichtbar ); beitreten->removeStyle( Knopf::Style::Sichtbar ); kick->removeStyle( TextFeld::Style::Sichtbar ); ok->removeStyle( Knopf::Style::Sichtbar ); rend = 1; } else if( nachLogin && nachLogin->zSpielenFenster() ) nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( spielKlient->getLetzterFehler() ), new Text( "Ok" ), 0, NachrichtType::nachricht, 0 ); break; case 3: // Zurück if( nachLogin && nachLogin->zSpielenFenster() ) nachLogin->zSpielenFenster()->anmeldungAbbrechen(); break; } } me.mx += pos.x; me.my += pos.y; } void AngemeldetFenster::render( Bild &zrObj ) { int x = pos.x; int y = pos.y; int br = gr.x; int hö = gr.y; if( !zrObj.setDrawOptions( x, y, br, br ) ) return; zrObj.setAlpha( aAlpha ); rahmen->render( zrObj ); zrObj.setAlpha( alpha ); spielName->render( zrObj ); karteName->render( zrObj ); zeit->render( zrObj ); abbrechen->render( zrObj ); spielGefunden->render( zrObj ); warten->render( zrObj ); beitreten->render( zrObj ); kick->render( zrObj ); ok->render( zrObj ); zrObj.releaseAlpha(); zrObj.releaseDrawOptions(); zrObj.releaseAlpha(); } int AngemeldetFenster::getAktion() { int ret = aktion; aktion = 0; return ret; } // constant int AngemeldetFenster::getKarteId() const { return karteId; } // Reference Countong AngemeldetFenster *AngemeldetFenster::getThis() { ref++; return this; } AngemeldetFenster *AngemeldetFenster::release() { ref--; if( !ref ) delete this; return 0; }