summaryrefslogtreecommitdiffstatshomepage
path: root/plugins/inputmacro
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/inputmacro')
-rw-r--r--plugins/inputmacro/init.lua11
-rw-r--r--plugins/inputmacro/inputmacro_menu.lua105
-rw-r--r--plugins/inputmacro/inputmacro_persist.lua18
3 files changed, 80 insertions, 54 deletions
diff --git a/plugins/inputmacro/init.lua b/plugins/inputmacro/init.lua
index fc2ed2481f0..36d7aeeca2e 100644
--- a/plugins/inputmacro/init.lua
+++ b/plugins/inputmacro/init.lua
@@ -15,11 +15,14 @@ function inputmacro.startplugin()
Configuration data:
* name: display name (string)
* binding: activation sequence (input sequence)
+ * bindingcfg: activation sequence configuration (string)
* earlycancel: cancel or complete on release (Boolean)
- * loop: -1 = release, 0 = prolong, >0 = loop to step on hold (int)
+ * loop: -1 = release, 0 = prolong, >0 = loop to step on hold (integer)
* steps:
* inputs:
- * port: port (I/O port)
+ * port: port tag (string)
+ * mask: port field mask (integer)
+ * type: port field type (integer)
* field: field (I/O port field)
* delay: delay before activating inputs in frames (integer)
* duration: duration to activate inputs for (integer)
@@ -35,7 +38,9 @@ function inputmacro.startplugin()
local function activate_inputs(inputs)
for index, input in ipairs(inputs) do
- active_inputs[string.format('%s.%d.%d', input.port.tag, input.field.mask, input.field.type)] = input.field
+ if input.field then
+ active_inputs[string.format('%s.%d.%d', input.port, input.mask, input.type)] = input.field
+ end
end
end
diff --git a/plugins/inputmacro/inputmacro_menu.lua b/plugins/inputmacro/inputmacro_menu.lua
index 944361c88fe..92c18706509 100644
--- a/plugins/inputmacro/inputmacro_menu.lua
+++ b/plugins/inputmacro/inputmacro_menu.lua
@@ -37,6 +37,7 @@ local function new_macro()
return {
name = name,
binding = nil,
+ bindingcfg = '',
earlycancel = true,
loop = -1,
steps = {
@@ -44,6 +45,8 @@ local function new_macro()
inputs = {
{
port = nil,
+ mask = nil,
+ type = nil,
field = nil } },
delay = 0,
duration = 1 } } }
@@ -83,11 +86,11 @@ function start_input_menu(handler, start_field)
table.insert(menu_stack, MENU_TYPES.INPUT)
end
-function handle_input(index, action)
+local function handle_input(index, action)
return input_menu:handle(index, action)
end
-function populate_input()
+local function populate_input()
return input_menu:populate(input_start_field)
end
@@ -120,6 +123,7 @@ local function handle_edit_items(index, event)
if edit_switch_poller:poll() then
if edit_switch_poller.sequence then
edit_current_macro.binding = edit_switch_poller.sequence
+ edit_current_macro.bindingcfg = manager.machine.input:seq_to_tokens(edit_switch_poller.sequence)
end
edit_switch_poller = nil
return true
@@ -233,11 +237,12 @@ local function handle_edit_items(index, event)
elseif command.action == 'input' then
local inputs = edit_current_macro.steps[command.step].inputs
if event == 'select' then
- local hanlder =
- function(field)
- inputs[command.input].port = field.port
- inputs[command.input].field = field
- end
+ local function hanlder(field)
+ inputs[command.input].port = field.port.tag
+ inputs[command.input].mask = field.mask
+ inputs[command.input].type = field.type
+ inputs[command.input].field = field
+ end
start_input_menu(hanlder, inputs[command.input].field)
edit_start_selection = index
return true
@@ -250,12 +255,14 @@ local function handle_edit_items(index, event)
elseif command.action == 'addinput' then
if event == 'select' then
local inputs = edit_current_macro.steps[command.step].inputs
- local handler =
- function(field)
- inputs[#inputs + 1] = {
- port = field.port,
- field = field }
- end
+ local function handler(field)
+ local newinput = {
+ port = field.port.tag,
+ mask = field.mask,
+ type = field.type,
+ field = field }
+ table.insert(inputs, newinput)
+ end
start_input_menu(handler)
edit_start_selection = index
return true
@@ -280,22 +287,23 @@ local function handle_edit_items(index, event)
elseif command.action == 'addstep' then
if event == 'select' then
local steps = edit_current_macro.steps
- local handler =
- function(field)
- local newstep = {
- inputs = {
- {
- port = field.port,
- field = field } },
- delay = 0,
- duration = 1 }
- table.insert(steps, edit_insert_position, newstep)
- if edit_current_macro.loop >= edit_insert_position then
- edit_current_macro.loop = edit_current_macro.loop + 1
- end
- edit_start_step = edit_insert_position
- edit_insert_position = edit_insert_position + 1
+ local function handler(field)
+ local newstep = {
+ inputs = {
+ {
+ port = field.port.tag,
+ mask = field.mask,
+ type = field.type,
+ field = field } },
+ delay = 0,
+ duration = 1 }
+ table.insert(steps, edit_insert_position, newstep)
+ if edit_current_macro.loop >= edit_insert_position then
+ edit_current_macro.loop = edit_current_macro.loop + 1
end
+ edit_start_step = edit_insert_position
+ edit_insert_position = edit_insert_position + 1
+ end
start_input_menu(handler)
edit_start_selection = index
return true
@@ -383,7 +391,14 @@ local function add_edit_items(items)
edit_items[#items] = { action = 'duration', step = i }
for j, input in ipairs(step.inputs) do
- local inputname = input.field and _p('input-name', input.field.name) or _p('plugin-inputmacro', '[not set]')
+ local inputname
+ if input.field then
+ inputname = _p('input-name', input.field.name)
+ elseif input.port then
+ inputname = _p('plugin-inputmacro', 'n/a')
+ else
+ inputname = _p('plugin-inputmacro', '[not set]')
+ end
items[#items + 1] = { string.format(_p('plugin-inputmacro', 'Input %d'), j), inputname, '' }
edit_items[#items] = { action = 'input', step = i, input = j }
end
@@ -456,16 +471,16 @@ end
local function populate_add()
local items = { }
- items[#items + 1] = { _p('plugin-inputmacro', 'Add Input Macro'), '', 'off' }
- items[#items + 1] = { '---', '', '' }
+ table.insert(items, { _p('plugin-inputmacro', 'Add Input Macro'), '', 'off' })
+ table.insert(items, { '---', '', '' })
add_edit_items(items)
- items[#items + 1] = { '---', '', '' }
+ table.insert(items, { '---', '', '' })
if current_macro_complete() then
- items[#items + 1] = { _p('plugin-inputmacro', 'Create'), '', '' }
+ table.insert(items, { _p('plugin-inputmacro', 'Create'), '', '' })
else
- items[#items + 1] = { _p('plugin-inputmacro', 'Cancel'), '', '' }
+ table.insert(items, { _p('plugin-inputmacro', 'Cancel'), '', '' })
end
edit_item_exit = #items
@@ -481,13 +496,13 @@ end
local function populate_edit()
local items = { }
- items[#items + 1] = { _p('plugin-inputmacro', 'Edit Input Macro'), '', 'off' }
- items[#items + 1] = { '---', '', '' }
+ table.insert(items, { _p('plugin-inputmacro', 'Edit Input Macro'), '', 'off' })
+ table.insert(items, { '---', '', '' })
add_edit_items(items)
- items[#items + 1] = { '---', '', '' }
- items[#items + 1] = { _p('plugin-inputmacro', 'Done'), '', '' }
+ table.insert(items, { '---', '', '' })
+ table.insert(items, { _p('plugin-inputmacro', 'Done'), '', '' })
edit_item_exit = #items
local selection = edit_start_selection
@@ -542,25 +557,25 @@ function populate_macros()
local ioport = manager.machine.ioport
local items = { }
- items[#items + 1] = { _p('plugin-inputmacro', 'Input Macros'), '', 'off' }
- items[#items + 1] = { string.format(_p('plugin-inputmacro', 'Press %s to delete'), manager.ui:get_general_input_setting(ioport:token_to_input_type('UI_CLEAR'))), '', 'off' }
- items[#items + 1] = { '---', '', '' }
+ table.insert(items, { _p('plugin-inputmacro', 'Input Macros'), '', 'off' })
+ table.insert(items, { string.format(_p('plugin-inputmacro', 'Press %s to delete'), manager.ui:get_general_input_setting(ioport:token_to_input_type('UI_CLEAR'))), '', 'off' })
+ table.insert(items, { '---', '', '' })
macros_item_first_macro = #items + 1
if #macros > 0 then
for index, macro in ipairs(macros) do
- items[#items + 1] = { macro.name, input:seq_name(macro.binding), '' }
+ table.insert(items, { macro.name, input:seq_name(macro.binding), '' })
if macros_start_macro == index then
macros_selection_save = #items
end
end
else
- items[#items + 1] = { _p('plugin-inputmacro', '[no macros]'), '', 'off' }
+ table.insert(items, { _p('plugin-inputmacro', '[no macros]'), '', 'off' })
end
macros_start_macro = nil
- items[#items + 1] = { '---', '', '' }
- items[#items + 1] = { _p('plugin-inputmacro', 'Add macro'), '', '' }
+ table.insert(items, { '---', '', '' })
+ table.insert(items, { _p('plugin-inputmacro', 'Add macro'), '', '' })
macros_item_add = #items
local selection = macros_selection_save
diff --git a/plugins/inputmacro/inputmacro_persist.lua b/plugins/inputmacro/inputmacro_persist.lua
index b66d3c85c5c..4e043852c51 100644
--- a/plugins/inputmacro/inputmacro_persist.lua
+++ b/plugins/inputmacro/inputmacro_persist.lua
@@ -20,6 +20,7 @@ local function make_macro(setting)
local result = {
name = setting.name,
binding = manager.machine.input:seq_from_tokens(setting.binding),
+ bindingcfg = setting.binding,
earlycancel = setting.earlycancel,
loop = setting.loop,
steps = { } }
@@ -33,13 +34,18 @@ local function make_macro(setting)
duration = step.duration }
for j, input in ipairs(step.inputs) do
if input.port and input.mask and input.type then
+ local ipt = {
+ port = input.port,
+ mask = input.mask,
+ type = ioport:token_to_input_type(input.type) }
local port = ioport.ports[input.port]
if port then
local field = port:field(input.mask)
- if field and (field.type == ioport:token_to_input_type(input.type)) then
- table.insert(s.inputs, { port = port, field = field })
+ if field and (field.type == ipt.type) then
+ ipt.field = field
end
end
+ table.insert(s.inputs, ipt)
end
end
if #s.inputs > 0 then
@@ -66,7 +72,7 @@ local function make_settings(macros)
for i, macro in ipairs(macros) do
local m = {
name = macro.name,
- binding = input:seq_to_tokens(macro.binding),
+ binding = macro.bindingcfg,
earlycancel = macro.earlycancel,
loop = macro.loop,
steps = { } }
@@ -79,9 +85,9 @@ local function make_settings(macros)
table.insert(m.steps, s)
for k, input in ipairs(step.inputs) do
local b = {
- port = input.port.tag,
- mask = input.field.mask,
- type = ioport:input_type_to_token(input.field.type) }
+ port = input.port,
+ mask = input.mask,
+ type = ioport:input_type_to_token(input.type) }
table.insert(s.inputs, b)
end
end