Sturm.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "Sturm.h"
  2. #include "Spieler.h"
  3. #include "Spiel.h"
  4. SturmEffect::SturmEffect( ResourceRegistry *zResources, Spieler *zSpieler, Richtung r )
  5. : Effect( zSpieler, 2.f + ( 2.f / 100.f ) * zSpieler->getAbklingZeitVerringerung() )
  6. {
  7. this->r = r;
  8. annimation = 0;
  9. if( r == LINKS )
  10. annimation = zResources->getResource( R_STURM_LINKS, zSpieler->getFarbe() );
  11. if( r == RECHTS )
  12. annimation = zResources->getResource( R_STURM_RECHTS, zSpieler->getFarbe() );
  13. if( r == OBEN )
  14. annimation = zResources->getResource( R_STURM_OBEN, zSpieler->getFarbe() );
  15. if( r == UNTEN )
  16. annimation = zResources->getResource( R_STURM_UNTEN, zSpieler->getFarbe() );
  17. }
  18. SturmEffect::~SturmEffect()
  19. {
  20. if( annimation )
  21. annimation->release();
  22. }
  23. bool SturmEffect::istSpielerBeweglich( Richtung r )
  24. {
  25. return false;
  26. }
  27. bool SturmEffect::istSpielerVerwundbar( Richtung r )
  28. {
  29. return r != this->r;
  30. }
  31. void SturmEffect::move( double time )
  32. {
  33. switch( r )
  34. {
  35. case OBEN:
  36. zSpieler->setY( zSpieler->getY() - ( 75 + zSpieler->getLaufTempo() ) * (float)time );
  37. break;
  38. case RECHTS:
  39. zSpieler->setX( zSpieler->getX() + ( 75 + zSpieler->getLaufTempo() ) * (float)time );
  40. break;
  41. case UNTEN:
  42. zSpieler->setY( zSpieler->getY() + ( 75 + zSpieler->getLaufTempo() ) * (float)time );
  43. break;
  44. case LINKS:
  45. zSpieler->setX( zSpieler->getX() - ( 75 + zSpieler->getLaufTempo() ) * (float)time );
  46. break;
  47. default:
  48. break;
  49. }
  50. }
  51. bool SturmEffect::tick( double time, Spiel *zSpiel )
  52. {
  53. for( auto s = zSpiel->getSpieler(); s; s++ )
  54. {
  55. if( s->zTeam() != zSpieler->zTeam() )
  56. {
  57. if( s->intersectsWith( zSpieler ) )
  58. s->nimmSchaden( 100 * (float)time, zSpieler, r, zSpiel );
  59. }
  60. }
  61. return Effect::tick( time, zSpiel );
  62. }
  63. bool SturmEffect::istGegenstandErlaubt( GegenstandTyp typ )
  64. {
  65. return typ != ROLLE && typ != ENTERHAKEN;
  66. }
  67. Resource *SturmEffect::getCurrentResource()
  68. {
  69. return annimation ? annimation->getThis() : 0;
  70. }