123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- #include "SpielObjekt.h"
- #include "../Define.h"
- #include "../../Initialisierung/Initialisierung.h"
- #include <Textur2D.h>
- // Inhalt der SpielObjekt Klasse aus SpielObjekt.h
- // Konstruktor
- SpielObjekt::SpielObjekt( ObjektStr *zStr, UIInit &uiFactory )
- : Model2DObject()
- {
- id = zStr->id;
- position = zStr->pos;
- rotation = zStr->rot;
- size = zStr->scale;
- 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;
- zteam = 0;
- amLeben = 1;
- level = 1;
- ep = 0;
- nextSkillEp = 80;
- setCollision( ( style | 0x4 ) == style );
- deadPlayer = 0;
- nText = initTextFeld( 0, 0, 152, 30, uiFactory, TextFeld::Style::Text | TextFeld::Style::Rahmen | TextFeld::Style::Center |
- TextFeld::Style::Hintergrund | TextFeld::Style::HAlpha, "" );
- save();
- }
- // Destruktor
- SpielObjekt::~SpielObjekt()
- {
- nText->release();
- if( deadPlayer )
- deadPlayer->release();
- }
- // nicht constant
- void SpielObjekt::save()
- {
- last.rSpeed = rSpeed;
- last.pos = position;
- last.speed = speed;
- last.rotation = rotation;
- last.amLeben = amLeben;
- last.akkuAbk = akkuAbk;
- last.repAbk = repAbk;
- last.energie = energie;
- last.stabilität = stabilität;
- last.reparatur = reparatur;
- last.akkuLeistung = akkuLeistung;
- last.maxEnergie = maxEnergie;
- last.maxStabilität = maxStabilität;
- last.level = level;
- }
- void SpielObjekt::load()
- {
- rSpeed = last.rSpeed;
- position = last.pos;
- speed = last.speed;
- rotation = last.rotation;
- amLeben = last.amLeben;
- akkuAbk = last.akkuAbk;
- repAbk = last.repAbk;
- energie = last.energie;
- stabilität = last.stabilität;
- reparatur = last.reparatur;
- akkuLeistung = last.akkuLeistung;
- maxEnergie = last.maxEnergie;
- maxStabilität = last.maxStabilität;
- level = last.level;
- }
- void SpielObjekt::setTextur( Bild *textur )
- {
- Textur2D *t = new Textur2D();
- t->setTexturZ( textur );
- __super::setTextur( t );
- }
- void SpielObjekt::setTeam( Team *team )
- {
- this->zteam = team;
- nText->setHintergrundFarbe( 0xA0000000 | ( zteam->farbe & 0x00FFFFFF ) );
- nText->setRahmenFarbe( zteam->farbe );
- }
- bool SpielObjekt::tick( const WeltInfo &info, double zeit )
- {
- if( !amLeben )
- return 0;
- 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( !zteam )
- {
- energie -= akkuLeistung * zeit;
- if( energie < 0 )
- energie = 0;
- }
- else
- {
- energie += akkuLeistung * zeit;
- if( energie > maxEnergie )
- energie = maxEnergie;
- }
- }
- if( ( style | 0x2 ) != style )
- {
- speed.x = 0;
- speed.y = 0;
- rSpeed = 0;
- }
- return Model2DObject::tick( info, zeit );
- }
- void SpielObjekt::render( Mat3<float> &kamMat, Bild &zRObj, const char *kamName )
- {
- if( !amLeben )
- return;
- Model2DObject::render( kamMat, zRObj, kamName );
- if( Text( "minimap" ).istGleich( kamName ) || ( style | 0x40 ) != style )
- return;
- nText->setPosition( (Punkt)( kamMat * ( getPosition() - Punkt( 76, (int)( zModel()->maxP.y * getSize() ) + 30 ) ) ) );
- nText->setText( Text( " (" ) + level + ")" );
- nText->render( zRObj );
- int teamF = zteam ? zteam->farbe : 0;
- double teamStab = zteam ? zteam->maxStabilität : 0;
- double teamEner = zteam ? zteam->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 );
- }
- void SpielObjekt::nimmSchaden( double &intensity, int sLevel )
- {
- if( ( style | 0x1 ) != style )
- {
- intensity = 0;
- return;
- }
- double originalIntens = intensity;
- /*double schieldVal = intensity - intensity / calculateEnergieSchild();
- double schieldEVal = schieldVal / ( calculateEnergieSchildEffizienz() / 100 );
- if( schieldEVal > energie )
- {
- schieldEVal = energie;
- schieldVal = schieldEVal * ( calculateEnergieSchildEffizienz() / 100 );
- }
- intensity -= schieldVal;
- energie -= schieldEVal;*/
- stabilität -= intensity;
- akkuAbk = 1.5;
- repAbk = 2;
- if( stabilität > 0 && doesShotAddEp() )
- {
- float levelFactor = (float)sLevel / (float)level;
- addEp( ( (float)originalIntens / 20 ) * levelFactor );
- }
- }
- void SpielObjekt::addEp( float ep )
- {
- this->ep += ep;
- while( this->ep >= nextSkillEp )
- {
- level++;
- this->ep -= nextSkillEp;
- nextSkillEp *= 1.025f;
- }
- }
- void SpielObjekt::calcDeadPlayerObject( Laser *zSchuss )
- {
- Vertex hp;
- Polygon2D a;
- Polygon2D b;
- Punkt pa;
- Punkt pb;
- if( calcHitPoint( zSchuss->getPosition() - zSchuss->getSpeed(), zSchuss->getSpeed(), hp ) )
- {
- if( zModel()->split( getObjectPos( hp ), getObjectDir( zSchuss->getSpeed() ) * 0.1f, "ship", a, b, pa, pb, []()
- {
- return rand() / (double)RAND_MAX;
- } ) )
- {
- hp = ( hp * getSize() ).rotation( getDrehung() ) + getPosition();
- pa = pa.rotation( getDrehung() ) + getPosition();
- pb = pb.rotation( getDrehung() ) + getPosition();
- Array< Polygon2D > *npaA = new Array< Polygon2D >();
- npaA->add( a );
- Model2DData *npdA = new Model2DData();
- npdA->erstelleModell( npaA );
- Array< Polygon2D > *npaB = new Array< Polygon2D >();
- npaB->add( b );
- Model2DData *npdB = new Model2DData();
- npdB->erstelleModell( npaB );
- if( deadPlayer )
- deadPlayer->release();
- deadPlayer = new DeadPlayer( npdA, npdB, pa, pb, getSpeed() * ( rand() / (float)RAND_MAX ), getSpeed() * ( rand() / (float)RAND_MAX ), getDrehung(), getDrehung(), getDrehungSpeed() * ( rand() / (float)RAND_MAX ), getDrehungSpeed() * ( rand() / (float)RAND_MAX ), zTextur( "ship" ) );
- }
- }
- }
- DeadPlayer *SpielObjekt::sterben()
- {
- amLeben = 0;
- setCollision( 0 );
- stabilität = 0;
- return deadPlayer ? dynamic_cast<DeadPlayer *>( deadPlayer->getThis() ) : 0;
- }
- // constant
- Team *SpielObjekt::zTeam() const
- {
- if( ( style | 0x10 ) == style )
- return 0;
- return zteam;
- }
- bool SpielObjekt::doesShotAddEp() const
- {
- return ( style | 0x20 ) == style;;
- }
- int SpielObjekt::getLevel() const
- {
- return level;
- }
- int SpielObjekt::getObjektId() const
- {
- return id;
- }
|