Sturm.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. effectImage = zResources->zResource( R_STURM, 0 )->getImage( 0 );
  18. }
  19. SturmEffect::~SturmEffect()
  20. {
  21. if( annimation )
  22. annimation->release();
  23. }
  24. bool SturmEffect::istSpielerBeweglich( Richtung r ) const
  25. {
  26. return false;
  27. }
  28. bool SturmEffect::istSpielerVerwundbar( Richtung r ) const
  29. {
  30. return r != this->r;
  31. }
  32. void SturmEffect::move( Richtung ri, double time )
  33. {
  34. if( r != ri )
  35. return;
  36. switch( r )
  37. {
  38. case OBEN:
  39. zSpieler->setY( zSpieler->getY() - ( 75 + zSpieler->getLaufTempo() ) * (float)time );
  40. break;
  41. case RECHTS:
  42. zSpieler->setX( zSpieler->getX() + ( 75 + zSpieler->getLaufTempo() ) * (float)time );
  43. break;
  44. case UNTEN:
  45. zSpieler->setY( zSpieler->getY() + ( 75 + zSpieler->getLaufTempo() ) * (float)time );
  46. break;
  47. case LINKS:
  48. zSpieler->setX( zSpieler->getX() - ( 75 + zSpieler->getLaufTempo() ) * (float)time );
  49. break;
  50. default:
  51. break;
  52. }
  53. }
  54. bool SturmEffect::tick( double time, Spiel *zSpiel )
  55. {
  56. for( auto s = zSpiel->getSpieler(); s; s++ )
  57. {
  58. if( s->zTeam() != zSpieler->zTeam() )
  59. {
  60. if( s->intersectsWith( zSpieler ) )
  61. s->nimmSchaden( 100 * (float)time, zSpieler, r, zSpiel );
  62. }
  63. }
  64. return Effect::tick( time, zSpiel );
  65. }
  66. bool SturmEffect::istGegenstandErlaubt( GegenstandTyp typ ) const
  67. {
  68. return typ != ROLLE && typ != ENTERHAKEN;
  69. }
  70. Resource *SturmEffect::getCurrentResource()
  71. {
  72. return annimation ? dynamic_cast<Resource *>( annimation->getThis() ) : 0;
  73. }