1 #include	"Timer.h"
2 
3 Timer *Timer::_redTimer  = NULL;
4 Timer *Timer::_blueTimer = NULL;
5 
Timer(int moves,int seconds,int increment)6 Timer::Timer(int moves, int seconds, int increment)
7 {
8   _moves     = moves;
9   _seconds   = seconds;
10   _increment = increment;
11 
12   resetTimer();
13 }
14 
setTimers(int moves,int seconds,int inceremnt)15 void Timer::setTimers(int moves, int seconds, int inceremnt)
16 {
17   if (_redTimer) delete _redTimer;
18   if (_blueTimer) delete _blueTimer;
19 
20   _redTimer  = new Timer(moves, seconds, inceremnt);
21   _blueTimer = new Timer(moves, seconds, inceremnt);
22 }
23 
haveTimeLeftForMove()24 bool Timer::haveTimeLeftForMove()
25 {
26   if (_seconds == 0 && _increment == 0) return true; // Timer is shut off.
27 
28 
29   int timePerMove = (_secondsLeft - 1) / _movesLeft + _increment;
30 
31   //cerr << "Time per move is: " << timePerMove << endl;
32 
33   time_t now = time(NULL);
34   int used = (int)difftime(now,_startTime);
35   //cerr << "Time used is: " << used << endl;
36   if (used < timePerMove)
37     return true;
38   else
39     return false;
40 }
41 
moveMade()42 void Timer::moveMade()
43 {
44   int timeThisMove = (int)difftime(_endTime, _startTime);
45   _secondsLeft -= timeThisMove;
46   _secondsLeft += _increment;
47 
48   //cerr << "Time left was: " << _secondsLeft << endl;
49 
50   if (_movesLeft == 1 && _secondsLeft >= 0) resetTimer();
51   else _movesLeft--;
52 }
53 
surpasedTime()54 bool Timer::surpasedTime()
55 {
56   if (_secondsLeft < 0) return true;
57   else return false;
58 }
59 
startTimer()60 void Timer::startTimer()
61 {
62   _startTime = time(NULL);
63 }
64 
stopTimer()65 void Timer::stopTimer()
66 {
67   _endTime = time(NULL);
68 }
69 
resetTimer()70 void Timer::resetTimer()
71 {
72   _secondsLeft = _seconds;
73   _movesLeft   = _moves;
74 }
75 
timerForColor(color c)76 Timer *Timer::timerForColor(color c)
77 {
78   if (c == RED) return _redTimer;
79   else if (c == BLUE) return _blueTimer;
80   else return NULL;
81 }
82 
timeLeft()83 int Timer::timeLeft()
84 {
85   int used = (int)difftime(time(NULL), _startTime);
86   return _seconds - used;
87 }
88