123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- #include "SpielerGUI.h"
- SpielerGUI::SpielerGUI( ResourceRegistry *zResources )
- {
- resources = dynamic_cast<ResourceRegistry *>( zResources->getThis() );
- spieler = 0;
- schrift = dynamic_cast<Schrift *>( zResources->getUIFactory().initParam.schrift->getThis() );
- erf = zResources->zResource( R_GUI_ERF, 0 )->getImage( 0 );
- erfRand = zResources->zResource( R_GUI_ERF_RAND, 0 )->getImage( 0 );
- ausw = zResources->zResource( R_GUI_INVENTAR_AUSWAHL, 0 )->getImage( 0 );
- invBg = zResources->zResource( R_GUI_INVENTAR_HINTERGRUND, 0 )->getImage( 0 );
- invBgUsed = zResources->zResource( R_GUI_INVENTAR_HINTERGRUND_BENUTZT, 0 )->getImage( 0 );
- lebenRand = zResources->zResource( R_GUI_LEBEN_RAND, 0 )->getImage( 0 );
- levelRand = zResources->zResource( R_GUI_LEVEL_RAND, 0 )->getImage( 0 );
- spielerBild = zResources->zResource( R_GUI_SPIELER, 0 )->getImage( 0 );
- levelT = zResources->getUIFactory().createTextFeld( zResources->getUIFactory().initParam );
- levelT->setStyle( TextFeld::Style::Text | TextFeld::Style::Center );
- levelT->setText( "0" );
- levelT->setSize( 75, 20 );
- levelT->setPosition( 162, 0 );
- lebenB = zResources->getUIFactory().createFBalken( zResources->getUIFactory().initParam );
- lebenB->setStyle( FBalken::Style::Sichtbar | FBalken::Style::FFarbe | FBalken::Style::L_R | FBalken::Style::Aktionen );
- lebenB->setSize( 178, 18 );
- lebenB->setPosition( 111, 31 );
- itemAnzahlT = zResources->getUIFactory().createTextFeld( zResources->getUIFactory().initParam );
- itemAnzahlT->setStyle( TextFeld::Style::Text );
- itemAnzahlT->setSchriftZ( dynamic_cast<Schrift *>( schrift->getThis() ) );
- itemAnzahlT->setSize( 40, 20 );
- spielerInfo = zResources->getUIFactory().createTextFeld( zResources->getUIFactory().initParam );
- spielerInfo->setStyle( TextFeld::Style::Text );
- spielerInfo->setSchriftFarbe( 0xFFA0A0A0 );
- spielerInfo->setSize( 290, 170 );
- spielerInfo->setPosition( 5, 225 );
- }
- SpielerGUI::~SpielerGUI()
- {
- if( spieler )
- spieler->release();
- schrift->release();
- erf->release();
- erfRand->release();
- ausw->release();
- invBg->release();
- invBgUsed->release();
- lebenRand->release();
- levelRand->release();
- spielerBild->release();
- levelT->release();
- lebenB->release();
- resources->release();
- itemAnzahlT->release();
- spielerInfo->release();
- }
- void SpielerGUI::setSpieler( Spieler *spieler )
- {
- if( this->spieler )
- this->spieler->release();
- this->spieler = spieler;
- int *buffer = spielerBild->getBuffer();
- for( int i = 0; i < spielerBild->getBreite() * spielerBild->getHeight(); i++ )
- {
- if( buffer[ i ] == 0xFF202020 )
- buffer[ i ] = spieler->getFarbe();
- if( buffer[ i ] == 0xFF404040 && spieler->zTeam() )
- buffer[ i ] = spieler->zTeam()->getFarbe();
- }
- }
- void SpielerGUI::render( Bild &rObj )
- {
- if( !spieler )
- return;
- rObj.drawBild( 0, 0, 100, 100, *spielerBild );
- rObj.drawBild( 162, 0, 75, 20, *levelRand );
- levelT->setText( Text( "Level " ) + spieler->getLevel() );
- levelT->render( rObj );
- rObj.drawBild( 105, 25, 190, 30, *lebenRand );
- lebenB->reset();
- lebenB->setAktionAnzahl( spieler->getMaxLeben() );
- lebenB->aktionPlus( (int)spieler->getLeben() );
- lebenB->render( rObj );
- rObj.drawBild( 120, 60, 160, 25, *erfRand );
- int erfBreite = (int)( ( 150.f / spieler->getMaxErfahrung() ) * spieler->getErfahrung() );
- rObj.drawBildSkall( 125, 65, erfBreite, 15, *erf );
- rObj.fillRegion( 37, 105, 225, 115, 0xFFA36629 );
- for( int i = 0; i < 8; i++ )
- {
- int x = 42 + 55 * ( i % 4 );
- int y = 110 + 55 * ( i / 4 );
- if( spieler->getInventory().getSelectedIndex() == i )
- rObj.drawBild( x - 5, y - 5, 60, 60, *ausw );
- if( spieler->getInventory().getItemTyp( i ) == KEIN_GEGENSTAND )
- rObj.drawBild( x, y, 50, 50, *invBg );
- else
- {
- rObj.drawBild( x, y, 50, 50, *invBgUsed );
- rObj.alphaBild( x, y, 50, 50, *zResourceOfItem( spieler->getInventory().getItemTyp( i ), resources )->zImage( 0 ) );
- if( spieler->getInventory().getAbklingzeit( i ) > 0 )
- {
- itemAnzahlT->setSchriftFarbe( 0xFFFF0000 );
- itemAnzahlT->setText( Text( (int)( spieler->getInventory().getAbklingzeit( i ) * 100 ) / 100.f ) );
- }
- else
- {
- itemAnzahlT->setSchriftFarbe( 0xFFFFFFFF );
- itemAnzahlT->setText( Text( spieler->getInventory().getItemAnzahl( spieler->getInventory().getItemTyp( i ) ) ) );
- }
- itemAnzahlT->setPosition( x + 5, y );
- itemAnzahlT->render( rObj );
- }
- }
- Text info = Text( "Eigenschaften:\n" ) +
- "Lauftempo: " + (int)spieler->getLaufTempo() + " pixel/s\n" +
- "Geschosstempo: " + (int)spieler->getGeschossTempo() + " pixel/s\n" +
- "Rüstung: " + (int)spieler->getArmor() + " %\n" +
- "Bonusschaden: " + (int)spieler->getSchadenBonus() + " %\n" +
- "Lebensraub: " + (int)spieler->getLebensRaub() + " %\n" +
- "Lebensregeneration: " + ( (int)( spieler->getLebensRegenneration() * 100 ) / 100.f ) + " /s\n" +
- "Abklingzeitverringerung: " + (int)spieler->getAbklingZeitVerringerung();
- spielerInfo->setText( info );
- spielerInfo->render( rObj );
- int x = spielerInfo->getX();
- int y = spielerInfo->getY() + spielerInfo->getHeight() + 5;
- for( auto e = spieler->getEffects(); e; e++ )
- {
- if( e->renderEffect( x, y, 50, 50, rObj, schrift ) )
- {
- x += 55;
- if( x >= 245 )
- {
- x = 5;
- y += 55;
- }
- }
- }
- }
|