diff options
Diffstat (limited to 'engines/sci/sfx/timer.cpp')
-rw-r--r-- | engines/sci/sfx/timer.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/engines/sci/sfx/timer.cpp b/engines/sci/sfx/timer.cpp new file mode 100644 index 0000000000..beb57aef6b --- /dev/null +++ b/engines/sci/sfx/timer.cpp @@ -0,0 +1,54 @@ +#include "common/timer.h" +#include "engines/engine.h" +#include "sci/include/sfx_timer.h" + + +#define FREQ 60 +#define DELAY (1000000 / FREQ) + +typedef void (*scummvm_timer_callback_t)(void *); +static scummvm_timer_callback_t scummvm_timer_callback = NULL; +static void *scummvm_timer_callback_data = NULL; +extern ::Engine *g_engine; + +void scummvm_timer_update_internal(void *ptr) { + if (scummvm_timer_callback) + scummvm_timer_callback(scummvm_timer_callback_data); +} + +int scummvm_timer_start(void (*func)(void *), void *data) { + if (scummvm_timer_callback) { + fprintf(stderr, + "Error: Attempt to initialize gametick timer more than once\n"); + return SFX_ERROR; + } + + if (!func) { + fprintf(stderr, + "Error: Attempt to initialize gametick timer w/o callback\n"); + return SFX_ERROR; + } + + scummvm_timer_callback = func; + scummvm_timer_callback_data = data; + + ::g_engine->getTimerManager()->installTimerProc(&scummvm_timer_update_internal, DELAY, NULL); + return SFX_OK; +} + +int scummvm_timer_stop() { + scummvm_timer_callback = NULL; + return SFX_OK; +} + + +sfx_timer_t sfx_timer_scummvm = { + "ScummVM", + "0.1", + DELAY / 1000, 0, + NULL, + &scummvm_timer_start, + &scummvm_timer_stop, + 0, + 0 +}; |