diff options
Diffstat (limited to 'src/libjin-lua/modules/time/l_timer.cpp')
-rw-r--r-- | src/libjin-lua/modules/time/l_timer.cpp | 246 |
1 files changed, 123 insertions, 123 deletions
diff --git a/src/libjin-lua/modules/time/l_timer.cpp b/src/libjin-lua/modules/time/l_timer.cpp index 8886913..82a1398 100644 --- a/src/libjin-lua/modules/time/l_timer.cpp +++ b/src/libjin-lua/modules/time/l_timer.cpp @@ -6,127 +6,127 @@ using namespace JinEngine::Time; namespace JinEngine { - namespace Lua - { - - const char* Jin_Lua_Timer = "Timer"; - - const char* Jin_Lua_Handler = "Handler"; - - static Timer::TimerCallback timerCallback = [](void* data)->void - { - LuaCallback* func = static_cast<LuaCallback*>(data); - func->call(); - }; - - static Timer::FinishCallback finishCallback = [](void* data)->void - { - LuaCallback* func = static_cast<LuaCallback*>(data); - delete func; - }; - - LUA_IMPLEMENT inline Timer* checkTimer(lua_State* L) - { - LuaObject* luaObj = (LuaObject*)luax_checktype(L, 1, Jin_Lua_Timer); - return luaObj->getObject<Timer>(); - } - - // timer:every(time, callback, parameter) - LUA_IMPLEMENT int l_every(lua_State* L) - { - int n = luax_gettop(L); - Timer* shared = checkTimer(L); - float s = luax_checknumber(L, 2); - LuaCallback* func = new LuaCallback(L); - func->setFunc(3); - for(int i = 4; i <= n; ++i) - func->pushParam(i); - Timer::Handler* handler = shared->every(s, timerCallback, func, finishCallback); - Shared* shrHandler = new Shared(handler); - LuaObject* luaObj = luax_newinstance(L, Jin_Lua_Handler, shrHandler); - return 1; - } - - // timer:after(time, callback, parameter) - LUA_IMPLEMENT int l_after(lua_State* L) - { - int n = luax_gettop(L); - Timer* shared = checkTimer(L); - float s = luax_checknumber(L, 2); - LuaCallback* func = new LuaCallback(L); - func->setFunc(3); - for (int i = 4; i <= n; ++i) - func->pushParam(i); - Timer::Handler* handler = shared->after(s, timerCallback, func, finishCallback); - Shared* shrHandler = new Shared(handler); - LuaObject* luaObj = luax_newinstance(L, Jin_Lua_Handler, shrHandler); - return 1; - } - - // timer:repeat(time, callback, parameter) - LUA_IMPLEMENT int l_repeat(lua_State* L) - { - int n = luax_gettop(L); - Timer* shared = checkTimer(L); - float s = luax_checknumber(L, 2); - int count = luax_checkinteger(L, 3); - LuaCallback* func = new LuaCallback(L); - func->setFunc(4); - for (int i = 5; i <= n; ++i) - func->pushParam(i); - Timer::Handler* handler = shared->repeat(s, count, timerCallback, func, finishCallback); - Shared* shrHandler = new Shared(handler); - LuaObject* luaObj = luax_newinstance(L, Jin_Lua_Handler, shrHandler); - return 1; - } - - LUA_IMPLEMENT int l_update(lua_State* L) - { - Timer* shared = checkTimer(L); - float s = luax_checknumber(L, 2); - shared->update(s); - return 0; - } - - LUA_IMPLEMENT int l_cancel(lua_State* L) - { - LuaObject* p = (LuaObject*)luax_checktype(L, 1, Jin_Lua_Timer); - Timer* timer = p->getObject<Timer>(); - LuaObject* ph = (LuaObject*)luax_checktype(L, 2, Jin_Lua_Handler); - Timer::Handler* handler = ph->getObject<Timer::Handler>(); - timer->cancel(handler); - return 0; - } - - LUA_IMPLEMENT int l_cancelAll(lua_State* L) - { - LuaObject* p = (LuaObject*)luax_checktype(L, 1, Jin_Lua_Timer); - Timer* timer = p->getObject<Timer>(); - timer->cancelAll(); - return 0; - } - - LUA_IMPLEMENT int l_gc(lua_State* L) - { - LuaObject* p = (LuaObject*)luax_checktype(L, 1, Jin_Lua_Timer); - p->release(); - return 0; - } - - LUA_EXPORT void luaopen_Timer(lua_State* L) - { - luaL_Reg methods[] = { - { "__gc", l_gc }, - { "every", l_every }, - { "after", l_after }, - { "duplicate", l_repeat }, - { "update", l_update }, - { "cancel", l_cancel }, - { "cancelAll", l_cancelAll }, - { 0, 0 } - }; - luax_newtype(L, Jin_Lua_Timer, methods); - } - - } + namespace Lua + { + + const char* Jin_Lua_Timer = "Timer"; + + const char* Jin_Lua_Handler = "Handler"; + + static Timer::TimerCallback timerCallback = [](void* data)->void + { + LuaCallback* func = static_cast<LuaCallback*>(data); + func->call(); + }; + + static Timer::FinishCallback finishCallback = [](void* data)->void + { + LuaCallback* func = static_cast<LuaCallback*>(data); + delete func; + }; + + LUA_IMPLEMENT inline Timer* checkTimer(lua_State* L) + { + LuaObject* luaObj = (LuaObject*)luax_checktype(L, 1, Jin_Lua_Timer); + return luaObj->getObject<Timer>(); + } + + // timer:every(time, callback, parameter) + LUA_IMPLEMENT int l_every(lua_State* L) + { + int n = luax_gettop(L); + Timer* shared = checkTimer(L); + float s = luax_checknumber(L, 2); + LuaCallback* func = new LuaCallback(L); + func->setFunc(3); + for(int i = 4; i <= n; ++i) + func->pushParam(i); + Timer::Handler* handler = shared->every(s, timerCallback, func, finishCallback); + Shared* shrHandler = new Shared(handler); + LuaObject* luaObj = luax_newinstance(L, Jin_Lua_Handler, shrHandler); + return 1; + } + + // timer:after(time, callback, parameter) + LUA_IMPLEMENT int l_after(lua_State* L) + { + int n = luax_gettop(L); + Timer* shared = checkTimer(L); + float s = luax_checknumber(L, 2); + LuaCallback* func = new LuaCallback(L); + func->setFunc(3); + for (int i = 4; i <= n; ++i) + func->pushParam(i); + Timer::Handler* handler = shared->after(s, timerCallback, func, finishCallback); + Shared* shrHandler = new Shared(handler); + LuaObject* luaObj = luax_newinstance(L, Jin_Lua_Handler, shrHandler); + return 1; + } + + // timer:repeat(time, callback, parameter) + LUA_IMPLEMENT int l_repeat(lua_State* L) + { + int n = luax_gettop(L); + Timer* shared = checkTimer(L); + float s = luax_checknumber(L, 2); + int count = luax_checkinteger(L, 3); + LuaCallback* func = new LuaCallback(L); + func->setFunc(4); + for (int i = 5; i <= n; ++i) + func->pushParam(i); + Timer::Handler* handler = shared->repeat(s, count, timerCallback, func, finishCallback); + Shared* shrHandler = new Shared(handler); + LuaObject* luaObj = luax_newinstance(L, Jin_Lua_Handler, shrHandler); + return 1; + } + + LUA_IMPLEMENT int l_update(lua_State* L) + { + Timer* shared = checkTimer(L); + float s = luax_checknumber(L, 2); + shared->update(s); + return 0; + } + + LUA_IMPLEMENT int l_cancel(lua_State* L) + { + LuaObject* p = (LuaObject*)luax_checktype(L, 1, Jin_Lua_Timer); + Timer* timer = p->getObject<Timer>(); + LuaObject* ph = (LuaObject*)luax_checktype(L, 2, Jin_Lua_Handler); + Timer::Handler* handler = ph->getObject<Timer::Handler>(); + timer->cancel(handler); + return 0; + } + + LUA_IMPLEMENT int l_cancelAll(lua_State* L) + { + LuaObject* p = (LuaObject*)luax_checktype(L, 1, Jin_Lua_Timer); + Timer* timer = p->getObject<Timer>(); + timer->cancelAll(); + return 0; + } + + LUA_IMPLEMENT int l_gc(lua_State* L) + { + LuaObject* p = (LuaObject*)luax_checktype(L, 1, Jin_Lua_Timer); + p->release(); + return 0; + } + + LUA_EXPORT void luaopen_Timer(lua_State* L) + { + luaL_Reg methods[] = { + { "__gc", l_gc }, + { "every", l_every }, + { "after", l_after }, + { "duplicate", l_repeat }, + { "update", l_update }, + { "cancel", l_cancel }, + { "cancelAll", l_cancelAll }, + { 0, 0 } + }; + luax_newtype(L, Jin_Lua_Timer, methods); + } + + } }
\ No newline at end of file |