1 #ifndef __TIMER_CONTROL_H
2 #define __TIMER_CONTROL_H
3 
4 #include "Types.h"
5 
6 typedef void (*CUSTOMIZABLE_TIMER_CALLBACK) ( void );
7 
8 // TIMER DEFINES
9 enum
10 {
11 	TOVERHEAD = 0,			// Overhead time slice
12 	NEXTSCROLL,			// Scroll Speed timer
13 	STARTSCROLL,			// Scroll Start timer
14 	ANIMATETILES,			// Animate tiles timer
15 	FPSCOUNTER,			// FPS value
16 	PATHFINDCOUNTER,		// PATH FIND COUNTER
17 	CURSORCOUNTER,			// ANIMATED CURSOR
18 	RMOUSECLICK_DELAY_COUNTER,	// RIGHT BUTTON CLICK DELAY
19 	LMOUSECLICK_DELAY_COUNTER,	// LEFT  BUTTON CLICK DELAY
20 	MMOUSECLICK_DELAY_COUNTER,	// LEFT  BUTTON CLICK DELAY
21 	TARGETREFINE,			// TARGET REFINE
22 	CURSORFLASH,			// Cursor/AP flash
23 	PHYSICSUPDATE,			// PHYSICS UPDATE.
24 	GLOW_ENEMYS,
25 	STRATEGIC_OVERHEAD,		// STRATEGIC OVERHEAD
26 	CYCLERENDERITEMCOLOR,		// CYCLE COLORS
27 	NONGUNTARGETREFINE,		// TARGET REFINE
28 	CURSORFLASHUPDATE,		//
29 	INVALID_AP_HOLD,		// TIME TO HOLD INVALID AP
30 	RADAR_MAP_BLINK,		// BLINK DELAY FOR RADAR MAP
31 	MUSICOVERHEAD,			// MUSIC TIMER
32 	NUMTIMERS
33 };
34 
35 // Base resultion of callback timer
36 #define BASETIMESLICE 10
37 
38 extern const INT32 giTimerIntervals[NUMTIMERS];
39 extern INT32       giTimerCounters[NUMTIMERS];
40 
41 // GLOBAL SYNC TEMP TIME
42 extern INT32 giClockTimer;
43 
44 extern INT32 giTimerDiag;
45 
46 extern INT32 giTimerTeamTurnUpdate;
47 
48 
49 void InitializeJA2Clock(void);
50 void ShutdownJA2Clock(void);
51 
52 #define GetJA2Clock() guiBaseJA2Clock
53 
54 void PauseTime( BOOLEAN fPaused );
55 
56 void SetCustomizableTimerCallbackAndDelay( INT32 iDelay, CUSTOMIZABLE_TIMER_CALLBACK pCallback, BOOLEAN fReplace );
57 void CheckCustomizableTimer( void );
58 
59 //Don't modify this value
60 extern UINT32	guiBaseJA2Clock;
61 extern CUSTOMIZABLE_TIMER_CALLBACK gpCustomizableTimerCallback;
62 
63 // MACROS
64 // Check if new counter < 0        | set to 0 |        Decrement
65 
66 #define UPDATECOUNTER( c )		( ( giTimerCounters[ c ] - BASETIMESLICE ) < 0 ) ?  ( giTimerCounters[ c ] = 0 ) : ( giTimerCounters[ c ] -= BASETIMESLICE )
67 #define RESETCOUNTER( c )		( giTimerCounters[ c ] = giTimerIntervals[ c ] )
68 #define COUNTERDONE( c )		( giTimerCounters[ c ] == 0 ) ? TRUE : FALSE
69 
70 #define UPDATETIMECOUNTER( c )		( ( c - BASETIMESLICE ) < 0 ) ?  ( c = 0 ) : ( c -= BASETIMESLICE )
71 #define RESETTIMECOUNTER( c, d )	( c = d )
72 
73 #ifdef BOUNDS_CHECKER
74 	#define TIMECOUNTERDONE(c, d) true
75 #else
76 	#define TIMECOUNTERDONE(c, d) (c == 0)
77 #endif
78 
79 #define SYNCTIMECOUNTER()		(void)0
80 #define ZEROTIMECOUNTER( c )		( c = 0 )
81 
82 // whenever guiBaseJA2Clock changes, we must reset all the timer variables that
83 // use it as a reference
84 void ResetJA2ClockGlobalTimers(void);
85 
86 #endif