diff options
author | npwoods <npwoods@mess.org> | 2019-07-22 11:12:14 -0400 |
---|---|---|
committer | R. Belmont <rb6502@users.noreply.github.com> | 2019-07-22 11:12:14 -0400 |
commit | 790d2456d59c0da944880e27e014ce2fd9554b08 (patch) | |
tree | fec0c6a5cb9d65c4401290275c2b609d4cf47e77 /src/frontend | |
parent | 5fafe21fcc2b16764596ffd4bd53bd2ea2a6e9fc (diff) |
Exposed miscellaneous ioport_field methods and properties to LUA (#5375)
* Exposing ioport_field::type_class() to LUA
* Exposing ioport_field::seq() to LUA
* Exposing user values on ioport_field to LUA
* Exposing writing user values on ioport_field to LUA
Diffstat (limited to 'src/frontend')
-rw-r--r-- | src/frontend/mame/luaengine.cpp | 55 |
1 files changed, 48 insertions, 7 deletions
diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp index 9e3af7de31a..7ff8bc441d4 100644 --- a/src/frontend/mame/luaengine.cpp +++ b/src/frontend/mame/luaengine.cpp @@ -229,6 +229,22 @@ namespace sol } } + +//------------------------------------------------- +// parse_seq_type - parses a string into an input_seq_type +//------------------------------------------------- + +static input_seq_type parse_seq_type(const std::string &s) +{ + input_seq_type result = SEQ_TYPE_STANDARD; + if (s == "increment") + result = SEQ_TYPE_INCREMENT; + else if (s == "decrement") + result = SEQ_TYPE_DECREMENT; + return result; +} + + //------------------------------------------------- // mem_read - templated memory readers for <sign>,<size> // -> manager:machine().devices[":maincpu"].spaces["program"]:read_i8(0xC000) @@ -1745,6 +1761,8 @@ void lua_engine::initialize() * manager:machine():ioport().ports[port_tag].fields[field_name] * * field:set_value(value) + * field:set_input_seq(seq_type, seq) + * field:input_seq(seq_type) * * field.device - get associated device_t * field.live - get ioport_field_live @@ -1756,6 +1774,7 @@ void lua_engine::initialize() * field.defvalue * field.sensitivity * field.way - amount of available directions + * field.type_class * field.is_analog * field.is_digital_joystick * field.enabled @@ -1771,22 +1790,22 @@ void lua_engine::initialize() * field.type * field.crosshair_scale * field.crosshair_offset + * field.user_value */ sol().registry().new_usertype<ioport_field>("ioport_field", "new", sol::no_constructor, "set_value", &ioport_field::set_value, "set_input_seq", [](ioport_field &f, const std::string &seq_type_string, sol::user<input_seq> seq) { - input_seq_type seq_type = SEQ_TYPE_STANDARD; - if (seq_type_string == "increment") - seq_type = SEQ_TYPE_INCREMENT; - else if (seq_type_string == "decrement") - seq_type = SEQ_TYPE_DECREMENT; - + input_seq_type seq_type = parse_seq_type(seq_type_string); ioport_field::user_settings settings; f.get_user_settings(settings); settings.seq[seq_type] = seq; f.set_user_settings(settings); }, + "input_seq", [](ioport_field &f, const std::string &seq_type_string) { + input_seq_type seq_type = parse_seq_type(seq_type_string); + return sol::make_user(f.seq(seq_type)); + }, "device", sol::property(&ioport_field::device), "name", sol::property(&ioport_field::name), "default_name", sol::property([](ioport_field &f) { @@ -1797,6 +1816,18 @@ void lua_engine::initialize() "defvalue", sol::property(&ioport_field::defvalue), "sensitivity", sol::property(&ioport_field::sensitivity), "way", sol::property(&ioport_field::way), + "type_class", sol::property([](ioport_field &f) { + switch (f.type_class()) + { + case INPUT_CLASS_KEYBOARD: return "keyboard"; + case INPUT_CLASS_CONTROLLER: return "controller"; + case INPUT_CLASS_CONFIG: return "config"; + case INPUT_CLASS_DIPSWITCH: return "dipswitch"; + case INPUT_CLASS_MISC: return "misc"; + default: break; + } + throw false; + }), "is_analog", sol::property(&ioport_field::is_analog), "is_digital_joystick", sol::property(&ioport_field::is_digital_joystick), "enabled", sol::property(&ioport_field::enabled), @@ -1812,7 +1843,17 @@ void lua_engine::initialize() "type", sol::property(&ioport_field::type), "live", sol::property(&ioport_field::live), "crosshair_scale", sol::property(&ioport_field::crosshair_scale, &ioport_field::set_crosshair_scale), - "crosshair_offset", sol::property(&ioport_field::crosshair_offset, &ioport_field::set_crosshair_offset)); + "crosshair_offset", sol::property(&ioport_field::crosshair_offset, &ioport_field::set_crosshair_offset), + "user_value", sol::property([](ioport_field &f) { + ioport_field::user_settings settings; + f.get_user_settings(settings); + return settings.value; + }, [](ioport_field &f, ioport_value val) { + ioport_field::user_settings settings; + f.get_user_settings(settings); + settings.value = val; + f.set_user_settings(settings); + })); /* ioport_field_live library |