SpielObjekt.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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( ZeichnungStr *zStr, Schrift *zSchrift )
  8. {
  9. pos = zStr->pos;
  10. id = zStr->id;
  11. mdl = new Model2D();
  12. mdl->setStyle( Model2D::Style::Sichtbar | Model2D::Style::Textur );
  13. style = zStr->style;
  14. stabilität = zStr->maxStabilität;
  15. energie = zStr->maxEnergie;
  16. maxStabilität = zStr->maxStabilität;
  17. maxEnergie = zStr->maxEnergie;
  18. energieRadius = zStr->energieRadius;
  19. reparatur = zStr->reparatur;
  20. akkuLeistung = zStr->akkuLeistung;
  21. team = 0;
  22. nText = initTextFeld( 0, 0, 152, 30, zSchrift, TextFeld::Style::Text | TextFeld::Style::Rahmen | TextFeld::Style::Center |
  23. TextFeld::Style::Hintergrund | TextFeld::Style::HAlpha, "" );
  24. ref = 1;
  25. }
  26. // Destruktor
  27. SpielObjekt::~SpielObjekt()
  28. {
  29. mdl->release();
  30. if( team )
  31. team->release();
  32. nText->release();
  33. }
  34. // nicht constant
  35. void SpielObjekt::setModelData( Model2DData *data )
  36. {
  37. mdl->setModel( data );
  38. }
  39. void SpielObjekt::setTextur( Bild *textur )
  40. {
  41. Textur2D *t = new Textur2D();
  42. t->setTexturZ( textur );
  43. mdl->setTextur( t );
  44. }
  45. void SpielObjekt::setTeam( Team *team )
  46. {
  47. if( this->team )
  48. this->team->release();
  49. this->team = team;
  50. }
  51. void SpielObjekt::tick()
  52. {
  53. repAbk -= TICK;
  54. if( repAbk < 0 )
  55. repAbk = 0;
  56. akkuAbk -= TICK;
  57. if( akkuAbk < 0 )
  58. akkuAbk = 0;
  59. if( !repAbk )
  60. {
  61. stabilität += reparatur * TICK;
  62. if( stabilität > maxStabilität )
  63. stabilität = maxStabilität;
  64. }
  65. if( !akkuAbk )
  66. {
  67. if( !team )
  68. {
  69. energie -= akkuLeistung * TICK;
  70. if( energie < 0 )
  71. energie = 0;
  72. }
  73. else
  74. {
  75. energie += akkuLeistung * TICK;
  76. if( energie > maxEnergie )
  77. energie = maxEnergie;
  78. }
  79. }
  80. }
  81. void SpielObjekt::render( Bild &zRObj )
  82. {
  83. mdl->render( zRObj );
  84. }
  85. void SpielObjekt::renderLeben( Bild &zRObj )
  86. {
  87. nText->setPosition( mdl->getPosition() - Punkt( 76, (int)( mdl->zModel()->maxP.y * mdl->getSize() ) + 30 ) );
  88. nText->render( zRObj );
  89. int teamF = team ? team->farbe : 0;
  90. double teamStab = team ? team->maxStabilität : 0;
  91. double teamEner = team ? team->maxEnergie : 0;
  92. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 4, 150, teamF );
  93. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 25, 150, teamF );
  94. int l = (int)( stabilität * 100 / ( maxStabilität + teamStab ) * 1.5 + 0.5 );
  95. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 1, l, 0xFF00FF00 );
  96. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 2, l, 0xFF00FF00 );
  97. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 3, l, 0xFF00FF00 );
  98. int e = (int)( energie * 100 / ( maxEnergie + teamEner ) * 1.5 + 0.5 );
  99. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 26, e, 0xFFFFFF00 );
  100. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 27, e, 0xFFFFFF00 );
  101. zRObj.drawLinieH( nText->getX() + 1, nText->getY() + 28, e, 0xFFFFFF00 );
  102. }
  103. // constant
  104. Team *SpielObjekt::zTeam() const
  105. {
  106. return team;
  107. }
  108. // Reference Counting
  109. SpielObjekt *SpielObjekt::getThis()
  110. {
  111. ref++;
  112. return this;
  113. }
  114. SpielObjekt *SpielObjekt::release()
  115. {
  116. ref--;
  117. if( !ref )
  118. delete this;
  119. return 0;
  120. }