00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00042 #ifndef _orxCLOCK_H_
00043 #define _orxCLOCK_H_
00044
00045
00046 #include "orxInclude.h"
00047 #include "core/orxSystem.h"
00048 #include "utils/orxString.h"
00049
00050
00051 #define orxCLOCK_KU32_CLOCK_BANK_SIZE 16
00052 #define orxCLOCK_KU32_TIMER_BANK_SIZE 32
00054 #define orxCLOCK_KU32_FUNCTION_BANK_SIZE 16
00059 typedef enum __orxCLOCK_TYPE_t
00060 {
00061 orxCLOCK_TYPE_CORE = 0,
00062 orxCLOCK_TYPE_USER,
00063
00064 orxCLOCK_TYPE_SECOND,
00065
00066 orxCLOCK_TYPE_NUMBER,
00067
00068 orxCLOCK_TYPE_NONE = orxENUM_NONE
00069
00070 } orxCLOCK_TYPE;
00071
00072
00075 typedef enum __orxCLOCK_MOD_TYPE_t
00076 {
00077 orxCLOCK_MOD_TYPE_FIXED = 0,
00078 orxCLOCK_MOD_TYPE_MULTIPLY,
00079 orxCLOCK_MOD_TYPE_MAXED,
00081 orxCLOCK_MOD_TYPE_NUMBER,
00082
00083 orxCLOCK_MOD_TYPE_NONE = orxENUM_NONE,
00084
00085 } orxCLOCK_MOD_TYPE;
00086
00087
00090 typedef enum __orxCLOCK_PRIORITY_t
00091 {
00092 orxCLOCK_PRIORITY_LOWEST = 0,
00093 orxCLOCK_PRIORITY_LOWER,
00094 orxCLOCK_PRIORITY_LOW,
00095 orxCLOCK_PRIORITY_NORMAL,
00096 orxCLOCK_PRIORITY_HIGH,
00097 orxCLOCK_PRIORITY_HIGHER,
00098 orxCLOCK_PRIORITY_HIGHEST,
00099
00100 orxCLOCK_PRIORITY_NUMBER,
00101
00102 orxCLOCK_PRIORITY_NONE = orxENUM_NONE,
00103
00104 } orxCLOCK_PRIORITY;
00105
00106
00109 typedef struct __orxCLOCK_INFO_t
00110 {
00111 orxCLOCK_TYPE eType;
00112 orxFLOAT fTickSize;
00113 orxCLOCK_MOD_TYPE eModType;
00114 orxFLOAT fModValue;
00115 orxFLOAT fDT;
00116 orxFLOAT fTime;
00118 } orxCLOCK_INFO;
00119
00120
00123 typedef enum __orxCLOCK_EVENT_t
00124 {
00125 orxCLOCK_EVENT_RESTART = 0,
00126 orxCLOCK_EVENT_RESYNC,
00127 orxCLOCK_EVENT_PAUSE,
00128 orxCLOCK_EVENT_UNPAUSE,
00130 orxCLOCK_EVENT_NUMBER,
00131
00132 orxCLOCK_EVENT_NONE = orxENUM_NONE
00133
00134 } orxCLOCK_EVENT;
00135
00136
00138 typedef struct __orxCLOCK_t orxCLOCK;
00139
00141 typedef void (orxFASTCALL *orxCLOCK_FUNCTION)(const orxCLOCK_INFO *_pstClockInfo, void *_pContext);
00142
00143
00146 extern orxDLLAPI void orxFASTCALL orxClock_Setup();
00147
00151 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_Init();
00152
00155 extern orxDLLAPI void orxFASTCALL orxClock_Exit();
00156
00157
00161 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_Update();
00162
00168 extern orxDLLAPI orxCLOCK *orxFASTCALL orxClock_Create(orxFLOAT _fTickSize, orxCLOCK_TYPE _eType);
00169
00174 extern orxDLLAPI orxCLOCK *orxFASTCALL orxClock_CreateFromConfig(const orxSTRING _zConfigID);
00175
00180 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_Delete(orxCLOCK *_pstClock);
00181
00185 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_Resync(orxCLOCK *_pstClock);
00186
00190 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_ResyncAll();
00191
00196 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_Restart(orxCLOCK *_pstClock);
00197
00202 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_Pause(orxCLOCK *_pstClock);
00203
00208 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_Unpause(orxCLOCK *_pstClock);
00209
00214 extern orxDLLAPI orxBOOL orxFASTCALL orxClock_IsPaused(const orxCLOCK *_pstClock);
00215
00220 extern orxDLLAPI const orxCLOCK_INFO *orxFASTCALL orxClock_GetInfo(const orxCLOCK *_pstClock);
00221
00226 extern orxDLLAPI orxCLOCK *orxFASTCALL orxClock_GetFromInfo(const orxCLOCK_INFO *_pstClockInfo);
00227
00228
00235 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_SetModifier(orxCLOCK *_pstClock, orxCLOCK_MOD_TYPE _eModType, orxFLOAT _fModValue);
00236
00242 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_SetTickSize(orxCLOCK *_pstClock, orxFLOAT _fTickSize);
00243
00244
00253 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_Register(orxCLOCK *_pstClock, const orxCLOCK_FUNCTION _pfnCallback, void *_pContext, orxMODULE_ID _eModuleID, orxCLOCK_PRIORITY _ePriority);
00254
00260 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_Unregister(orxCLOCK *_pstClock, const orxCLOCK_FUNCTION _pfnCallback);
00261
00267 extern orxDLLAPI void *orxFASTCALL orxClock_GetContext(const orxCLOCK *_pstClock, const orxCLOCK_FUNCTION _pfnCallback);
00268
00275 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_SetContext(orxCLOCK *_pstClock, const orxCLOCK_FUNCTION _pfnCallback, void *_pContext);
00276
00277
00283 extern orxDLLAPI orxCLOCK *orxFASTCALL orxClock_FindFirst(orxFLOAT _fTickSize, orxCLOCK_TYPE _eType);
00284
00289 extern orxDLLAPI orxCLOCK *orxFASTCALL orxClock_FindNext(const orxCLOCK *_pstClock);
00290
00295 extern orxDLLAPI orxCLOCK *orxFASTCALL orxClock_GetNext(const orxCLOCK *_pstClock);
00296
00301 extern orxDLLAPI orxCLOCK *orxFASTCALL orxClock_Get(const orxSTRING _zName);
00302
00307 extern orxDLLAPI const orxSTRING orxFASTCALL orxClock_GetName(const orxCLOCK *_pstClock);
00308
00309
00318 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_AddTimer(orxCLOCK *_pstClock, const orxCLOCK_FUNCTION _pfnCallback, orxFLOAT _fDelay, orxS32 _s32Repetition, void *_pContext);
00319
00327 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_RemoveTimer(orxCLOCK *_pstClock, const orxCLOCK_FUNCTION _pfnCallback, orxFLOAT _fDelay, void *_pContext);
00328
00336 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_AddGlobalTimer(const orxCLOCK_FUNCTION _pfnCallback, orxFLOAT _fDelay, orxS32 _s32Repetition, void *_pContext);
00337
00344 extern orxDLLAPI orxSTATUS orxFASTCALL orxClock_RemoveGlobalTimer(const orxCLOCK_FUNCTION _pfnCallback, orxFLOAT _fDelay, void *_pContext);
00345
00346
00347 #endif
00348