SpielObjekt.cpp 3.8 KB

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