src/Timer.cc
author terom
Tue, 09 Dec 2008 04:41:48 +0000
changeset 368 fe49a4b12575
parent 300 417183866f35
child 423 947ab54de4b7
permissions -rw-r--r--
move our overdrive-doxygen stuff to doxygen_hc_overclock.cfg
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;
300
417183866f35 suicide key and respawning
terom
parents: 282
diff changeset
    21
    single_shot = false;
417183866f35 suicide key and respawning
terom
parents: 282
diff changeset
    22
}
417183866f35 suicide key and respawning
terom
parents: 282
diff changeset
    23
        
417183866f35 suicide key and respawning
terom
parents: 282
diff changeset
    24
void Timer::fire_once (void) {
417183866f35 suicide key and respawning
terom
parents: 282
diff changeset
    25
    last_tick = CL_System::get_time();
417183866f35 suicide key and respawning
terom
parents: 282
diff changeset
    26
417183866f35 suicide key and respawning
terom
parents: 282
diff changeset
    27
    enabled = true;
417183866f35 suicide key and respawning
terom
parents: 282
diff changeset
    28
    single_shot = true;
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    29
}
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
void Timer::keep_alive (void) {
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    32
    // ignore if disabled
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    33
    if (!enabled)
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    34
        return;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    35
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    36
    // get current time
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    37
    TimeMS now = CL_System::get_time();
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    38
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    39
    // handle overflows
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    40
    if (last_tick > now)
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    41
        last_tick = now;
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
    // is the tick over?
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    44
    if (last_tick + interval < now) {
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    45
        // the length of this tick
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    46
        TimeMS tick_length = now - last_tick;
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
        // trigger our signal
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    49
        _sig_tick(tick_length);
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    50
        
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    51
        // update state
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    52
        last_tick = now;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    53
        ticks += tick_length / interval;
300
417183866f35 suicide key and respawning
terom
parents: 282
diff changeset
    54
417183866f35 suicide key and respawning
terom
parents: 282
diff changeset
    55
        // if it was single-shot, disable
417183866f35 suicide key and respawning
terom
parents: 282
diff changeset
    56
        if (single_shot)
417183866f35 suicide key and respawning
terom
parents: 282
diff changeset
    57
            enabled = false;
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    58
    }
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    59
}
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    60