aboutsummaryrefslogtreecommitdiff
path: root/src/lua/modules/event/event.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua/modules/event/event.cpp')
-rw-r--r--src/lua/modules/event/event.cpp192
1 files changed, 108 insertions, 84 deletions
diff --git a/src/lua/modules/event/event.cpp b/src/lua/modules/event/event.cpp
index af9f8fc..9f565d0 100644
--- a/src/lua/modules/event/event.cpp
+++ b/src/lua/modules/event/event.cpp
@@ -4,103 +4,127 @@
#include "lua/modules/luax.h"
#include "libjin/jin.h"
-namespace jin
-{
-namespace lua
+namespace JinEngine
{
+ namespace Lua
+ {
- using namespace jin::input;
+ using namespace JinEngine;
+ using namespace JinEngine::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))
+ /**
+ * Load event poll, return a iterator(a table).
+ */
+ static int l_event_poll(lua_State *L)
{
- // each event is a table
+ /* table to store events */
luax_newtable(L);
- switch (e.type)
+ static Event e;
+ int i = 1;
+ poll:
+ while (pollEvent(&e))
{
- case EventType::QUIT:
- luax_setfield_string(L, "type", "quit");
- break;
+ /**
+ * TODO: ڴСıʱҪtransform
+ *
+ */
+ luax_newtable(L);
+ switch (e.type)
+ {
+ case EventType::QUIT:
+ luax_setfieldstring(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::KEY_DOWN:
+ case EventType::KEY_UP:
+ luax_setfieldstring(L, "type", e.type == EventType::KEY_DOWN ? "KeyDown" : "KeyUp");
+ luax_setfieldstring(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_MOTION:
+ luax_setfieldstring(L, "type", "MouseMotion");
+ luax_setfieldnumber(L, "x", e.motion.x);
+ luax_setfieldnumber(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_DOWN:
+ case EventType::MOUSE_BUTTON_UP:
+ luax_setfieldstring(L, "type", e.type == EventType::MOUSE_BUTTON_DOWN ? "MouseButtonDown" : "MouseButtonUp");
+ luax_setfieldstring(L, "button", getButtonName(e.button.button));
+ luax_setfieldnumber(L, "x", e.button.x);
+ luax_setfieldnumber(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_setfieldstring(L, "type", "Wheel");
+ if(e.wheel.x == -1)
+ luax_setfieldstring(L, "x", "Left");
+ else if(e.wheel.x == 1)
+ luax_setfieldstring(L, "x", "Right");
+ else
+ luax_setfieldstring(L, "x", "None");
+ if (e.wheel.y == -1)
+ luax_setfieldstring(L, "y", "Near");
+ else if (e.wheel.y == 1)
+ luax_setfieldstring(L, "y", "Far");
+ else
+ luax_setfieldstring(L, "y", "None");
+ 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;
+ case EventType::JOYBUTTONDOWN:
+ case EventType::JOYBUTTONUP:
+ luax_setfieldstring(L, "type", e.type == EventType::JOYBUTTONDOWN ? "JoyButtonDown" : "JoyButtonUp");
+ luax_setfieldinteger(L, "which", e.jbutton.which);
+ luax_setfieldstring(L, "button", Input::getJoyButtonName(e.jbutton.button));
+ break;
+
+ case EventType::JOYAXISMOTION:
+ luax_setfieldstring(L, "type", "JoyAxisMotion");
+ luax_setfieldinteger(L, "which", e.jaxis.which);
+ luax_setfieldfstring(L, "axis", Input::getJoyAxisName(e.jaxis.axis));
+ break;
+
+ case EventType::JOYBALLMOTION:
+ case EventType::JOYHATMOTION:
+
+ case EventType::JOYDEVICEADDED:
+ case EventType::JOYDEVICEREMOVED:
+ luax_setfieldfstring(L, "type", e.type == EventType::JOYDEVICEADDED ? "JoyDeviceAdded" : "JoyDeviceRemoved");
+ luax_setfieldinteger(L, "which", e.jdevice.which);
+ break;
+
+ //https://stackoverflow.com/questions/50022316/what-is-sdl-joystick-and-what-is-sdl-gamecontroller-what-are-the-relationships
+ case EventType::CONTROLLERBUTTONDOWN:
+ case EventType::CONTROLLERBUTTONUP:
+
+
+ case EventType::CONTROLLERAXISMOTION:
+
+
+ default:
+ /* ignore other events */
+ luax_pop(L, 1); // pop table out
+ goto poll;
+ break;
+ }
+ luax_rawseti(L, -2, i++);
}
- luax_rawseti(L, -2, i++);
+ return 1;
}
- return 1;
- }
- static const luaL_Reg f[] = {
- { "poll", l_event_poll },
- { 0, 0 }
- };
+ 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;
- }
+ /**
+ * load event module
+ */
+ int luaopen_event(lua_State* L)
+ {
+ luax_newlib(L, f);
+ return 1;
+ }
-} // lua
-} // jin \ No newline at end of file
+ } // namespace Lua
+} // namespace JinEngine \ No newline at end of file