#include "SpielObjekt.h" #include "../Define.h" #include "../../Initialisierung/Initialisierung.h" #include // Inhalt der SpielObjekt Klasse aus SpielObjekt.h // Konstruktor SpielObjekt::SpielObjekt( ObjektStr *zStr, Schrift *zSchrift ) : Model2DObject() { id = zStr->id; style = zStr->style; stabilität = zStr->maxStabilität; energie = zStr->maxEnergie; maxStabilität = zStr->maxStabilität; maxEnergie = zStr->maxEnergie; energieRadius = zStr->energieRadius; reparatur = zStr->reparatur; akkuLeistung = zStr->akkuLeistung; team = 0; nText = initTextFeld( 0, 0, 152, 30, zSchrift, TextFeld::Style::Text | TextFeld::Style::Rahmen | TextFeld::Style::Center | TextFeld::Style::Hintergrund | TextFeld::Style::HAlpha, "" ); } // Destruktor SpielObjekt::~SpielObjekt() { if( team ) team->release(); nText->release(); } // nicht constant void SpielObjekt::setTextur( Bild *textur ) { Textur2D *t = new Textur2D(); t->setTexturZ( textur ); __super::setTextur( t ); } void SpielObjekt::setTeam( Team *team ) { if( this->team ) this->team->release(); this->team = team; } bool SpielObjekt::tick( const WeltInfo &info, double zeit ) { repAbk -= zeit; if( repAbk < 0 ) repAbk = 0; akkuAbk -= zeit; if( akkuAbk < 0 ) akkuAbk = 0; if( !repAbk ) { stabilität += reparatur * zeit; if( stabilität > maxStabilität ) stabilität = maxStabilität; } if( !akkuAbk ) { if( !team ) { energie -= akkuLeistung * zeit; if( energie < 0 ) energie = 0; } else { energie += akkuLeistung * zeit; if( energie > maxEnergie ) energie = maxEnergie; } } __super::tick( info, zeit ); return 1; } void SpielObjekt::render( Mat3 &kamMat, Bild &zRObj, const char *kamName ) { if( Text( "minimap" ).istGleich( kamName ) ) return; nText->setPosition( (Punkt)( kamMat * (getPosition() - Punkt( 76, (int)( zModel()->maxP.y * getSize() ) + 30 ) ) ) ); nText->render( zRObj ); int teamF = team ? team->farbe : 0; double teamStab = team ? team->maxStabilität : 0; double teamEner = team ? team->maxEnergie : 0; zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 4, 150, teamF ); zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 25, 150, teamF ); int l = (int)( stabilität * 100 / ( maxStabilität + teamStab ) * 1.5 + 0.5 ); zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 1, l, 0xFF00FF00 ); zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 2, l, 0xFF00FF00 ); zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 3, l, 0xFF00FF00 ); int e = (int)( energie * 100 / ( maxEnergie + teamEner ) * 1.5 + 0.5 ); zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 26, e, 0xFFFFFF00 ); zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 27, e, 0xFFFFFF00 ); zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 28, e, 0xFFFFFF00 ); } // constant Team *SpielObjekt::zTeam() const { return team; }