src/Timer.cc
author ekku
Mon, 08 Dec 2008 15:59:33 +0000
changeset 287 f59c8dee7f91
parent 282 e0e4dfc3e528
child 300 417183866f35
permissions -rw-r--r--
getType added for physics object
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     1
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     2
#include "Timer.hh"
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     3
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     4
Timer::Timer (TimeMS interval) :
282
e0e4dfc3e528 compiles cleanly with -Wall -Wextra -Wconversion, not tested, but that shouldn't break anything :)
terom
parents: 205
diff changeset
     5
    interval(interval), 
e0e4dfc3e528 compiles cleanly with -Wall -Wextra -Wconversion, not tested, but that shouldn't break anything :)
terom
parents: 205
diff changeset
     6
    ticks(0), 
e0e4dfc3e528 compiles cleanly with -Wall -Wextra -Wconversion, not tested, but that shouldn't break anything :)
terom
parents: 205
diff changeset
     7
    enabled(false),
e0e4dfc3e528 compiles cleanly with -Wall -Wextra -Wconversion, not tested, but that shouldn't break anything :)
terom
parents: 205
diff changeset
     8
    last_tick(0)
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     9
{
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    10
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    11
}
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    12
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    13
TickCount Timer::get_ticks (void) {
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    14
    return ticks;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    15
}
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    16
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    17
void Timer::start (void) {
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    18
    last_tick = CL_System::get_time();
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    19
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    20
    enabled = true;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    21
}
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    22
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    23
void Timer::keep_alive (void) {
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    24
    // ignore if disabled
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    25
    if (!enabled)
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    26
        return;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    27
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    28
    // get current time
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    29
    TimeMS now = CL_System::get_time();
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    30
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    31
    // handle overflows
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    32
    if (last_tick > now)
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    33
        last_tick = now;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    34
    
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    35
    // is the tick over?
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    36
    if (last_tick + interval < now) {
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    37
        // the length of this tick
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    38
        TimeMS tick_length = now - last_tick;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    39
        
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    40
        // trigger our signal
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    41
        _sig_tick(tick_length);
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    42
        
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    43
        // update state
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    44
        last_tick = now;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    45
        ticks += tick_length / interval;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    46
    }
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    47
}
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    48