From 3ce55cc1d5e3269af2102935cba67265cc068336 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Thu, 23 Feb 2012 03:02:00 +1000 Subject: Implement llSetTimerEvent(), though it wont work so well until the events system is in place at the Lua end. --- LuaSL/src/LuaSL.h | 3 ++- LuaSL/src/LuaSL_main.c | 31 +++++++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) (limited to 'LuaSL') diff --git a/LuaSL/src/LuaSL.h b/LuaSL/src/LuaSL.h index 6d495fa..ae0c26f 100644 --- a/LuaSL/src/LuaSL.h +++ b/LuaSL/src/LuaSL.h @@ -66,11 +66,12 @@ typedef struct char SID[PATH_MAX]; char fileName[PATH_MAX]; struct timeval startTime; - float compileTime; + float compileTime, timerTime; int bugs, warnings; boolean running; gameGlobals *game; Ecore_Con_Client *client; + Ecore_Timer *timer; } script; typedef struct diff --git a/LuaSL/src/LuaSL_main.c b/LuaSL/src/LuaSL_main.c index 04145b5..fcbfa03 100644 --- a/LuaSL/src/LuaSL_main.c +++ b/LuaSL/src/LuaSL_main.c @@ -8,19 +8,42 @@ static Eina_Strbuf *clientStream; static Eina_Bool _sleep_timer_cb(void *data) { - char *SID = data; + script *script = data; + gameGlobals *game = script->game; -printf("Waking up %s\n", SID); - sendToChannel(SID, "0.0", NULL, NULL); + PD("Waking up %s", script->SID); + sendToChannel(script->SID, "0.0", NULL, NULL); return ECORE_CALLBACK_CANCEL; } +static Eina_Bool _timer_timer_cb(void *data) +{ + script *script = data; + gameGlobals *game = script->game; + + PD("Timer for %s", script->SID); + sendToChannel(script->SID, "events.timer()", NULL, NULL); + return ECORE_CALLBACK_RENEW; +} + static void _sendBack(void * data) { scriptMessage *message = data; if (0 == strncmp(message->message, "llSleep(", 8)) - ecore_timer_add(atof(&(message->message)[8]), _sleep_timer_cb, message->script->SID); + ecore_timer_add(atof(&(message->message)[8]), _sleep_timer_cb, message->script); + else if (0 == strncmp(message->message, "llSetTimerEvent(", 16)) + { + message->script->timerTime = atof(&(message->message)[16]); + if (0.0 == message->script->timerTime) + { + if (message->script->timer) + ecore_timer_del(message->script->timer); + message->script->timer = NULL; + } + else + message->script->timer = ecore_timer_add(message->script->timerTime, _timer_timer_cb, message->script); + } else sendBack(message->script->game, message->script->client, message->script->SID, message->message); free(message); -- cgit v1.1