mirror of
https://github.com/holub/mame
synced 2025-04-28 19:14:55 +03:00

Made the sound manager mute controls readable, and got rid of system enable since it just controls system mute anyway. This was causing confusion: phantom2 was trying to use both independentlyt casuing the mute bit to be ignored. THe Lua interface changes are mostly changing methods to properties, some renames to make things clearer, and some additional properties for better control over snapshots.
92 lines
2.2 KiB
Lua
92 lines
2.2 KiB
Lua
local lib = {}
|
|
|
|
local function get_settings_path()
|
|
return emu.subst_env(manager.machine.options.entries.homepath:value():match('([^;]+)')) .. '/autofire/'
|
|
end
|
|
|
|
local function get_settings_filename()
|
|
return emu.romname() .. '.cfg'
|
|
end
|
|
|
|
local function initialize_button(settings)
|
|
if settings.port and settings.field and settings.key and settings.on_frames and settings.off_frames then
|
|
local new_button = {
|
|
port = settings.port,
|
|
field = settings.field,
|
|
key = manager.machine.input:seq_from_tokens(settings.key),
|
|
on_frames = settings.on_frames,
|
|
off_frames = settings.off_frames,
|
|
counter = 0
|
|
}
|
|
local port = manager.machine.ioport.ports[settings.port]
|
|
if port then
|
|
local field = port.fields[settings.field]
|
|
if field then
|
|
new_button.button = field
|
|
return new_button
|
|
end
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
local function serialize_settings(button_list)
|
|
local settings = {}
|
|
for index, button in ipairs(button_list) do
|
|
setting = {
|
|
port = button.port,
|
|
field = button.field,
|
|
key = manager.machine.input:seq_to_tokens(button.key),
|
|
on_frames = button.on_frames,
|
|
off_frames = button.off_frames
|
|
}
|
|
settings[#settings + 1] = setting
|
|
end
|
|
return settings
|
|
end
|
|
|
|
function lib:load_settings()
|
|
local buttons = {}
|
|
local json = require('json')
|
|
local file = io.open(get_settings_path() .. get_settings_filename(), 'r')
|
|
if not file then
|
|
return buttons
|
|
end
|
|
local loaded_settings = json.parse(file:read('a'))
|
|
file:close()
|
|
if not loaded_settings then
|
|
return buttons
|
|
end
|
|
for index, button_settings in ipairs(loaded_settings) do
|
|
local new_button = initialize_button(button_settings)
|
|
if new_button then
|
|
buttons[#buttons + 1] = new_button
|
|
end
|
|
end
|
|
return buttons
|
|
end
|
|
|
|
function lib:save_settings(buttons)
|
|
local path = get_settings_path()
|
|
local attr = lfs.attributes(path)
|
|
if not attr then
|
|
lfs.mkdir(path)
|
|
elseif attr.mode ~= 'directory' then
|
|
return
|
|
end
|
|
if #buttons == 0 then
|
|
os.remove(path .. get_settings_filename())
|
|
return
|
|
end
|
|
local json = require('json')
|
|
local settings = serialize_settings(buttons)
|
|
local data = json.stringify(settings, {indent = true})
|
|
local file = io.open(path .. get_settings_filename(), 'w')
|
|
if file then
|
|
file:write(data)
|
|
file:close()
|
|
end
|
|
end
|
|
|
|
return lib
|