mirror of
https://github.com/holub/mame
synced 2025-06-05 12:26:35 +03:00
plugins/cheat: add ui support for joystick hotkeys [Carl]
This commit is contained in:
parent
fae8777edf
commit
40b37af1c3
@ -125,7 +125,16 @@ function cheat.startplugin()
|
||||
local keymap = require("cheat/keycodemap")
|
||||
cheat.hotkeys.keys = manager:machine():input():seq_from_tokens(val.keys)
|
||||
local keysstr = {}
|
||||
val.keys:gsub("([^ ]+)", function(s) keysstr[#keysstr + 1] = keymap[s] return s end)
|
||||
val.keys:gsub("([^ ]+)", function(s)
|
||||
if s:find("KEYCODE_", 1, true) then
|
||||
keysstr[#keysstr + 1] = keymap[s]
|
||||
elseif s:find("JOYCODE_", 1, true) then
|
||||
local stick, button = s:match("JOYCODE_([0-9]+)_BUTTON([0-9]+)")
|
||||
if stick and button then
|
||||
keysstr[#keysstr + 1] = string.format("Joy%dBut%d", stick, button - 1)
|
||||
end
|
||||
end
|
||||
end)
|
||||
cheat.hotkeys.keysstr = keysstr
|
||||
cheat.hotkeys.pressed = false
|
||||
end
|
||||
@ -145,9 +154,16 @@ function cheat.startplugin()
|
||||
if #hotkey.keys > 0 then
|
||||
hotkey.keys = hotkey.keys .. " "
|
||||
end
|
||||
hotkey.keys = hotkey.keys .. keymap[key]
|
||||
if key:find("Joy", 1, true) then
|
||||
local stick, button = key:match("Joy([0-9]+)But([0-9]+)")
|
||||
hotkey.keys = hotkey.keys .. string.format("JOYCODE_%d_BUTTON%d", stick, button + 1)
|
||||
else
|
||||
hotkey.keys = hotkey.keys .. keymap[key]
|
||||
end
|
||||
end
|
||||
if hotkey.keys ~= "" then
|
||||
hotkeys[#hotkeys + 1] = hotkey
|
||||
end
|
||||
hotkeys[#hotkeys + 1] = hotkey
|
||||
end
|
||||
end
|
||||
if #hotkeys > 0 then
|
||||
@ -338,6 +354,7 @@ function cheat.startplugin()
|
||||
local hotkeysel = 0
|
||||
local hotkey = 1
|
||||
local hotmod = 1
|
||||
local hotmode = 1
|
||||
local hotkeylist = {}
|
||||
local function run_if(func) if func then func() end return func or false end
|
||||
local function is_oneshot(cheat) return cheat.script and not cheat.script.run and not cheat.script.off end
|
||||
@ -350,65 +367,89 @@ function cheat.startplugin()
|
||||
end
|
||||
local keys = {"1","2","3","4","5","6","7","8","9","0"}
|
||||
local mods = {"LSHFT","RSHFT","LALT","RALT","LCTRL","RCTRL","LWIN","RWIN","MENU"}
|
||||
local mode = {"Key", "Joy"}
|
||||
|
||||
local function hkpopfunc(cheat)
|
||||
local function menu_lim(val, min, max)
|
||||
if min == max then
|
||||
return 0
|
||||
elseif val == min then
|
||||
return "r"
|
||||
elseif val == max then
|
||||
return "l"
|
||||
else
|
||||
return "lr"
|
||||
end
|
||||
end
|
||||
|
||||
local hkmenu = {}
|
||||
hkmenu[1] = {"Set hotkey", "", "off"}
|
||||
hkmenu[2] = {cheat.desc, "", "off"}
|
||||
hkmenu[3] = {"Current Keys", cheat.hotkeys and table.concat(cheat.hotkeys.keysstr, " ") or "None", "off"}
|
||||
hkmenu[4] = {"---", "", "off"}
|
||||
hkmenu[5] = {"Key", keys[hotkey], "lr"}
|
||||
if hotkey == 1 then
|
||||
hkmenu[5][3] = "r"
|
||||
elseif hotkey == #keys then
|
||||
hkmenu[5][3] = "l"
|
||||
hkmenu[5] = {"Hotkey Type", mode[hotmode], menu_lim(hotmode, 1, 2)}
|
||||
if hotmode == 2 then
|
||||
hkmenu[6] = {"Stick", hotkey, menu_lim(hotkey, 1, 9)}
|
||||
hkmenu[7] = {"Button", hotmod, menu_lim(hotmod, 0, 9)}
|
||||
else
|
||||
hkmenu[6] = {"Key", keys[hotkey], menu_lim(hotkey, 1, #keys)}
|
||||
hkmenu[7] = {"Modifier", mods[hotmod], menu_lim(hotmod, 1, #mods)}
|
||||
end
|
||||
hkmenu[6] = {"Modifier", mods[hotmod], "lr"}
|
||||
if hotkey == 1 then
|
||||
hkmenu[6][3] = "r"
|
||||
elseif hotkey == #keys then
|
||||
hkmenu[6][3] = "l"
|
||||
end
|
||||
hkmenu[7] = {"---", "", ""}
|
||||
hkmenu[8] = {"Done", "", ""}
|
||||
hkmenu[9] = {"Clear and Exit", "", ""}
|
||||
hkmenu[10] = {"Cancel", "", ""}
|
||||
hkmenu[8] = {"---", "", ""}
|
||||
hkmenu[9] = {"Done", "", ""}
|
||||
hkmenu[10] = {"Clear and Exit", "", ""}
|
||||
hkmenu[11] = {"Cancel", "", ""}
|
||||
return hkmenu
|
||||
end
|
||||
|
||||
local function hkcbfunc(cheat, index, event)
|
||||
if event == "right" then
|
||||
if index == 5 then
|
||||
hotkey = math.min(hotkey + 1, #keys)
|
||||
if index == 5 and hotmode == 1 then
|
||||
hotmode = 2
|
||||
hotkey = 1
|
||||
hotmod = 0
|
||||
return true
|
||||
elseif index == 6 then
|
||||
hotmod = math.min(hotmod + 1, #mods)
|
||||
hotkey = math.min(hotkey + 1, hotmode == 2 and 9 or #keys)
|
||||
return true
|
||||
elseif index == 7 then
|
||||
hotmod = math.min(hotmod + 1, hotmode == 2 and 9 or #mods)
|
||||
return true
|
||||
end
|
||||
elseif event == "left" then
|
||||
if index == 5 then
|
||||
hotkey = math.max(hotkey - 1, 1)
|
||||
if index == 5 and hotmode == 2 then
|
||||
hotmode = 1
|
||||
hotkey = 1
|
||||
hotmod = 1
|
||||
return true
|
||||
elseif index == 6 then
|
||||
hotmod = math.max(hotmod - 1, 1)
|
||||
hotkey = math.max(hotkey - 1, 1)
|
||||
return true
|
||||
elseif index == 7 then
|
||||
hotmod = math.max(hotmod - 1, hotmode == 2 and 0 or 1)
|
||||
return true
|
||||
end
|
||||
elseif event == "select" then
|
||||
if index == 8 then
|
||||
if index == 9 then
|
||||
local keymap = require("cheat/keycodemap")
|
||||
cheat.hotkeys = {}
|
||||
cheat.hotkeys.keys = manager:machine():input():seq_from_tokens(keymap[keys[hotkey]] .. " " .. keymap[mods[hotmod]])
|
||||
cheat.hotkeys.keysstr = {keys[hotkey], mods[hotmod]}
|
||||
if hotmode == 2 then
|
||||
cheat.hotkeys.keys = manager:machine():input():seq_from_tokens(string.format("JOYCODE_%d_BUTTON%d", hotkey, hotmod + 1))
|
||||
cheat.hotkeys.keysstr = {string.format("Joy%dBut%d", hotkey, hotmod)}
|
||||
else
|
||||
cheat.hotkeys.keys = manager:machine():input():seq_from_tokens(keymap[keys[hotkey]] .. " " .. keymap[mods[hotmod]])
|
||||
cheat.hotkeys.keysstr = {keys[hotkey], mods[hotmod]}
|
||||
end
|
||||
cheat.hotkeys.pressed = false
|
||||
hotkeysel = 0
|
||||
hotkeymenu = false
|
||||
return true
|
||||
elseif index == 9 then
|
||||
elseif index == 10 then
|
||||
cheat.hotkeys = nil
|
||||
hotkeysel = 0
|
||||
hotkeymenu = false
|
||||
return true
|
||||
elseif index == 10 then
|
||||
elseif index == 11 then
|
||||
hotkeysel = 0
|
||||
return true
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user