Timer.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #include "Timer.h"
  2. #include "Spiel.h"
  3. Timer::Timer( Schrift *zSchrift, int id, const char *name, int maxZeit, int x, int y, bool visible, bool autoWiederhohlung, bool runns, int farbe )
  4. : GameObject( TIMER, x, y, 0, 0 )
  5. {
  6. this->id = id;
  7. this->name = name;
  8. this->maxZeit = maxZeit;
  9. currentTime = (float)maxZeit;
  10. sichtbar = visible;
  11. this->autoWiederhohlung = autoWiederhohlung;
  12. tr.setSchriftSize( 12 );
  13. tr.setSchriftZ( zSchrift->getThis() );
  14. this->runns = runns;
  15. this->pause = 0;
  16. this->farbe = farbe;
  17. }
  18. void Timer::start( Spiel *zSpiel, bool restart )
  19. {
  20. if( runns && !restart )
  21. return;
  22. currentTime = (float)maxZeit;
  23. runns = true;
  24. pause = 0;
  25. zSpiel->setTimerZuletztGestartet( (Timer *)getThis() );
  26. Ereignis *e = new Ereignis( TIMER_BEGINNT );
  27. e->addParameter( "Betroffener Timer", this->getThis() );
  28. zSpiel->throwEvent( e );
  29. }
  30. void Timer::setPause( Spiel *zSpiel, bool pause )
  31. {
  32. if( pause && !this->pause )
  33. zSpiel->setTimerZuletztPausiert( (Timer *)getThis() );
  34. if( !pause && this->pause )
  35. zSpiel->setTimerZuletztFortgesetzt( (Timer *)getThis() );
  36. this->pause = pause;
  37. }
  38. void Timer::setMaxZeit( int sekunden )
  39. {
  40. this->maxZeit = maxZeit;
  41. }
  42. void Timer::setAutoWiederhohlung( bool wiederhohlung )
  43. {
  44. this->autoWiederhohlung = autoWiederhohlung;
  45. }
  46. void Timer::setSichtbar( bool visible )
  47. {
  48. this->sichtbar = sichtbar;
  49. }
  50. void Timer::setFarbe( int farbe )
  51. {
  52. this->farbe = farbe;
  53. }
  54. void Timer::tick( double time, Spiel *zSpiel )
  55. {
  56. if( runns && !pause )
  57. {
  58. currentTime -= (float)time;
  59. if( currentTime <= 0 )
  60. {
  61. zSpiel->setTimerZuletztAbgelaufen( (Timer *)getThis() );
  62. runns = 0;
  63. Ereignis *e = new Ereignis( TIMER_RUNNS_OUT );
  64. e->addParameter( "Betroffener Timer", this->getThis() );
  65. zSpiel->throwEvent( e );
  66. if( autoWiederhohlung )
  67. start( zSpiel );
  68. }
  69. }
  70. }
  71. void Timer::render( Bild &rObj )
  72. {
  73. w = (float)tr.getTextBreite( Text( (int)( currentTime * 100 ) / 100.0 ) );
  74. h = (float)tr.getTextHeight( Text( (int)( currentTime * 100 ) / 100.0 ) );
  75. if( sichtbar && runns )
  76. tr.renderText( (int)x, (int)y, Text( (int)( currentTime * 100 ) / 100.0 ), rObj, farbe );
  77. }
  78. void Timer::setZeit( float zeit )
  79. {
  80. currentTime = zeit;
  81. }
  82. float Timer::getTimeLeft() const
  83. {
  84. return currentTime;
  85. }
  86. bool Timer::istSichtbar() const
  87. {
  88. return sichtbar;
  89. }
  90. int Timer::getFarbe() const
  91. {
  92. return farbe;
  93. }
  94. bool Timer::isRunning() const
  95. {
  96. return runns;
  97. }
  98. bool Timer::istPausiert() const
  99. {
  100. return pause;
  101. }
  102. int Timer::getMaxTime() const
  103. {
  104. return maxZeit;
  105. }
  106. bool Timer::istAutoWiederhohlung() const
  107. {
  108. return autoWiederhohlung;
  109. }
  110. int Timer::getId() const
  111. {
  112. return id;
  113. }