summaryrefslogtreecommitdiffstatshomepage
path: root/src/frontend/mame/luaengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/mame/luaengine.cpp')
-rw-r--r--src/frontend/mame/luaengine.cpp28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp
index 2be6737e124..8c5ab6888a1 100644
--- a/src/frontend/mame/luaengine.cpp
+++ b/src/frontend/mame/luaengine.cpp
@@ -624,6 +624,13 @@ bool lua_engine::menu_callback(const std::string &menu, int index, const std::st
return ret;
}
+void lua_engine::set_machine(running_machine *machine)
+{
+ if (!machine || (machine != m_machine))
+ m_seq_poll.reset();
+ m_machine = machine;
+}
+
int lua_engine::enumerate_functions(const char *id, std::function<bool(const sol::protected_function &func)> &&callback)
{
int count = 0;
@@ -2085,7 +2092,10 @@ void lua_engine::initialize()
input_type.set("seq_to_tokens", [](input_manager &input, sol::user<input_seq> seq) { return input.seq_to_tokens(seq); });
input_type.set("seq_name", [](input_manager &input, sol::user<input_seq> seq) { return input.seq_name(seq); });
input_type.set("seq_clean", [](input_manager &input, sol::user<input_seq> seq) { input_seq cleaned_seq = input.seq_clean(seq); return sol::make_user(cleaned_seq); });
- input_type.set("seq_poll_start", [](input_manager &input, const char *cls_string, sol::object seq) {
+ input_type.set("seq_poll_start", [this](input_manager &input, const char *cls_string, sol::object seq) {
+ if (!m_seq_poll)
+ m_seq_poll.reset(new input_sequence_poller(input));
+
input_item_class cls;
if (!strcmp(cls_string, "switch"))
cls = ITEM_CLASS_SWITCH;
@@ -2098,13 +2108,17 @@ void lua_engine::initialize()
else
cls = ITEM_CLASS_INVALID;
- input_seq *start = nullptr;
- if(seq.is<sol::user<input_seq>>())
- start = &seq.as<sol::user<input_seq>>();
- input.seq_poll_start(cls, start);
+ if (seq.is<sol::user<input_seq>>())
+ m_seq_poll->start(cls, seq.as<sol::user<input_seq>>());
+ else
+ m_seq_poll->start(cls);
+ });
+ input_type.set("seq_poll", [this](input_manager &input) {
+ return m_seq_poll->poll();
+ });
+ input_type.set("seq_poll_final", [this](input_manager &input) {
+ return sol::make_user(m_seq_poll->valid() ? m_seq_poll->sequence() : input_seq());
});
- input_type.set("seq_poll", &input_manager::seq_poll);
- input_type.set("seq_poll_final", [](input_manager &input) { return sol::make_user(input.seq_poll_final()); });
input_type.set("device_classes", sol::property([this](input_manager &input) {
sol::table result = sol().create_table();
for (input_device_class devclass_id = DEVICE_CLASS_FIRST_VALID; devclass_id <= DEVICE_CLASS_LAST_VALID; devclass_id++)