#include "SpielObjekt.h" #include "../Define.h" #include "../../Initialisierung/Initialisierung.h" // Inhalt der SpielObjekt Klasse aus SpielObjekt.h // Konstruktor SpielObjekt::SpielObjekt( ZeichnungStr *zStr, Schrift *zSchrift ) { pos = zStr->pos; id = zStr->id; mdl = new Model2D(); mdl->setStyle( Model2D::Style::Sichtbar | Model2D::Style::Textur ); 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, "" ); ref = 1; } // Destruktor SpielObjekt::~SpielObjekt() { mdl->release(); if( team ) team->release(); nText->release(); } // nicht constant void SpielObjekt::setModelData( Model2DData *data ) { mdl->setModel( data ); } void SpielObjekt::setTextur( Bild *textur ) { mdl->setTextur( textur ); } void SpielObjekt::setTeam( Team *team ) { if( this->team ) this->team->release(); this->team = team; } void SpielObjekt::tick() { repAbk -= TICK; if( repAbk < 0 ) repAbk = 0; akkuAbk -= TICK; if( akkuAbk < 0 ) akkuAbk = 0; if( !repAbk ) { stabilität += reparatur * TICK; if( stabilität > maxStabilität ) stabilität = maxStabilität; } if( !akkuAbk ) { if( !team ) { energie -= akkuLeistung * TICK; if( energie < 0 ) energie = 0; } else { energie += akkuLeistung * TICK; if( energie > maxEnergie ) energie = maxEnergie; } } } void SpielObjekt::render( Bild &zRObj ) { mdl->render( zRObj ); } void SpielObjekt::renderLeben( Bild &zRObj ) { nText->setPosition( mdl->getPosition() - Punkt( 76, (int)( mdl->zModel()->maxP.y * mdl->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; } // Reference Counting SpielObjekt *SpielObjekt::getThis() { ref++; return this; } SpielObjekt *SpielObjekt::release() { ref--; if( !ref ) delete this; return 0; }