SpielObjekt.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. #include "SpielObjekt.h"
  2. #include "Define.h"
  3. // Inhalt der SpielObjekt Klasse aus SpielObjekt.h
  4. // Konstruktor
  5. SpielObjekt::SpielObjekt( ObjektStr *zStr )
  6. : Model2DObject()
  7. {
  8. id = zStr->id;
  9. style = zStr->style;
  10. stability = zStr->maxStability;
  11. energie = zStr->maxEnergie;
  12. maxStability = zStr->maxStability;
  13. maxEnergie = zStr->maxEnergie;
  14. energieRadius = zStr->energieRadius;
  15. reparatur = zStr->reparatur;
  16. akkuLeistung = zStr->akkuLeistung;
  17. team = 0;
  18. amLeben = 1;
  19. level = 1;
  20. ep = 0;
  21. nextSkillEp = 80;
  22. setCollision( ( style | 0x4 ) == style );
  23. }
  24. // Destruktor
  25. SpielObjekt::~SpielObjekt()
  26. {
  27. if( team )
  28. team->release();
  29. }
  30. // nicht constant
  31. void SpielObjekt::addEp( float ep )
  32. {
  33. this->ep += ep;
  34. while( this->ep >= nextSkillEp )
  35. {
  36. level++;
  37. this->ep -= nextSkillEp;
  38. nextSkillEp *= 1.025f;
  39. }
  40. }
  41. void SpielObjekt::setTeam( Team *team )
  42. {
  43. if( this->team )
  44. this->team->release();
  45. this->team = team;
  46. }
  47. bool SpielObjekt::tick( const WeltInfo &info, double zeit )
  48. {
  49. wInfo = info;
  50. if( !amLeben )
  51. return 0;
  52. repAbk -= zeit;
  53. if( repAbk < 0 )
  54. repAbk = 0;
  55. akkuAbk -= zeit;
  56. if( akkuAbk < 0 )
  57. akkuAbk = 0;
  58. if( !repAbk )
  59. {
  60. stability += reparatur * zeit;
  61. if( stability > maxStability )
  62. stability = maxStability;
  63. }
  64. if( !akkuAbk )
  65. {
  66. if( !team )
  67. {
  68. energie -= akkuLeistung * zeit;
  69. if( energie < 0 )
  70. energie = 0;
  71. }
  72. else
  73. {
  74. energie += akkuLeistung * zeit;
  75. if( energie > maxEnergie )
  76. energie = maxEnergie;
  77. }
  78. }
  79. if( ( style | 0x2 ) != style )
  80. {
  81. speed.x = 0;
  82. speed.y = 0;
  83. rSpeed = 0;
  84. }
  85. return Model2DObject::tick( info, zeit );
  86. }
  87. bool SpielObjekt::nimmSchaden( double &intensity, int sLevel )
  88. {
  89. if( ( style | 0x1 ) != style )
  90. {
  91. intensity = 0;
  92. return 0;
  93. }
  94. double originalIntens = intensity;
  95. /*double schieldVal = intensity - intensity / calculateEnergieSchild();
  96. double schieldEVal = schieldVal / ( calculateEnergieSchildEffizienz() / 100 );
  97. if( schieldEVal > energie )
  98. {
  99. schieldEVal = energie;
  100. schieldVal = schieldEVal * ( calculateEnergieSchildEffizienz() / 100 );
  101. }
  102. intensity -= schieldVal;
  103. energie -= schieldEVal;*/
  104. stability -= intensity;
  105. akkuAbk = 1.5;
  106. repAbk = 2;
  107. if( stability <= 0 )
  108. {
  109. amLeben = 0;
  110. setCollision( 0 );
  111. stability = 0;
  112. }
  113. else
  114. {
  115. float levelFactor = (float)sLevel / (float)level;
  116. addEp( ( (float)originalIntens / 20 ) * levelFactor );
  117. }
  118. return stability == 0;
  119. }
  120. // constant
  121. bool SpielObjekt::doesCollideWithLaser() const
  122. {
  123. return ( style | 0x8 ) == style;
  124. }
  125. bool SpielObjekt::doesShotAddEp() const
  126. {
  127. return ( style | 0x20 ) == style;
  128. }
  129. Team *SpielObjekt::zTeam() const
  130. {
  131. if( ( style | 0x10 ) == style )
  132. return 0;
  133. return team;
  134. }
  135. bool SpielObjekt::istTreffer( Vec2< float > pos ) const
  136. {
  137. if( !amLeben )
  138. return 0;
  139. return istPunktInnen( pos ) || istPunktInnen( pos + wInfo.size ) || istPunktInnen( pos + Punkt( wInfo.size.x, 0 ) ) || istPunktInnen( pos + Punkt( 0, wInfo.size.y ) ) ||
  140. istPunktInnen( pos + -wInfo.size ) || istPunktInnen( pos + Punkt( -wInfo.size.x, 0 ) ) || istPunktInnen( pos + Punkt( 0, -wInfo.size.y ) ) ||
  141. istPunktInnen( pos + Punkt( -wInfo.size.x, wInfo.size.y ) ) || istPunktInnen( pos + Punkt( wInfo.size.x, -wInfo.size.y ) );
  142. }
  143. int SpielObjekt::getLevel() const
  144. {
  145. return level;
  146. }
  147. int SpielObjekt::getObjektId() const
  148. {
  149. return id;
  150. }