diff options
author | cracyc <cracyc@users.noreply.github.com> | 2017-07-13 21:30:29 -0500 |
---|---|---|
committer | cracyc <cracyc@users.noreply.github.com> | 2017-07-13 21:33:06 -0500 |
commit | f985171b4cdab352bc6642ea3ab3501b0acd1269 (patch) | |
tree | 92f46a16b6e9fdfd8628c16d6c7ad068441bac09 /src/frontend/mame/luaengine.cpp | |
parent | c17e4d8ca814148f6a1dd7350d32982f9a7a19be (diff) |
plugins/cheat: poll for setting hotkeys [Carl]
Diffstat (limited to 'src/frontend/mame/luaengine.cpp')
-rw-r--r-- | src/frontend/mame/luaengine.cpp | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp index 67d6cfecf17..1cf1f2133e4 100644 --- a/src/frontend/mame/luaengine.cpp +++ b/src/frontend/mame/luaengine.cpp @@ -139,6 +139,33 @@ namespace sol } }; template <> + struct checker<input_item_class> + { + template <typename Handler> + static bool check (lua_State* L, int index, Handler&& handler, record& tracking) + { + return stack::check<const std::string &>(L, index, handler); + } + }; + template <> + struct getter<input_item_class> + { + static input_item_class get(lua_State* L, int index, record& tracking) + { + const std::string item_class = stack::get<const std::string &>(L, index); + if(item_class == "switch") + return ITEM_CLASS_SWITCH; + else if(item_class == "absolute" || item_class == "abs") + return ITEM_CLASS_ABSOLUTE; + else if(item_class == "relative" || item_class == "rel") + return ITEM_CLASS_RELATIVE; + else if(item_class == "maximum" || item_class == "max") + return ITEM_CLASS_MAXIMUM; + else + return ITEM_CLASS_INVALID; + } + }; + template <> struct pusher<sol::buffer *> { static int push(lua_State* L, sol::buffer *buff) @@ -1425,15 +1452,31 @@ void lua_engine::initialize() /* machine:input() * input:code_from_token(token) - get input_code for KEYCODE_* string token * input:code_pressed(code) - get pressed state for input_code + * input:code_to_token(code) - get KEYCODE_* string token for code + * input:code_name(code) - get code friendly name * input:seq_from_tokens(tokens) - get input_seq for multiple space separated KEYCODE_* string tokens * input:seq_pressed(seq) - get pressed state for input_seq + * input:seq_to_token(seq) - get KEYCODE_* string tokens for seq + * input:seq_to_name(seq) - get seq friendly name */ sol().registry().new_usertype<input_manager>("input", "new", sol::no_constructor, "code_from_token", [](input_manager &input, const char *token) { return sol::make_user(input.code_from_token(token)); }, "code_pressed", [](input_manager &input, sol::user<input_code> code) { return input.code_pressed(code); }, + "code_to_token", [](input_manager &input, sol::user<input_code> code) { return input.code_to_token(code); }, + "code_name", [](input_manager &input, sol::user<input_code> code) { return input.code_name(code); }, "seq_from_tokens", [](input_manager &input, const char *tokens) { input_seq seq; input.seq_from_tokens(seq, tokens); return sol::make_user(seq); }, - "seq_pressed", [](input_manager &input, sol::user<input_seq> seq) { return input.seq_pressed(seq); }); + "seq_pressed", [](input_manager &input, sol::user<input_seq> seq) { return input.seq_pressed(seq); }, + "seq_to_tokens", [](input_manager &input, sol::user<input_seq> seq) { return input.seq_to_tokens(seq); }, + "seq_name", [](input_manager &input, sol::user<input_seq> seq) { return input.seq_name(seq); }, + "seq_poll_start", [](input_manager &input, input_item_class cls, sol::object seq) { + input_seq *start = nullptr; + if(seq.is<sol::user<input_seq>>()) + start = &seq.as<sol::user<input_seq>>(); + input.seq_poll_start(cls, start); + }, + "seq_poll", &input_manager::seq_poll, + "seq_poll_final", [](input_manager &input) { return sol::make_user(input.seq_poll_final()); }); /* machine:uiinput() * uiinput:find_mouse() - returns x, y, button state, ui render target |