#include "Ship.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 Ship::Ship( Schrift *zSchrift ) { ram = new LRahmen(); ram->setSize( 200, 282 ); 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->setLinienRahmenFarbe( 0xFF00FF00 ); stabilitätB->setLinienRahmenBreite( 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->setLinienRahmenFarbe( 0xFF0000FF ); energieB->setLinienRahmenBreite( 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::Mehrfarbig | TextFeld::Style::VCenter, "" ); akkuLeistung = initTextFeld( 5, 105, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" ); wendigkeit = initTextFeld( 5, 130, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" ); beschleunigung = initTextFeld( 5, 155, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" ); laserIntensität = initTextFeld( 5, 180, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" ); laserEffizienz = initTextFeld( 5, 205, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" ); laserTempo = initTextFeld( 5, 230, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | TextFeld::Style::VCenter, "" ); netzwerk = initTextFeld( 5, 255, 165, 20, zSchrift, TextFeld::Style::Sichtbar | TextFeld::Style::Mehrfarbig | 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, "+" ); laserIntensitätSkill = initKnopf( 172, 180, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); laserEffizienzSkill = initKnopf( 172, 205, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); laserTempoSkill = initKnopf( 172, 230, 20, 20, zSchrift, Knopf::Style::Sichtbar, "+" ); netzwerkSkill = initKnopf( 172, 255, 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 ); netzwerkSkill->removeStyle( Knopf::Style::Erlaubt ); ref = 1; } // Destruktor Ship::~Ship() { ram->release(); spieler->release(); stabilität->release(); energie->release(); stabilitätB->release(); energieB->release(); reparatur->release(); akkuLeistung->release(); wendigkeit->release(); beschleunigung->release(); laserIntensität->release(); laserEffizienz->release(); laserTempo->release(); netzwerk->release(); stabilitätSkill->release(); energieSkill->release(); reparaturSkill->release(); akkuLeistungSkill->release(); wendigkeitSkill->release(); beschleunigungSkill->release(); laserIntensitätSkill->release(); laserEffizienzSkill->release(); laserTempoSkill->release(); netzwerkSkill->release(); } // nicht constant void Ship::update( Spieler *zSpieler ) { 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->team->maxStabilität ) + 2 ); txt += zSpieler->team->maxStabilität; txt += ")"; stabilität->setText( txt ); stabilitätB->reset(); stabilitätB->setAktionAnzahl( (int)( zSpieler->maxStabilität + zSpieler->team->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->team->maxEnergie ) + 2 ); txt += zSpieler->team->maxEnergie; txt += ")"; energie->setText( txt ); energieB->reset(); energieB->setAktionAnzahl( (int)( zSpieler->maxEnergie + zSpieler->team->maxEnergie ) ); energieB->aktionPlus( (int)( zSpieler->energie ) ); txt = "Reparatur:"; txt.setPrecision( getStellen( zSpieler->reparatur ) + 2 ); txt += zSpieler->reparatur; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->team->reparatur ) + 2 ); txt += zSpieler->team->reparatur; txt += ")"; reparatur->setText( txt ); txt = "Akku:"; txt.setPrecision( getStellen( zSpieler->akkuLeistung ) + 2 ); txt += zSpieler->akkuLeistung; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->team->akkuLeistung ) + 2 ); txt += zSpieler->team->akkuLeistung; txt += ")"; akkuLeistung->setText( txt ); txt = "Wendigkeit:"; txt.setPrecision( getStellen( zSpieler->wendigkeit ) + 2 ); txt += zSpieler->wendigkeit; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->team->wendigkeit ) + 2 ); txt += zSpieler->team->wendigkeit; txt += ")"; wendigkeit->setText( txt ); txt = "Beschleunigung:"; txt.setPrecision( getStellen( zSpieler->beschleunigung ) + 2 ); txt += zSpieler->beschleunigung; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->team->beschleunigung ) + 2 ); txt += zSpieler->team->beschleunigung; txt += ")"; beschleunigung->setText( txt ); txt = "Laser intensität:"; txt.setPrecision( getStellen( zSpieler->laserIntensität ) + 2 ); txt += zSpieler->laserIntensität; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->team->laserIntensität ) + 2 ); txt += zSpieler->team->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->team->laserEffizienz ) + 2 ); txt += zSpieler->team->laserEffizienz; txt += ")"; laserEffizienz->setText( txt ); txt = "Laser tempo:"; txt.setPrecision( getStellen( zSpieler->laserTempo ) + 2 ); txt += zSpieler->laserTempo; txt += "\r0xFF00FF00(+"; txt.setPrecision( getStellen( zSpieler->team->laserTempo ) + 2 ); txt += zSpieler->team->laserTempo; txt += ")"; laserTempo->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() ); laserIntensitätSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); laserEffizienzSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); laserTempoSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); netzwerkSkill->setStyle( Knopf::Style::Erlaubt, zSpieler->hatSkill() ); } int Ship::doMausEreignis( MausEreignis &me ) { me.mx -= ram->getX(); me.my -= ram->getY(); if( me.mx < 0 || me.my < 0 ) 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; 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; me.mx += ram->getX(); me.my += ram->getY(); if( aktion > 1 ) return aktion - 2; return -1; } bool Ship::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 |= laserIntensitätSkill->tick( tickVal ); ret |= laserEffizienzSkill->tick( tickVal ); ret |= laserTempoSkill->tick( tickVal ); ret |= netzwerkSkill->tick( tickVal ); return ret; } void Ship::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 ); laserIntensität->render( zRObj ); laserIntensitätSkill->render( zRObj ); laserEffizienz->render( zRObj ); laserEffizienzSkill->render( zRObj ); laserTempo->render( zRObj ); laserTempoSkill->render( zRObj ); netzwerk->render( zRObj ); netzwerkSkill->render( zRObj ); zRObj.releaseDrawOptions(); } // Reference Counting Ship *Ship::getThis() { ref++; return this; } Ship *Ship::release() { ref--; if( !ref ) delete this; return this; }