Sturm.cpp 2.1 KB

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