Bariere.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #include "Bariere.h"
  2. #include "Spiel.h"
  3. #include "Ereignis.h"
  4. Bariere::Bariere( int id, int x, int y, int breite, int height, int style, int verschiebungWeite, int autoSchaltungMaxTime, Team *team )
  5. : GameObject( BARIERE, x, y, breite, height )
  6. {
  7. this->id = id;
  8. this->style = style;
  9. this->autoSchaltungMaxTime = autoSchaltungMaxTime;
  10. autoSchaltungCurrentTime = (float)autoSchaltungMaxTime;
  11. this->verschiebungWeite = verschiebungWeite;
  12. currentWeite = 0;
  13. verschiebungAnzahl = 0;
  14. schaltungAnzahl = 0;
  15. this->team = team;
  16. }
  17. Bariere::~Bariere()
  18. {
  19. if( team )
  20. team->release();
  21. }
  22. void Bariere::setStyle( int style, bool add )
  23. {
  24. if( add )
  25. this->style |= style;
  26. else
  27. this->style &= ~style;
  28. }
  29. void Bariere::setAutoVerschiebungWeite( int pixel )
  30. {
  31. autoSchaltungMaxTime = pixel;
  32. }
  33. void Bariere::startAutoVerschiebung( Spiel *zSpiel )
  34. {
  35. if( !hatStyle( Style::AutoVerschiebung ) || hatStyle( Style::InVerschiebung ) )
  36. return;
  37. currentWeite = 0;
  38. setStyle( Style::InVerschiebung, 1 );
  39. Ereignis *e = new Ereignis( BARIERE_WIRD_VERSCHOBEN );
  40. e->addParameter( "Betroffene Bariere", getThis() );
  41. e->addParameter( "Status", new String( "Start" ) );
  42. zSpiel->throwEvent( e );
  43. }
  44. void Bariere::setAutoSchaltungMaxTime( int seconds )
  45. {
  46. autoSchaltungMaxTime = seconds;
  47. }
  48. void Bariere::startAutoSchaltung()
  49. {
  50. if( !hatStyle( Style::AutoSchaltung ) || hatStyle( Style::InSchaltung ) )
  51. return;
  52. autoSchaltungCurrentTime = (float)autoSchaltungMaxTime;
  53. setStyle( Style::InSchaltung, 1 );
  54. }
  55. void Bariere::setTeam( Team *team )
  56. {
  57. if( this->team )
  58. this->team->release();
  59. this->team = team;
  60. }
  61. void Bariere::tick( double time, Spiel* zSpiel)
  62. {
  63. if( hatStyle( Style::InSchaltung ) )
  64. {
  65. autoSchaltungCurrentTime -= (float)time;
  66. if( autoSchaltungCurrentTime < 0 )
  67. {
  68. setStyle( Style::InSchaltung, 0 );
  69. setStyle( Style::Aktiv, !hatStyle( Style::Aktiv ) );
  70. schaltungAnzahl++;
  71. Ereignis* e = new Ereignis(BARIERE_SWITCHED);
  72. e->addParameter("Betroffene Bariere", getThis());
  73. zSpiel->throwEvent(e);
  74. }
  75. }
  76. if( hatStyle( Style::InVerschiebung ) )
  77. {
  78. float last = currentWeite;
  79. currentWeite += (float)time * 10;
  80. if( currentWeite >= verschiebungWeite )
  81. {
  82. currentWeite = (float)verschiebungWeite;
  83. setStyle( Style::InVerschiebung, 0 );
  84. setStyle( Style::NextVerschiebungLinksOben, !hatStyle( Style::NextVerschiebungLinksOben ) );
  85. verschiebungAnzahl++;
  86. Ereignis* e = new Ereignis(BARIERE_WIRD_VERSCHOBEN);
  87. e->addParameter( "Betroffene Bariere", getThis() );
  88. e->addParameter( "Status", new String( "Feritg" ) );
  89. zSpiel->throwEvent(e);
  90. }
  91. if( hatStyle( Style::VerschiebungWaagerecht ) )
  92. {
  93. if( hatStyle( Style::NextVerschiebungLinksOben ) )
  94. setX( getX() + last - currentWeite );
  95. else
  96. setX( getX() - last + currentWeite );
  97. }
  98. else
  99. {
  100. if( hatStyle( Style::NextVerschiebungLinksOben ) )
  101. setY( getX() + last - currentWeite );
  102. else
  103. setY( getX() - last + currentWeite );
  104. }
  105. }
  106. }
  107. bool Bariere::hatStyle( int style ) const
  108. {
  109. return ( this->style | style ) == this->style;
  110. }
  111. int Bariere::getVerschiebungAnzahl() const
  112. {
  113. return verschiebungAnzahl;
  114. }
  115. int Bariere::getSchaltungAnzahl() const
  116. {
  117. return schaltungAnzahl;
  118. }
  119. Team *Bariere::getTeam() const
  120. {
  121. if( !team )
  122. return 0;
  123. return (Team*)team->getThis();
  124. }
  125. Team *Bariere::zTeam() const
  126. {
  127. return team;
  128. }