Skill.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. #include "Skill.h"
  2. ActiveSkill::ActiveSkill( Bild *bild )
  3. : ReferenceCounter()
  4. {
  5. current.active = 0;
  6. current.time = 0;
  7. maxTime = 0;
  8. reloadTimeFactor = 1;
  9. this->bild = bild;
  10. beschleunigungBonus = 0;
  11. reparaturBonus = 0;
  12. laserIntensitätBonus = 0;
  13. laserEffizienzBonus = 0;
  14. akkuLeistungBonus = 0;
  15. maxEnergieBonus = 0;
  16. maxStabilitätBonus = 0;
  17. laserTempoBonus = 0;
  18. wendigkeitBonus = 0;
  19. antriebEffizienzBonus = 0;
  20. energieSchildBonus = 0;
  21. energieSchildEffizienzBonus = 0;
  22. beschleunigungFactor = 1;
  23. reparaturFactor = 1;
  24. laserIntensitätFactor = 1;
  25. laserEffizienzFactor = 1;
  26. akkuLeistungFactor = 1;
  27. maxEnergieFactor = 1;
  28. maxStabilitätFactor = 1;
  29. laserTempoFactor = 1;
  30. wendigkeitFactor = 1;
  31. antriebEffizienzFactor = 1;
  32. energieSchildFactor = 1;
  33. energieSchildEffizienzFactor = 1;
  34. save();
  35. }
  36. ActiveSkill::~ActiveSkill()
  37. {
  38. if( bild )
  39. bild->release();
  40. }
  41. void ActiveSkill::save()
  42. {
  43. last = current;
  44. }
  45. void ActiveSkill::load()
  46. {
  47. current = last;
  48. }
  49. void ActiveSkill::tick( double time )
  50. {
  51. if( current.active )
  52. {
  53. if( current.time < time )
  54. current.active = 0;
  55. else
  56. current.time -= time;
  57. }
  58. if( !current.active )
  59. {
  60. current.time += time * reloadTimeFactor;
  61. if( current.time > maxTime )
  62. current.time = maxTime;
  63. }
  64. }
  65. void ActiveSkill::render( int x, int y, Bild &zRObj )
  66. {
  67. zRObj.drawBildSkall( x, y, 50, 50, *bild );
  68. int length = (int)( ( current.time / maxTime ) * 50 );
  69. zRObj.fillRegion( x + length, y + 50, 50 - length, 4, 0xFF000000 );
  70. zRObj.fillRegion( x, y + 50, length, 4, 0xFFFFFFFF );
  71. }
  72. bool ActiveSkill::isActive() const
  73. {
  74. return current.active;
  75. }
  76. void ActiveSkill::activate()
  77. {
  78. current.active = 1;
  79. }
  80. void ActiveSkill::reset()
  81. {
  82. current.time = 0;
  83. current.active = 0;
  84. }
  85. double ActiveSkill::getBeschleunigungBonus()
  86. {
  87. return current.active ? beschleunigungBonus : 0;
  88. }
  89. double ActiveSkill::getReparaturBonus()
  90. {
  91. return current.active ? reparaturBonus : 0;
  92. }
  93. double ActiveSkill::getLaserIntensitätBonus()
  94. {
  95. return current.active ? laserIntensitätBonus : 0;
  96. }
  97. double ActiveSkill::getLaserEffizienzBonus()
  98. {
  99. return current.active ? laserEffizienzBonus : 0;
  100. }
  101. double ActiveSkill::getAkkuLeistungBonus()
  102. {
  103. return current.active ? akkuLeistungBonus : 0;
  104. }
  105. double ActiveSkill::getMaxEnergieBonus()
  106. {
  107. return current.active ? maxEnergieBonus : 0;
  108. }
  109. double ActiveSkill::getMaxStabilitätBonus()
  110. {
  111. return current.active ? maxStabilitätBonus : 0;
  112. }
  113. double ActiveSkill::getLaserTempoBonus()
  114. {
  115. return current.active ? laserTempoBonus : 0;
  116. }
  117. double ActiveSkill::getWendigkeitBonus()
  118. {
  119. return current.active ? wendigkeitBonus : 0;
  120. }
  121. double ActiveSkill::getAntriebEffizienzBonus()
  122. {
  123. return current.active ? antriebEffizienzBonus : 0;
  124. }
  125. double ActiveSkill::getEnergieSchildBonus()
  126. {
  127. return current.active ? energieSchildBonus : 0;
  128. }
  129. double ActiveSkill::getEnergieSchildEffizienzBonus()
  130. {
  131. return current.active ? energieSchildEffizienzBonus : 0;
  132. }
  133. double ActiveSkill::getBeschleunigungFactor()
  134. {
  135. return current.active ? beschleunigungFactor : 1;
  136. }
  137. double ActiveSkill::getReparaturFactor()
  138. {
  139. return current.active ? reparaturFactor : 1;
  140. }
  141. double ActiveSkill::getLaserIntensitätFactor()
  142. {
  143. return current.active ? laserIntensitätFactor : 1;
  144. }
  145. double ActiveSkill::getLaserEffizienzFactor()
  146. {
  147. return current.active ? laserEffizienzFactor : 1;
  148. }
  149. double ActiveSkill::getAkkuLeistungFactor()
  150. {
  151. return current.active ? akkuLeistungFactor : 1;
  152. }
  153. double ActiveSkill::getMaxEnergieFactor()
  154. {
  155. return current.active ? maxEnergieFactor : 1;
  156. }
  157. double ActiveSkill::getMaxStabilitätFactor()
  158. {
  159. return current.active ? maxStabilitätFactor : 1;
  160. }
  161. double ActiveSkill::getLaserTempoFactor()
  162. {
  163. return current.active ? laserTempoFactor : 1;
  164. }
  165. double ActiveSkill::getWendigkeitFactor()
  166. {
  167. return current.active ? wendigkeitFactor : 1;
  168. }
  169. double ActiveSkill::getAntriebEffizienzFactor()
  170. {
  171. return current.active ? antriebEffizienzFactor : 1;
  172. }
  173. double ActiveSkill::getEnergieSchildFactor()
  174. {
  175. return current.active ? energieSchildFactor : 1;
  176. }
  177. double ActiveSkill::getEnergieSchildEffizienzFactor()
  178. {
  179. return current.active ? energieSchildEffizienzFactor : 1;
  180. }
  181. SpeedBoost::SpeedBoost( Bild *bild )
  182. : ActiveSkill( bild )
  183. {
  184. beschleunigungFactor = 2;
  185. wendigkeitFactor = 2;
  186. antriebEffizienzFactor = 2;
  187. reloadTimeFactor = 0.02;
  188. maxTime = 2;
  189. }
  190. ShieldBoost::ShieldBoost( Bild *bild )
  191. : ActiveSkill( bild )
  192. {
  193. energieSchildFactor = 2;
  194. energieSchildEffizienzFactor = 2;
  195. reloadTimeFactor = 0.01;
  196. maxTime = 1;
  197. }