diff options
author | chai <chaifix@163.com> | 2018-08-20 11:51:32 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-08-20 11:51:32 +0800 |
commit | 65bafdc682db46f0f115374ad39f1fbc348832ac (patch) | |
tree | 7862548cdf01060e89a45c9817afc6e5d263acd7 /src/lua/modules/event/luaopen_event.cpp | |
parent | 9593ae6ecdfcfb876fa7953f25e19f0a97e1453a (diff) |
*update
Diffstat (limited to 'src/lua/modules/event/luaopen_event.cpp')
-rw-r--r-- | src/lua/modules/event/luaopen_event.cpp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/src/lua/modules/event/luaopen_event.cpp b/src/lua/modules/event/luaopen_event.cpp new file mode 100644 index 0000000..af9f8fc --- /dev/null +++ b/src/lua/modules/event/luaopen_event.cpp @@ -0,0 +1,106 @@ +/** +* Event module +*/ +#include "lua/modules/luax.h" +#include "libjin/jin.h" + +namespace jin +{ +namespace lua +{ + + using namespace jin::input; + + /** + * Load event poll, return a iterator(a table). + */ + static int l_event_poll(lua_State *L) + { + // table to store events + luax_newtable(L); + static Event e; + int i = 1; + poll: + while (pollEvent(&e)) + { + // each event is a table + luax_newtable(L); + switch (e.type) + { + case EventType::QUIT: + luax_setfield_string(L, "type", "quit"); + break; + + case EventType::KEY_DOWN: + luax_setfield_string(L, "type", "keydown"); + luax_setfield_string(L, "key", getKeyName(e.key.keysym.sym)); + break; + + case EventType::KEY_UP: + luax_setfield_string(L, "type", "keyup"); + luax_setfield_string(L, "key", getKeyName(e.key.keysym.sym)); + break; + + case EventType::MOUSE_MOTION: + luax_setfield_string(L, "type", "mousemotion"); + luax_setfield_number(L, "x", e.motion.x); + luax_setfield_number(L, "y", e.motion.y); + break; + + case EventType::MOUSE_BUTTON_DOWN: + luax_setfield_string(L, "type", "mousebuttondown"); + luax_setfield_string(L, "button", getButtonName(e.button.button)); + luax_setfield_number(L, "x", e.button.x); + luax_setfield_number(L, "y", e.button.y); + break; + + case EventType::MOUSE_BUTTON_UP: + luax_setfield_string(L, "type", "mousebuttonup"); + luax_setfield_string(L, "button", getButtonName(e.button.button)); + luax_setfield_number(L, "x", e.button.x); + luax_setfield_number(L, "y", e.button.y); + break; + + case EventType::MOUSE_WHEEL: + luax_setfield_string(L, "type", "wheel"); + if(e.wheel.x == -1) + luax_setfield_string(L, "x", "left"); + else if(e.wheel.x == 1) + luax_setfield_string(L, "x", "right"); + else + luax_setfield_string(L, "x", "none"); + if (e.wheel.y == -1) + luax_setfield_string(L, "y", "near"); + else if (e.wheel.y == 1) + luax_setfield_string(L, "y", "far"); + else + luax_setfield_string(L, "y", "none"); + break; + + default: + /* ignore other events */ + luax_pop(L, 1); // pop table out + goto poll; + break; + } + luax_rawseti(L, -2, i++); + } + return 1; + } + + static const luaL_Reg f[] = { + { "poll", l_event_poll }, + { 0, 0 } + }; + + /** + * load event module + */ + int luaopen_event(lua_State* L) + { + luax_newlib(L, f); + return 1; + } + +} // lua +} // jin
\ No newline at end of file |