SpielObjekt.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #include "SpielObjekt.h"
  2. #include "../Define.h"
  3. #include "../../Initialisierung/Initialisierung.h"
  4. #include <Textur2D.h>
  5. // Inhalt der SpielObjekt Klasse aus SpielObjekt.h
  6. // Konstruktor
  7. SpielObjekt::SpielObjekt( ObjektStr *zStr, Schrift *zSchrift )
  8. : Model2DObject()
  9. {
  10. id = zStr->id;
  11. style = zStr->style;
  12. stabilität = zStr->maxStabilität;
  13. energie = zStr->maxEnergie;
  14. maxStabilität = zStr->maxStabilität;
  15. maxEnergie = zStr->maxEnergie;
  16. energieRadius = zStr->energieRadius;
  17. reparatur = zStr->reparatur;
  18. akkuLeistung = zStr->akkuLeistung;
  19. team = 0;
  20. nText = initTextFeld( 0, 0, 152, 30, zSchrift, TextFeld::Style::Text | TextFeld::Style::Rahmen | TextFeld::Style::Center |
  21. TextFeld::Style::Hintergrund | TextFeld::Style::HAlpha, "" );
  22. }
  23. // Destruktor
  24. SpielObjekt::~SpielObjekt()
  25. {
  26. if( team )
  27. team->release();
  28. nText->release();
  29. }
  30. // nicht constant
  31. void SpielObjekt::setTextur( Bild *textur )
  32. {
  33. Textur2D *t = new Textur2D();
  34. t->setTexturZ( textur );
  35. __super::setTextur( t );
  36. }
  37. void SpielObjekt::setTeam( Team *team )
  38. {
  39. if( this->team )
  40. this->team->release();
  41. this->team = team;
  42. }
  43. bool SpielObjekt::tick( const WeltInfo &info, double zeit )
  44. {
  45. repAbk -= zeit;
  46. if( repAbk < 0 )
  47. repAbk = 0;
  48. akkuAbk -= zeit;
  49. if( akkuAbk < 0 )
  50. akkuAbk = 0;
  51. if( !repAbk )
  52. {
  53. stabilität += reparatur * zeit;
  54. if( stabilität > maxStabilität )
  55. stabilität = maxStabilität;
  56. }
  57. if( !akkuAbk )
  58. {
  59. if( !team )
  60. {
  61. energie -= akkuLeistung * zeit;
  62. if( energie < 0 )
  63. energie = 0;
  64. }
  65. else
  66. {
  67. energie += akkuLeistung * zeit;
  68. if( energie > maxEnergie )
  69. energie = maxEnergie;
  70. }
  71. }
  72. __super::tick( info, zeit );
  73. return 1;
  74. }
  75. void SpielObjekt::render( Mat3<float> &kamMat, Bild &zRObj, const char *kamName )
  76. {
  77. if( Text( "minimap" ).istGleich( kamName ) )
  78. return;
  79. nText->setPosition( (Punkt)( kamMat * (getPosition() - Punkt( 76, (int)( zModel()->maxP.y * getSize() ) + 30 ) ) ) );
  80. nText->render( zRObj );
  81. int teamF = team ? team->farbe : 0;
  82. double teamStab = team ? team->maxStabilität : 0;
  83. double teamEner = team ? team->maxEnergie : 0;
  84. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 4, 150, teamF );
  85. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 25, 150, teamF );
  86. int l = (int)( stabilität * 100 / ( maxStabilität + teamStab ) * 1.5 + 0.5 );
  87. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 1, l, 0xFF00FF00 );
  88. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 2, l, 0xFF00FF00 );
  89. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 3, l, 0xFF00FF00 );
  90. int e = (int)( energie * 100 / ( maxEnergie + teamEner ) * 1.5 + 0.5 );
  91. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 26, e, 0xFFFFFF00 );
  92. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 27, e, 0xFFFFFF00 );
  93. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 28, e, 0xFFFFFF00 );
  94. }
  95. // constant
  96. Team *SpielObjekt::zTeam() const
  97. {
  98. return team;
  99. }