src/Timer.hh
author ekku
Mon, 08 Dec 2008 16:46:48 +0000
changeset 295 4d3adfbec077
parent 283 7540b0859579
child 300 417183866f35
permissions -rw-r--r--
Damage
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     1
#ifndef TIMER_HH
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     2
#define 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
#include <ClanLib/core.h>
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     5
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 205
diff changeset
     6
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 205
diff changeset
     7
 * A time interval, measured in real milliseconds
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 205
diff changeset
     8
 */
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     9
typedef unsigned long TimeMS;
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 205
diff changeset
    10
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 205
diff changeset
    11
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 205
diff changeset
    12
 * Abstract tick count, defined as a number of Timer::interval's against real time
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 205
diff changeset
    13
 */
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    14
typedef uint32_t TickCount;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    15
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 205
diff changeset
    16
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 205
diff changeset
    17
 * Used to implement Physics ticks and Graphics frames. This will attempt to trigger sig_tick every <interval> ms,
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 205
diff changeset
    18
 * but if we miss some ticks or something else, then the tick_length passed to sig_tick will be longer than interval...
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 205
diff changeset
    19
 */
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    20
class Timer : public CL_KeepAlive {
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    21
    protected:
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    22
        // the target tick interval
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    23
        TimeMS interval;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    24
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    25
        // number of ticks
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    26
        TickCount ticks;
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
        bool enabled;
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
        // time of last tick
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    31
        TimeMS last_tick;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    32
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    33
        CL_Signal_v1<TimeMS> _sig_tick;
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
    public:
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    36
        /*
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    37
         * Interval is in milliseconds
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
        Timer (TimeMS interval);
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    40
        
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    41
        /*
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    42
         * Returns the tick counter
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    43
         */
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    44
        TickCount get_ticks (void);
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    45
        
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
         * Start the timer, this should be called once keepalive starts getting called
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    48
         */
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    49
        void start (void);
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
    private:
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    52
        void keep_alive (void);
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    53
    
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    54
    public:
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    55
        CL_Signal_v1<TimeMS>& sig_tick (void) { return _sig_tick; }
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    56
};
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    57
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    58
#endif