SpielObjekt.cpp 3.0 KB

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