src/Timer.hh
author Tero Marttila <terom@fixme.fi>
Tue, 27 Jan 2009 00:25:58 +0200
changeset 439 9823e6cd1086
parent 300 417183866f35
permissions -rw-r--r--
some README text
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
300
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
     6
#include "Types.hh"
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     7
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 205
diff changeset
     8
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 205
diff changeset
     9
 * 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
    10
 * 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
    11
 */
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    12
class Timer : public CL_KeepAlive {
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    13
    protected:
300
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    14
        /**
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    15
         * The target tick interval
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    16
         */
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    17
        TimeMS interval;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    18
300
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    19
        /**
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    20
         * Number of ticks so far, updated by keep_alive
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    21
         */
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    22
        TickCount ticks;
300
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    23
        
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    24
        /**
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    25
         * Is the timer running?
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    26
         */
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    27
        bool enabled;
300
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    28
        
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    29
        /**
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    30
         * Single-shot mode?
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    31
         */
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    32
        bool single_shot;
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    33
300
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    34
        /**
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    35
         * Time of last tick, set to current time by start/fire_once/keep_alive
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    36
         */
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    37
        TimeMS last_tick;
300
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    38
        
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    39
        /** The tick signal */
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    40
        CL_Signal_v1<TimeMS> _sig_tick;
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
    public:
300
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    43
        /**
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    44
         * Prepare a timer, sig_tick will be fired every interval ms after the timer is started.
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    45
         *
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    46
         * @param interval interval in milliseconds
205
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
        Timer (TimeMS interval);
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    49
        
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
         * Returns the tick counter
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    52
         */
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    53
        TickCount get_ticks (void);
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    54
        
300
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    55
        /**
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    56
         * Start the timer in continuous-call mode, this should be called once keepalive starts getting called.
205
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
        void start (void);
300
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    59
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    60
        /**
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    61
         * Tick the timer, but only once
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    62
         */
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    63
        void fire_once (void);
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    64
        
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    65
    private:
300
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    66
        /**
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    67
         * If interval time has elapsed, fire sig_tick
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    68
         */
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    69
        void keep_alive (void);
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    70
    
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    71
    public:
300
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    72
        /**
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    73
         * Triggered approximately every interval MS, but the given interval may also be longer if we've skipped ticks
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    74
         */
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    75
        CL_Signal_v1<TimeMS>& sig_tick (void) { return _sig_tick; }
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    76
};
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    77
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    78
#endif