PolyTimer.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. * PolyTimer.cpp
  3. * Poly
  4. *
  5. * Created by Ivan Safrin on 5/18/08.
  6. * Copyright 2008 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. #include "PolyTimer.h"
  10. using namespace Polycode;
  11. Timer::Timer(bool triggerMode, int msecs) : EventDispatcher() {
  12. this->msecs = msecs;
  13. this->triggerMode = triggerMode;
  14. paused = false;
  15. Reset();
  16. CoreServices::getInstance()->getTimerManager()->addTimer(this);
  17. }
  18. Timer::~Timer() {
  19. CoreServices::getInstance()->getTimerManager()->removeTimer(this);
  20. }
  21. void Timer::Reset() {
  22. ticks = 0;
  23. last = 0;
  24. elapsed = 0;
  25. }
  26. unsigned int Timer::getTicks() {
  27. return ticks;
  28. }
  29. void Timer::Pause(bool paused) {
  30. last = ticks;
  31. elapsed = 0;
  32. this->paused = paused;
  33. }
  34. Number Timer::getElapsedf() {
  35. return ((Number)(elapsed))/1000.0f;
  36. }
  37. bool Timer::isPaused() {
  38. return paused;
  39. }
  40. bool Timer::hasElapsed() {
  41. if(ticks-last > msecs) {
  42. last = ticks;
  43. return true;
  44. }
  45. return false;
  46. }
  47. void Timer::Update(unsigned int ticks) {
  48. if(last == 0) {
  49. last = ticks;
  50. return;
  51. }
  52. this->ticks = ticks;
  53. elapsed = ticks-last;
  54. // if(elapsed > 10000)
  55. // elapsed = 10000;
  56. if(paused)
  57. return;
  58. if(triggerMode) {
  59. if(elapsed > msecs) {
  60. last = ticks;
  61. this->dispatchEvent(new Event(), EVENT_TRIGGER);
  62. } else {
  63. }
  64. }
  65. }