Geschoss.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. #include "Geschoss.h"
  2. #include "Spiel.h"
  3. Geschoss::Geschoss( int id, float speed, GeschossTyp typ, Richtung r, int x, int y, Spieler *besitzer )
  4. : GameObject( GESCHOSS, x, y, 15, 15 )
  5. {
  6. this->speed = speed;
  7. this->richtung = r;
  8. this->besitzer = besitzer;
  9. tunnelBenutzt = 0;
  10. umgelenkt = 0;
  11. geschosseGetroffen = 0;
  12. schalter = 0;
  13. this->id = id;
  14. setTyp( typ );
  15. }
  16. Geschoss::~Geschoss()
  17. {
  18. if( besitzer )
  19. besitzer->release();
  20. }
  21. void Geschoss::invertDirection()
  22. {
  23. richtung = invert( richtung );
  24. }
  25. void Geschoss::addUmlenkung( Spiel *zSpiel )
  26. {
  27. zSpiel->setGeschossZuletztUmgelenkt( (Geschoss *)getThis() );
  28. umgelenkt++;
  29. }
  30. void Geschoss::addGeschossTreffer( Spiel *zSpiel )
  31. {
  32. zSpiel->setGeschossZuletztGeschossGetroffen( (Geschoss *)getThis() );
  33. geschosseGetroffen++;
  34. }
  35. void Geschoss::addTunnel( Spiel *zSpiel )
  36. {
  37. zSpiel->setGeschossZuletztTunnelBenutzt( (Geschoss *)getThis() );
  38. schalter++;
  39. }
  40. void Geschoss::addSchalter()
  41. {
  42. id++;
  43. }
  44. void Geschoss::setSpeed( float speed )
  45. {
  46. this->speed = speed;
  47. }
  48. void Geschoss::setBesitzer( Spieler *besitzer )
  49. {
  50. if( this->besitzer )
  51. this->besitzer->release();
  52. this->besitzer = besitzer;
  53. }
  54. void Geschoss::setTyp( GeschossTyp typ )
  55. {
  56. this->typ = typ;
  57. if( typ == GESCHOSS_PFEIL )
  58. {
  59. if( richtung == OBEN || richtung == UNTEN )
  60. {
  61. setWidth( 7 );
  62. setHeight( 30 );
  63. }
  64. else
  65. {
  66. setWidth( 30 );
  67. setHeight( 7 );
  68. }
  69. }
  70. else if( typ == GESCHOSS_FEUERBALL )
  71. {
  72. setWidth( 20 );
  73. setHeight( 20 );
  74. }
  75. else
  76. {
  77. setWidth( 15 );
  78. setHeight( 15 );
  79. }
  80. }
  81. void Geschoss::setRichtung( Richtung r )
  82. {
  83. richtung = r;
  84. }
  85. void Geschoss::tick( double zeit )
  86. {
  87. switch( richtung )
  88. {
  89. case OBEN:
  90. y -= (float)zeit * speed;
  91. break;
  92. case UNTEN:
  93. y += (float)zeit * speed;
  94. break;
  95. case RECHTS:
  96. x += (float)zeit * speed;
  97. break;
  98. case LINKS:
  99. x -= (float)zeit * speed;
  100. break;
  101. default:
  102. break;
  103. }
  104. }
  105. GeschossTyp Geschoss::getTyp() const
  106. {
  107. return typ;
  108. }
  109. Spieler *Geschoss::zBesitzer() const
  110. {
  111. return besitzer;
  112. }
  113. Spieler *Geschoss::getBesitzer() const
  114. {
  115. return besitzer ? (Spieler *)besitzer->getThis() : 0;
  116. }
  117. Richtung Geschoss::getRichtung() const
  118. {
  119. return richtung;
  120. }
  121. FeuerballTreffer::FeuerballTreffer( int id, int x, int y, Spieler *besitzer, int maxZeit )
  122. : GameObject( FEUERBALL_TREFFER, x - 75, y - 75, 150, 150 )
  123. {
  124. this->id = id;
  125. this->besitzer = besitzer;
  126. this->timeLeft = (float)maxZeit;
  127. count = 0;
  128. }
  129. FeuerballTreffer::~FeuerballTreffer()
  130. {
  131. besitzer->release();
  132. }
  133. void FeuerballTreffer::tick( double zeit )
  134. {
  135. timeLeft -= (float)zeit;
  136. count++;
  137. }
  138. bool FeuerballTreffer::isOver() const
  139. {
  140. return timeLeft <= 0;
  141. }
  142. bool FeuerballTreffer::makeDamage() const
  143. {
  144. return count % 2;
  145. }
  146. Spieler *FeuerballTreffer::zVerursacher() const
  147. {
  148. return besitzer;
  149. }