aboutsummaryrefslogtreecommitdiff
path: root/src/lua/modules/time/je_lua_time.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua/modules/time/je_lua_time.cpp')
-rw-r--r--src/lua/modules/time/je_lua_time.cpp44
1 files changed, 39 insertions, 5 deletions
diff --git a/src/lua/modules/time/je_lua_time.cpp b/src/lua/modules/time/je_lua_time.cpp
index c9f3563..e565eab 100644
--- a/src/lua/modules/time/je_lua_time.cpp
+++ b/src/lua/modules/time/je_lua_time.cpp
@@ -2,6 +2,7 @@
#include "lua/common/je_lua_common.h"
#include "lua/modules/luax.h"
#include "libjin/jin.h"
+#include "../types.h"
using namespace JinEngine::Time;
@@ -10,6 +11,12 @@ namespace JinEngine
namespace Lua
{
+ static struct
+ {
+ float previous;
+ float current;
+ } context;
+
LUA_IMPLEMENT int l_sec(lua_State* L)
{
luax_pushnumber(L, getSecond());
@@ -18,19 +25,46 @@ namespace JinEngine
LUA_IMPLEMENT int l_sleep(lua_State* L)
{
- double sec = luax_checknumber(L, 1);
+ double sec = luax_checknumber(L, 1);
sleep(sec * 1000.0f);
- return 0;
+ return 0;
+ }
+
+ LUA_IMPLEMENT int l_newTimer(lua_State* L)
+ {
+ Proxy* proxy = luax_newinstance(L, JIN_TIME_TIMER);
+ proxy->bind(new Shared<Timer>(new Timer(), JIN_TIME_TIMER));
+ return 1;
+ }
+
+ LUA_IMPLEMENT int l_getDelta(lua_State* L)
+ {
+ luax_pushnumber(L, context.current - context.previous);
+ return 1;
+ }
+
+ LUA_IMPLEMENT int l_step(lua_State* L)
+ {
+ context.previous = context.current;
+ context.current = getSecond();
+ return 0;
}
LUA_IMPLEMENT const luaL_Reg f[] = {
- { "second", l_sec },
- { "sleep", l_sleep },
- { 0, 0 },
+ { "second", l_sec },
+ { "sleep", l_sleep },
+ { "newTimer", l_newTimer },
+ { "step", l_step },
+ { "getDelta", l_getDelta },
+ { 0, 0 },
};
+ LUA_PORT int luaopen_Timer(lua_State* L);
+
LUA_EXPORT int luaopen_time(lua_State* L)
{
+ luaopen_Timer(L);
+
luax_newlib(L, f);
return 1;
}