#include "Shop.h" #include "../../Global/Variablen.h" #include "../../Global/Initialisierung.h" #include #include // Inhalt der Shop Klasse aus Shop.h // Konstruktor Shop::Shop( Schrift *zSchrift, Fenster *zNachLoginFenster, int x ) : Zeichnung() { bildschirmGröße = BildschirmGröße(); pos = Punkt( x, 67 ); gr = Punkt( 102, 32 ); rahmen = new LRahmen(); rahmen->setFarbe( 0xFFFFFFFF ); rahmen->setSize( 102, 32 ); spiele = initKnopf( 10, 10, 100, 30, zSchrift, Knopf::Style::Sichtbar, "Spiele" ); spiele->setLinienRahmenBreite( 2 ); spiele->setAlphaFeldFarbe( 0xFF000000 ); spiele->setAlphaFeldStrength( 20 ); initToolTip( spiele, "Shop nach Spielen durchsuchen.", zSchrift->getThis(), hauptScreen ); karten = initKnopf( 120, 10, 100, 30, zSchrift, Knopf::Style::Sichtbar, "Karten" ); initToolTip( karten, "Shop nach Karten durchsuchen.", zSchrift->getThis(), hauptScreen ); alpha = 0; animation = 0; sichtbar = 0; tickVal = 0; jetzt = 0; prozent1 = 0; prozent2 = 0; begPos = Punkt( 0, 0 ); begGröße = Punkt( 0, 0 ); größe1 = Punkt( 102, 32 ); pos1 = Punkt( x, 67 ); größe2 = Punkt( 800, 500 ); pos2 = bildschirmGröße / 2 - größe2 / 2; zNachLoginFenster->addMember( this ); spielKaufen = new SpieleKaufen( zSchrift ); karteKaufen = new KartenKaufen( zSchrift ); ref = 1; } // Destruktor Shop::~Shop() { rahmen->release(); spiele->release(); karten->release(); spielKaufen->release(); karteKaufen->release(); } // nicht constant void Shop::setSichtbar( bool sicht ) { begPos = pos; begGröße = gr; animation |= ( sicht ? 0x1 : 0x2 ); rend = 1; } bool Shop::tick( double tickVal ) { rend |= spiele->tick( tickVal ); rend |= karten->tick( tickVal ); rend |= spielKaufen->tick( tickVal ); rend |= karteKaufen->tick( tickVal ); this->tickVal += tickVal * 150; int val = ( int )this->tickVal; if( val < 1 ) { bool ret = rend; rend = 0; return ret; } this->tickVal -= val; if( ( animation | 0x1 ) == animation ) // Einblenden { if( prozent1 != 100 ) { prozent1 += val; if( prozent1 >= 100 ) { prozent1 = 100; if( !jetzt ) { spielKaufen->setSichtbar( 1 ); jetzt = 1; } } pos = begPos + (Punkt)( ( ( Vec2< double > )( pos2 - begPos ) / 100.0 ) * prozent1 ); gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe2 - begGröße ) / 100.0 ) * prozent1 ); } else if( alpha != 255 ) { alpha += val * 2; if( alpha >= 255 || ( animation | 0x2 ) == animation ) { alpha = 255; animation &= ~0x1; sichtbar = 1; prozent1 = 0; } } rend = 1; } if( ( animation | 0x2 ) == animation ) // ausblenden { if( alpha != 0 ) { alpha -= val * 2; if( alpha < 0 ) alpha = 0; } else { prozent2 += val; if( prozent2 > 100 ) prozent2 = 100; pos = begPos + (Punkt)( ( ( Vec2< double > )( pos1 - begPos ) / 100.0 ) * prozent2 ); gr = begGröße + (Punkt)( ( ( Vec2< double > )( größe1 - begGröße ) / 100.0 ) * prozent2 ); if( prozent2 == 100 ) { prozent2 = 0; animation &= ~0x2; sichtbar = 0; } } rend = 1; } bool ret = rend; rend = 0; return ret; } void Shop::doMausEreignis( MausEreignis &me ) { if( !sichtbar ) return; if( animation ) return; int mx = me.mx; int my = me.my; me.mx -= pos.x; me.my -= pos.y; int ak = 0; bool tmp = me.verarbeitet; spiele->doMausEreignis( me ); ak = me.verarbeitet ? 1 : 0; karten->doMausEreignis( me ); ak = me.verarbeitet && !ak ? 2 : ak; if( tmp ) ak = 0; if( me.id == ME_RLinks ) { switch( ak ) { case 1: // spiele Klick if( jetzt == 1 ) break; karten->setLinienRahmenBreite( 1 ); karten->setAlphaFeldFarbe( 0x5500FF00 ); karten->setAlphaFeldStrength( -5 ); spiele->setLinienRahmenBreite( 2 ); spiele->setAlphaFeldFarbe( 0xFF000000 ); spiele->setAlphaFeldStrength( 20 ); karteKaufen->setSichtbar( 0 ); spielKaufen->setSichtbar( 1 ); jetzt = 1; break; case 2: // karten Klick if( jetzt == 2 || jetzt == 3 ) break; spiele->setLinienRahmenBreite( 1 ); spiele->setAlphaFeldFarbe( 0x5500FF00 ); spiele->setAlphaFeldStrength( -5 ); karten->setLinienRahmenBreite( 2 ); karten->setAlphaFeldFarbe( 0xFF000000 ); karten->setAlphaFeldStrength( 20 ); spielKaufen->setSichtbar( 0 ); karteKaufen->setSichtbar( 1 ); jetzt = 2; break; } } switch( jetzt ) { case 1: // Spiel kaufen spielKaufen->doMausEreignis( me ); break; case 2: // Karten kaufen karteKaufen->doMausEreignis( me ); break; } me.mx = mx; me.my = my; } void Shop::doTastaturEreignis( TastaturEreignis &te ) { if( !sichtbar ) return; switch( jetzt ) { case 1: // Spiel kaufen spielKaufen->doTastaturEreignis( te ); break; case 2: // Karten kaufen karteKaufen->doTastaturEreignis( te ); break; } } void Shop::render( Bild &zRObj ) { if( pos == pos1 ) return; if( !zRObj.setDrawOptions( pos, gr ) ) return; rahmen->setSize( gr ); rahmen->render( zRObj ); int rbr = rahmen->getRBreite(); zRObj.setAlpha( (unsigned char)alpha ); spiele->render( zRObj ); karten->render( zRObj ); spielKaufen->render( zRObj ); karteKaufen->render( zRObj ); zRObj.releaseAlpha(); zRObj.releaseDrawOptions(); } // constant bool Shop::istAnimiert() const { return animation != 0; } bool Shop::istSichtbar() const { return sichtbar || prozent1 != 0; } // Reference Counting Shop *Shop::getThis() { ref++; return this; } Shop *Shop::release() { ref--; if( !ref ) delete this; return 0; }