Umlenkung.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #include "Umlenkung.h"
  2. #include "Spiel.h"
  3. Umlenkung::Umlenkung( ResourceRegistry *zResources, int id, int x, int y, int breite, int height, Richtung richtung, int maxAbklingzeit, bool drehend, bool aktiv )
  4. : GameObject( UMLENKUNG, x, y, breite, height )
  5. {
  6. this->id = id;
  7. this->maxAbklingzeit = maxAbklingzeit;
  8. this->drehend = drehend;
  9. this->aktiv = aktiv;
  10. benutzt = 0;
  11. abklingzeitVerbleibend = 0;
  12. this->resources = dynamic_cast<ResourceRegistry *>( zResources->getThis() );
  13. setRichtung( richtung );
  14. }
  15. Umlenkung::~Umlenkung()
  16. {
  17. resources->release();
  18. }
  19. void Umlenkung::setMaxAbklingzeit( int sekunden )
  20. {
  21. this->maxAbklingzeit = sekunden;
  22. }
  23. void Umlenkung::setAktiv( bool aktiv )
  24. {
  25. this->aktiv = aktiv;
  26. }
  27. void Umlenkung::setDrehend( bool drehend )
  28. {
  29. this->drehend = drehend;
  30. }
  31. void Umlenkung::setRichtung( Richtung r )
  32. {
  33. this->richtung = r;
  34. if( textur )
  35. textur->release();
  36. if( richtung == RECHTS )
  37. textur = dynamic_cast<Bild *>( resources->zResource( R_UMLENKUNG, 0 )->getImages()->getThis() );
  38. else if( richtung == LINKS )
  39. {
  40. Bild *r = resources->zResource( R_UMLENKUNG, 0 )->getImages();
  41. this->textur = new Bild();
  42. this->textur->neuBild( r->getBreite(), r->getHeight(), 0 );
  43. this->textur->drawBild180( 0, 0, r->getBreite(), r->getHeight(), *r );
  44. }
  45. else
  46. {
  47. Bild *r = resources->zResource( R_UMLENKUNG, 0 )->getImages();
  48. this->textur = new Bild();
  49. this->textur->neuBild( r->getHeight(), r->getBreite(), 0 );
  50. if( richtung == UNTEN )
  51. this->textur->drawBild90( 0, 0, r->getHeight(), r->getBreite(), *r );
  52. else
  53. this->textur->drawBild270( 0, 0, r->getHeight(), r->getBreite(), *r );
  54. }
  55. }
  56. void Umlenkung::addBenutzt( Spiel *zSpiel )
  57. {
  58. benutzt++;
  59. if( drehend )
  60. {
  61. switch( richtung )
  62. {
  63. case OBEN:
  64. setRichtung( RECHTS );
  65. break;
  66. case RECHTS:
  67. setRichtung( UNTEN );
  68. break;
  69. case UNTEN:
  70. setRichtung( LINKS );
  71. break;
  72. case LINKS:
  73. setRichtung( OBEN );
  74. break;
  75. default:
  76. break;
  77. }
  78. }
  79. abklingzeitVerbleibend = (float)maxAbklingzeit;
  80. zSpiel->setUmlenkungZuletztBenutzt( dynamic_cast<Umlenkung *>( getThis() ) );
  81. }
  82. void Umlenkung::tick( double time )
  83. {
  84. if( abklingzeitVerbleibend > 0 )
  85. {
  86. abklingzeitVerbleibend -= (float)time;
  87. if( abklingzeitVerbleibend < 0 )
  88. abklingzeitVerbleibend = 0;
  89. }
  90. }
  91. void Umlenkung::render( Bild &rObj )
  92. {
  93. if( !aktiv )
  94. rObj.setAlpha( 0x77 );
  95. GameObject::render( rObj );
  96. if( !aktiv )
  97. rObj.releaseAlpha();
  98. }
  99. bool Umlenkung::isAktive() const
  100. {
  101. return aktiv;
  102. }
  103. bool Umlenkung::hatAbklingzeit() const
  104. {
  105. return abklingzeitVerbleibend > 0;
  106. }
  107. bool Umlenkung::istDrehend() const
  108. {
  109. return drehend;
  110. }
  111. int Umlenkung::getMaxAbklingzeit() const
  112. {
  113. return maxAbklingzeit;
  114. }
  115. Richtung Umlenkung::getRichtung() const
  116. {
  117. return richtung;
  118. }
  119. int Umlenkung::getBenutzungen() const
  120. {
  121. return benutzt;
  122. }
  123. int Umlenkung::getId() const
  124. {
  125. return id;
  126. }