#include "SpielerGUI.h" #include "../../Initialisierung/Initialisierung.h" #include #include #include using namespace Framework; int getStellen( double d ) { int ret = 0; for( int i = 1; d >= i; i *= 10 ) ret++; return ret; } // Inhalt der Ship Klasse aus Ship.h // Konstruktor SpielerGUI::SpielerGUI( Schrift *zSchrift ) { player = 0; ram = new LRahmen(); ram->setSize( 200, 417 ); ram->setPosition( Punkt( BildschirmGröße().x - 210, 10 ) ); ram->setFarbe( 0xFFFFFFFF ); spieler = initTextFeld( 5, 5, 190, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "" ); stabilität = initTextFeld( 5, 30, 165, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "" ); energie = initTextFeld( 5, 55, 165, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, "" ); stabilitätB = new FBalken(); stabilitätB->setPosition( 5, 30 ); stabilitätB->setSize( 165, 20 ); stabilitätB->setHintergrundFarbe( 0xFF000000 ); stabilitätB->setFBgFarbe( 0xFF55FF55 ); stabilitätB->setRahmenFarbe( 0xFF00FF00 ); stabilitätB->setRahmenBreite( 1 ); stabilitätB->setFRFarbe( 0xFF00FF00 ); stabilitätB->setFRBreite( 1 ); stabilitätB->setStyle( FBalken::Style::Sichtbar | FBalken::Style::L_R | FBalken::Style::Hintergrund | FBalken::Style::FFarbe | FBalken::Style::Rahmen | FBalken::Style::FRahmen ); energieB = new FBalken(); energieB->setPosition( 5, 55 ); energieB->setSize( 165, 20 ); energieB->setHintergrundFarbe( 0xFF000000 ); energieB->setFBgFarbe( 0xFF5555FF ); energieB->setRahmenFarbe( 0xFF0000FF ); energieB->setRahmenBreite( 1 ); energieB->setFRFarbe( 0xFF0000FF ); energieB->setFRBreite( 1 ); energieB->setStyle( FBalken::Style::Sichtbar | FBalken::Style::L_R | FBalken::Style::Hintergrund | FBalken::Style::FFarbe | FBalken::Style::Rahmen | FBalken::Style::FRahmen ); reparatur = initTextFeld( 5, 80, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::VCenter, "" ); akkuLeistung = initTextFeld( 5, 105, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::VCenter, "" ); wendigkeit = initTextFeld( 5, 130, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::VCenter, "" ); beschleunigung = initTextFeld( 5, 155, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::VCenter, "" ); antriebEffizienz = initTextFeld( 5, 180, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::VCenter, "" ); laserIntensität = initTextFeld( 5, 205, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::VCenter, "" ); laserEffizienz = initTextFeld( 5, 230, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::VCenter, "" ); laserTempo = initTextFeld( 5, 255, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::VCenter, "" ); energieSchild = initTextFeld( 5, 280, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::VCenter, "" ); energieSchildEffizienz = initTextFeld( 5, 305, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::VCenter, "" ); netzwerk = initTextFeld( 5, 330, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::VCenter, "" ); stabilitätSkill = initKnopf( 172, 30, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); energieSkill = initKnopf( 172, 55, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); reparaturSkill = initKnopf( 172, 80, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); akkuLeistungSkill = initKnopf( 172, 105, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); wendigkeitSkill = initKnopf( 172, 130, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); beschleunigungSkill = initKnopf( 172, 155, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); antriebEffizienzSkill = initKnopf( 172, 180, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); laserIntensitätSkill = initKnopf( 172, 205, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); laserEffizienzSkill = initKnopf( 172, 230, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); laserTempoSkill = initKnopf( 172, 255, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); energieSchildSkill = initKnopf( 172, 280, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); energieSchildEffizienzSkill = initKnopf( 172, 305, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); netzwerkSkill = initKnopf( 172, 330, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); stabilitätSkill->removeStyle( Knopf::Style::Erlaubt ); energieSkill->removeStyle( Knopf::Style::Erlaubt ); reparaturSkill->removeStyle( Knopf::Style::Erlaubt ); akkuLeistungSkill->removeStyle( Knopf::Style::Erlaubt ); wendigkeitSkill->removeStyle( Knopf::Style::Erlaubt ); beschleunigungSkill->removeStyle( Knopf::Style::Erlaubt ); laserIntensitätSkill->removeStyle( Knopf::Style::Erlaubt ); laserEffizienzSkill->removeStyle( Knopf::Style::Erlaubt ); laserTempoSkill->removeStyle( Knopf::Style::Erlaubt ); energieSchildSkill->removeStyle( Knopf::Style::Erlaubt ); energieSchildEffizienzSkill->removeStyle( Knopf::Style::Erlaubt ); netzwerkSkill->removeStyle( Knopf::Style::Erlaubt ); skillPoints = initTextFeld( 5, 355, 180, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::VCenter, "" ); speed = initTextFeld( 5, 380, 180, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::VCenter, "" ); ref = 1; } // Destruktor SpielerGUI::~SpielerGUI() { player->release(); ram->release(); spieler->release(); stabilität->release(); energie->release(); stabilitätB->release(); energieB->release(); reparatur->release(); akkuLeistung->release(); wendigkeit->release(); beschleunigung->release(); antriebEffizienz->release(); laserIntensität->release(); laserEffizienz->release(); laserTempo->release(); energieSchild->release(); energieSchildEffizienz->release(); netzwerk->release(); stabilitätSkill->release(); energieSkill->release(); reparaturSkill->release(); akkuLeistungSkill->release(); wendigkeitSkill->release(); beschleunigungSkill->release(); antriebEffizienzSkill->release(); laserIntensitätSkill->release(); laserEffizienzSkill->release(); laserTempoSkill->release(); energieSchildSkill->release(); energieSchildEffizienzSkill->release(); netzwerkSkill->release(); skillPoints->release(); speed->release(); } // nicht constant void SpielerGUI::update( Spieler *zSpieler ) { if( !player ) player = (Spieler *)zSpieler->getThis(); spieler->setText( zSpieler->name->getText() ); spieler->setSchriftFarbe( zSpieler->farbe ); Text txt; txt.setPrecision( getStellen( zSpieler->stabilität ) + 2 ); txt = zSpieler->stabilität; txt += "/"; txt.setPrecision( getStellen( zSpieler->maxStabilität ) + 2 ); txt += zSpieler->maxStabilität; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->zteam->maxStabilität ) + 2 ); txt += zSpieler->zteam->maxStabilität; txt += ")"; stabilität->setText( txt ); stabilitätB->reset(); stabilitätB->setAktionAnzahl( (int)( zSpieler->maxStabilität + zSpieler->zteam->maxStabilität ) ); stabilitätB->aktionPlus( (int)( zSpieler->stabilität ) ); txt.setPrecision( getStellen( zSpieler->energie ) + 2 ); txt = zSpieler->energie; txt += "/"; txt.setPrecision( getStellen( zSpieler->maxEnergie ) + 2 ); txt += zSpieler->maxEnergie; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->zteam->maxEnergie ) + 2 ); txt += zSpieler->zteam->maxEnergie; txt += ")"; energie->setText( txt ); energieB->reset(); energieB->setAktionAnzahl( (int)( zSpieler->maxEnergie + zSpieler->zteam->maxEnergie ) ); energieB->aktionPlus( (int)( zSpieler->energie ) ); txt = "Reparatur:"; txt.setPrecision( getStellen( zSpieler->reparatur ) + 2 ); txt += zSpieler->reparatur; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->zteam->reparatur ) + 2 ); txt += zSpieler->zteam->reparatur; txt += ")"; reparatur->setText( txt ); txt = "Akku:"; txt.setPrecision( getStellen( zSpieler->akkuLeistung ) + 2 ); txt += zSpieler->akkuLeistung; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->zteam->akkuLeistung ) + 2 ); txt += zSpieler->zteam->akkuLeistung; txt += ")"; akkuLeistung->setText( txt ); txt = "Wendigkeit:"; txt.setPrecision( getStellen( zSpieler->wendigkeit ) + 2 ); txt += zSpieler->wendigkeit; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->zteam->wendigkeit ) + 2 ); txt += zSpieler->zteam->wendigkeit; txt += ")"; wendigkeit->setText( txt ); txt = "Beschleunigung:"; txt.setPrecision( getStellen( zSpieler->beschleunigung ) + 2 ); txt += zSpieler->beschleunigung; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->zteam->beschleunigung ) + 2 ); txt += zSpieler->zteam->beschleunigung; txt += ")"; beschleunigung->setText( txt ); txt = "Antrieb effizienz:"; txt.setPrecision( getStellen( zSpieler->antriebEffizienz ) + 2 ); txt += zSpieler->antriebEffizienz; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->zteam->antriebEffizienz ) + 2 ); txt += zSpieler->zteam->antriebEffizienz; txt += ")"; antriebEffizienz->setText( txt ); txt = "Laser intensität:"; txt.setPrecision( getStellen( zSpieler->laserIntensität ) + 2 ); txt += zSpieler->laserIntensität; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->zteam->laserIntensität ) + 2 ); txt += zSpieler->zteam->laserIntensität; txt += ")"; laserIntensität->setText( txt ); txt = "Laser effizienz:"; txt.setPrecision( getStellen( zSpieler->laserEffizienz ) + 2 ); txt += zSpieler->laserEffizienz; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->zteam->laserEffizienz ) + 2 ); txt += zSpieler->zteam->laserEffizienz; txt += ")"; laserEffizienz->setText( txt ); txt = "Laser tempo:"; txt.setPrecision( getStellen( zSpieler->laserTempo ) + 2 ); txt += zSpieler->laserTempo; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->zteam->laserTempo ) + 2 ); txt += zSpieler->zteam->laserTempo; txt += ")"; laserTempo->setText( txt ); txt = "Energie Schild:"; txt.setPrecision( getStellen( zSpieler->energieSchild ) + 2 ); txt += zSpieler->energieSchild; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->zteam->energieSchild ) + 2 ); txt += zSpieler->zteam->energieSchild; txt += ")"; energieSchild->setText( txt ); txt = "Schild effizienz:"; txt.setPrecision( getStellen( zSpieler->energieSchildEffizienz ) + 2 ); txt += zSpieler->energieSchildEffizienz; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->zteam->energieSchildEffizienz ) + 2 ); txt += zSpieler->zteam->energieSchildEffizienz; txt += ")"; energieSchildEffizienz->setText( txt ); txt = "Netzwerk:"; txt.setPrecision( getStellen( zSpieler->netzwerk ) + 2 ); txt += zSpieler->netzwerk; netzwerk->setText( txt ); stabilitätSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); energieSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); reparaturSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); akkuLeistungSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); wendigkeitSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); beschleunigungSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); antriebEffizienzSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); laserIntensitätSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); laserEffizienzSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); laserTempoSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); energieSchildSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); energieSchildEffizienzSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); netzwerkSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); skillPoints->setText( Text( zSpieler->skillPunkte ) += " Punkte" ); } int SpielerGUI::doMausEreignis( MausEreignis &me ) { me.mx -= ram->getX(); me.my -= ram->getY(); if( me.mx < 0 || me.my < 0 ) { me.mx += ram->getX(); me.my += ram->getY(); return -1; } int aktion = me.verarbeitet; stabilitätSkill->doMausEreignis( me ); if( !aktion && me.verarbeitet && me.id == ME_RLinks ) aktion = 2; energieSkill->doMausEreignis( me ); if( !aktion && me.verarbeitet && me.id == ME_RLinks ) aktion = 3; reparaturSkill->doMausEreignis( me ); if( !aktion && me.verarbeitet && me.id == ME_RLinks ) aktion = 4; antriebEffizienzSkill->doMausEreignis( me ); if( !aktion && me.verarbeitet && me.id == ME_RLinks ) aktion = 12; laserIntensitätSkill->doMausEreignis( me ); if( !aktion && me.verarbeitet && me.id == ME_RLinks ) aktion = 5; laserEffizienzSkill->doMausEreignis( me ); if( !aktion && me.verarbeitet && me.id == ME_RLinks ) aktion = 6; laserTempoSkill->doMausEreignis( me ); if( !aktion && me.verarbeitet && me.id == ME_RLinks ) aktion = 7; beschleunigungSkill->doMausEreignis( me ); if( !aktion && me.verarbeitet && me.id == ME_RLinks ) aktion = 8; wendigkeitSkill->doMausEreignis( me ); if( !aktion && me.verarbeitet && me.id == ME_RLinks ) aktion = 9; netzwerkSkill->doMausEreignis( me ); if( !aktion && me.verarbeitet && me.id == ME_RLinks ) aktion = 10; akkuLeistungSkill->doMausEreignis( me ); if( !aktion && me.verarbeitet && me.id == ME_RLinks ) aktion = 11; energieSchildSkill->doMausEreignis( me ); if( !aktion && me.verarbeitet && me.id == ME_RLinks ) aktion = 13; energieSchildEffizienzSkill->doMausEreignis( me ); if( !aktion && me.verarbeitet && me.id == ME_RLinks ) aktion = 14; me.mx += ram->getX(); me.my += ram->getY(); if( aktion > 1 ) return aktion - 2; return -1; } bool SpielerGUI::tick( double tickVal ) { bool ret = stabilitätSkill->tick( tickVal ); ret |= energieSkill->tick( tickVal ); ret |= reparaturSkill->tick( tickVal ); ret |= akkuLeistungSkill->tick( tickVal ); ret |= wendigkeitSkill->tick( tickVal ); ret |= beschleunigungSkill->tick( tickVal ); ret |= antriebEffizienzSkill->tick( tickVal ); ret |= laserIntensitätSkill->tick( tickVal ); ret |= laserEffizienzSkill->tick( tickVal ); ret |= laserTempoSkill->tick( tickVal ); ret |= energieSchildSkill->tick( tickVal ); ret |= energieSchildEffizienzSkill->tick( tickVal ); ret |= netzwerkSkill->tick( tickVal ); return ret; } void SpielerGUI::render( Bild &zRObj ) { zRObj.alphaRegion( ram->getX() + 1, ram->getY() + 1, ram->getBreite() - 2, ram->getHeight() - 2, 0xA0000000 ); ram->render( zRObj ); if( !zRObj.setDrawOptions( ram->getPosition() + Punkt( 1, 1 ), ram->getSize() - Punkt( 2, 2 ) ) ) return; spieler->render( zRObj ); stabilitätB->render( zRObj ); stabilität->render( zRObj ); stabilitätSkill->render( zRObj ); energieB->render( zRObj ); energie->render( zRObj ); energieSkill->render( zRObj ); reparatur->render( zRObj ); reparaturSkill->render( zRObj ); akkuLeistung->render( zRObj ); akkuLeistungSkill->render( zRObj ); wendigkeit->render( zRObj ); wendigkeitSkill->render( zRObj ); beschleunigung->render( zRObj ); beschleunigungSkill->render( zRObj ); antriebEffizienz->render( zRObj ); antriebEffizienzSkill->render( zRObj ); laserIntensität->render( zRObj ); laserIntensitätSkill->render( zRObj ); laserEffizienz->render( zRObj ); laserEffizienzSkill->render( zRObj ); laserTempo->render( zRObj ); laserTempoSkill->render( zRObj ); energieSchild->render( zRObj ); energieSchildSkill->render( zRObj ); energieSchildEffizienz->render( zRObj ); energieSchildEffizienzSkill->render( zRObj ); netzwerk->render( zRObj ); netzwerkSkill->render( zRObj ); skillPoints->render( zRObj ); if( player ) { Text txt( "Geschwindigkeit: " ); float sp = player->speed.getLength(); txt.setPrecision( getStellen( sp ) + 2 ); txt += sp; txt += " p/s"; speed->setText( txt ); speed->render( zRObj ); zRObj.drawLinieH( 5, ram->getHeight() - 12, ram->getBreite() - 12, 0xFFFFFFFF ); zRObj.drawLinieH( 5, ram->getHeight() - 7, ram->getBreite() - 12, 0xFFFFFFFF ); zRObj.drawLinieV( 5, ram->getHeight() - 12, 5, 0xFFFFFFFF ); zRObj.drawLinieV( ram->getBreite() - 7, ram->getHeight() - 12, 5, 0xFFFFFFFF ); zRObj.fillRegion( 5, ram->getHeight() - 12, (int)( ( ram->getBreite() - 12 ) * ( player->getEp() / player->getMaxEp() ) ), 5, 0xFFFFFFFF ); } zRObj.releaseDrawOptions(); } // Reference Counting SpielerGUI *SpielerGUI::getThis() { ref++; return this; } SpielerGUI *SpielerGUI::release() { ref--; if( !ref ) delete this; return 0; }