#include "SpielerGUI.h" SpielerGUI::SpielerGUI( ResourceRegistry *zResources ) { resources = dynamic_cast( zResources->getThis() ); spieler = 0; schrift = dynamic_cast( 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->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; } } } }