ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/timers.h
Revision: 1.1
Committed: Fri Feb 3 07:12:51 2006 UTC (18 years, 3 months ago) by root
Content type: text/plain
Branch: MAIN
Branch point for: UPSTREAM
Log Message:
Initial revision

File Contents

# User Rev Content
1 root 1.1 /*****************************************************************************/
2     /* Crossfire timers support - (C) 2001 by Yann Chachkoff. */
3     /* This code is placed under the GPL. */
4     /*****************************************************************************/
5    
6     /*****************************************************************************/
7     /* Headers needed. */
8     /*****************************************************************************/
9    
10     #ifndef TIMERS_H_
11     #define TIMERS_H_
12    
13     #include <global.h>
14     #include <object.h>
15    
16     #ifdef HAVE_TIME_H
17     #include <time.h>
18     #endif
19    
20     /*****************************************************************************/
21     /* A timer is a kind of "clock" associated with an object. When the counter */
22     /* of a timer reaches 0, it is removed from the list of active timers and an */
23     /* EVENT_TIMER is generated for the target object. */
24     /* Important note: don't confuse "EVENT_TIMER" and "EVENT_TIME" - the first */
25     /* one is called when a timer delay has reached 0 while EVENT_TIME is */
26     /* triggered each time the object gets the opportunity to move. */
27     /*****************************************************************************/
28     /* Timer counting methods. */
29     /* You can either count the time in seconds or in "crossfire cycles". */
30     /* If mode = TIMER_MODE_SECONDS, delay will store the "time to reach" in sec.*/
31     /* For example, if a timer is created at t=2044s to be triggered 10 seconds */
32     /* later, delay = 2054. */
33     /* If mode = TIMER_MODE_CYCLES, delay will store the "time remaining", given */
34     /* in crossfire cycles. For example, if a timer is to be triggered 10 seconds*/
35     /* later, delay = 10. */
36     /*****************************************************************************/
37     /* Timer limits. */
38     /* You can't create more than 1000 timers (I created the timers table as a */
39     /* static one not (only) because I was too lazy/incompetent to implement is */
40     /* as a dynamic linked-list, but because 1) 1000 should be quite enough, 2) */
41     /* 1000 does not use a lot of memory, 3) it would be easier to adapt to some */
42     /* form of multithreading support with a static list. */
43     /* Anyway, if you think 1000 is not enough, you can safely increase this - */
44     /* memory should not be a problem in that case, given the size of a cftimer. */
45     /*****************************************************************************/
46    
47     #define TIMER_MODE_DEAD 0 /* Used to mark a timer as unused in the list */
48     #define TIMER_MODE_SECONDS 1
49     #define TIMER_MODE_CYCLES 2
50    
51     typedef struct _cftimer
52     {
53     int mode;
54     long delay;
55     object* ob;
56     } cftimer;
57    
58     #define MAX_TIMERS 1000
59    
60     cftimer timers_table[MAX_TIMERS];
61    
62     #define TIMER_ERR_NONE 0
63     #define TIMER_ERR_ID -1
64     #define TIMER_ERR_OBJ -2
65     #define TIMER_ERR_MODE -3
66    
67     #endif /* TIMERS_H_ */
68