123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428 |
- #include "SpielerGUI.h"
- #include "../../Initialisierung/Initialisierung.h"
- #include <MausEreignis.h>
- #include <Rahmen.h>
- #include <Fortschritt.h>
- 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;
- int pos = txt.getLength();
- txt += "(+";
- txt.setPrecision( getStellen( zSpieler->zteam->maxStabilität ) + 2 );
- txt += zSpieler->zteam->maxStabilität;
- txt += ")";
- stabilität->setText( txt );
- stabilität->setSchriftFarbe( pos, txt.getLength(), 0xFF00FF00 );
- 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;
- pos = txt.getLength();
- txt += "(+";
- txt.setPrecision( getStellen( zSpieler->zteam->maxEnergie ) + 2 );
- txt += zSpieler->zteam->maxEnergie;
- txt += ")";
- energie->setText( txt );
- energie->setSchriftFarbe( pos, txt.getLength(), 0xFF00FF00 );
- 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;
- pos = txt.getLength();
- txt += "(+";
- txt.setPrecision( getStellen( zSpieler->zteam->reparatur ) + 2 );
- txt += zSpieler->zteam->reparatur;
- txt += ")";
- reparatur->setText( txt );
- reparatur->setSchriftFarbe( pos, txt.getLength(), 0xFF00FF00 );
- txt = "Akku:";
- txt.setPrecision( getStellen( zSpieler->akkuLeistung ) + 2 );
- txt += zSpieler->akkuLeistung;
- pos = txt.getLength();
- txt += "(+";
- txt.setPrecision( getStellen( zSpieler->zteam->akkuLeistung ) + 2 );
- txt += zSpieler->zteam->akkuLeistung;
- txt += ")";
- akkuLeistung->setText( txt );
- akkuLeistung->setSchriftFarbe( pos, txt.getLength(), 0xFF00FF00 );
- txt = "Wendigkeit:";
- txt.setPrecision( getStellen( zSpieler->wendigkeit ) + 2 );
- txt += zSpieler->wendigkeit;
- pos = txt.getLength();
- txt += "(+";
- txt.setPrecision( getStellen( zSpieler->zteam->wendigkeit ) + 2 );
- txt += zSpieler->zteam->wendigkeit;
- txt += ")";
- wendigkeit->setText( txt );
- wendigkeit->setSchriftFarbe( pos, txt.getLength(), 0xFF00FF00 );
- txt = "Beschleunigung:";
- txt.setPrecision( getStellen( zSpieler->beschleunigung ) + 2 );
- txt += zSpieler->beschleunigung;
- pos = txt.getLength();
- txt += "(+";
- txt.setPrecision( getStellen( zSpieler->zteam->beschleunigung ) + 2 );
- txt += zSpieler->zteam->beschleunigung;
- txt += ")";
- beschleunigung->setText( txt );
- beschleunigung->setSchriftFarbe( pos, txt.getLength(), 0xFF00FF00 );
- txt = "Antrieb effizienz:";
- txt.setPrecision( getStellen( zSpieler->antriebEffizienz ) + 2 );
- txt += zSpieler->antriebEffizienz;
- pos = txt.getLength();
- txt += "(+";
- txt.setPrecision( getStellen( zSpieler->zteam->antriebEffizienz ) + 2 );
- txt += zSpieler->zteam->antriebEffizienz;
- txt += ")";
- antriebEffizienz->setText( txt );
- antriebEffizienz->setSchriftFarbe( pos, txt.getLength(), 0xFF00FF00 );
- txt = "Laser intensität:";
- txt.setPrecision( getStellen( zSpieler->laserIntensität ) + 2 );
- txt += zSpieler->laserIntensität;
- pos = txt.getLength();
- txt += "(+";
- txt.setPrecision( getStellen( zSpieler->zteam->laserIntensität ) + 2 );
- txt += zSpieler->zteam->laserIntensität;
- txt += ")";
- laserIntensität->setText( txt );
- laserIntensität->setSchriftFarbe( pos, txt.getLength(), 0xFF00FF00 );
- txt = "Laser effizienz:";
- txt.setPrecision( getStellen( zSpieler->laserEffizienz ) + 2 );
- txt += zSpieler->laserEffizienz;
- pos = txt.getLength();
- txt += "(+";
- txt.setPrecision( getStellen( zSpieler->zteam->laserEffizienz ) + 2 );
- txt += zSpieler->zteam->laserEffizienz;
- txt += ")";
- laserEffizienz->setText( txt );
- laserEffizienz->setSchriftFarbe( pos, txt.getLength(), 0xFF00FF00 );
- txt = "Laser tempo:";
- txt.setPrecision( getStellen( zSpieler->laserTempo ) + 2 );
- txt += zSpieler->laserTempo;
- pos = txt.getLength();
- txt += "(+";
- txt.setPrecision( getStellen( zSpieler->zteam->laserTempo ) + 2 );
- txt += zSpieler->zteam->laserTempo;
- txt += ")";
- laserTempo->setText( txt );
- laserTempo->setSchriftFarbe( pos, txt.getLength(), 0xFF00FF00 );
- txt = "Energie Schild:";
- txt.setPrecision( getStellen( zSpieler->energieSchild ) + 2 );
- txt += zSpieler->energieSchild;
- pos = txt.getLength();
- txt += "(+";
- txt.setPrecision( getStellen( zSpieler->zteam->energieSchild ) + 2 );
- txt += zSpieler->zteam->energieSchild;
- txt += ")";
- energieSchild->setText( txt );
- energieSchild->setSchriftFarbe( pos, txt.getLength(), 0xFF00FF00 );
- txt = "Schild effizienz:";
- txt.setPrecision( getStellen( zSpieler->energieSchildEffizienz ) + 2 );
- txt += zSpieler->energieSchildEffizienz;
- pos = txt.getLength();
- txt += "(+";
- txt.setPrecision( getStellen( zSpieler->zteam->energieSchildEffizienz ) + 2 );
- txt += zSpieler->zteam->energieSchildEffizienz;
- txt += ")";
- energieSchildEffizienz->setText( txt );
- energieSchildEffizienz->setSchriftFarbe( pos, txt.getLength(), 0xFF00FF00 );
- 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;
- }
|