mirror of
https://github.com/Refactorio/RedMew.git
synced 2025-03-03 14:53:01 +02:00
Merge branch 'develop' of https://github.com/Valansch/RedMew into gui_settings
This commit is contained in:
commit
d4667992d1
@ -29,7 +29,7 @@ Public.events = {
|
||||
|
||||
local memory = {
|
||||
-- when already scheduled, no new schedules have to be added
|
||||
sync_scheduled = false,
|
||||
sync_scheduled = {},
|
||||
|
||||
-- when locked it won't schedule anything to prevent recursion syncing back to server
|
||||
locked = false,
|
||||
@ -43,13 +43,16 @@ local function schedule_sync_to_server(player_index)
|
||||
set_timeout_in_ticks(1, do_sync_settings_to_server, {
|
||||
player_index = player_index
|
||||
})
|
||||
memory.sync_scheduled = true
|
||||
memory.sync_scheduled[player_index] = true
|
||||
end
|
||||
|
||||
do_sync_settings_to_server = Token.register(function(params)
|
||||
local player_index = params.player_index;
|
||||
local player = game.get_player(player_index)
|
||||
if not player or not player.valid then
|
||||
-- The player doesn't exist or got removed, ensure it's reset so it doesn't
|
||||
-- stay on scheduled
|
||||
memory.sync_scheduled[player_index] = nil
|
||||
return
|
||||
end
|
||||
|
||||
@ -57,7 +60,7 @@ do_sync_settings_to_server = Token.register(function(params)
|
||||
Server.set_data('player_settings', player.name, Settings.all(player_index))
|
||||
|
||||
-- mark it as updated
|
||||
memory.sync_scheduled = false
|
||||
memory.sync_scheduled[player_index] = nil
|
||||
|
||||
raise_event(Public.events.on_synced_to_server, {
|
||||
player = player
|
||||
@ -65,7 +68,8 @@ do_sync_settings_to_server = Token.register(function(params)
|
||||
end)
|
||||
|
||||
local function setting_set(event)
|
||||
if memory.locked or memory.sync_scheduled then
|
||||
local player_index = event.player_index
|
||||
if memory.locked or memory.sync_scheduled[player_index] then
|
||||
return
|
||||
end
|
||||
|
||||
@ -73,7 +77,7 @@ local function setting_set(event)
|
||||
return
|
||||
end
|
||||
|
||||
schedule_sync_to_server(event.player_index)
|
||||
schedule_sync_to_server(player_index)
|
||||
end
|
||||
|
||||
local on_player_settings_get = Token.register(function (data)
|
||||
|
@ -71,6 +71,11 @@ local settings_type = {
|
||||
|
||||
local settings = {}
|
||||
local memory = {}
|
||||
local raw_callback_setting = {
|
||||
callback = function (input)
|
||||
return true, input
|
||||
end
|
||||
}
|
||||
|
||||
Global.register(memory, function (tbl) memory = tbl end)
|
||||
|
||||
@ -158,7 +163,7 @@ end
|
||||
function Public.set(player_index, name, value)
|
||||
local setting = settings[name]
|
||||
if not setting then
|
||||
error(format('Setting "%s" does not exist.', name), 2)
|
||||
setting = raw_callback_setting
|
||||
end
|
||||
|
||||
local success, sanitized_value = setting.callback(value)
|
||||
@ -196,7 +201,7 @@ end
|
||||
function Public.get(player_index, name)
|
||||
local setting = settings[name]
|
||||
if not setting then
|
||||
return error(format('Setting "%s" does not exist.', name), 2)
|
||||
return nil
|
||||
end
|
||||
|
||||
local player_settings = memory[player_index]
|
||||
@ -226,9 +231,40 @@ function Public.all(player_index)
|
||||
end
|
||||
end
|
||||
|
||||
-- not all settings might be mapped, edge-case is triggered when the
|
||||
-- server contains settings that are not known in this instance
|
||||
for name, value in pairs(player_settings) do
|
||||
if output[name] == nil then
|
||||
output[name] = value
|
||||
end
|
||||
end
|
||||
|
||||
return output
|
||||
end
|
||||
|
||||
---Removes a value for a setting for a given name, giving it the default value.
|
||||
---
|
||||
---@param player_index number
|
||||
---@param name string
|
||||
function Public.unset(player_index, name)
|
||||
local player_settings = memory[player_index]
|
||||
if not player_settings then
|
||||
player_settings = {}
|
||||
memory[player_index] = player_settings
|
||||
end
|
||||
|
||||
local old_value = player_settings[name]
|
||||
player_settings[name] = nil
|
||||
|
||||
raise_event(Public.events.on_setting_set, {
|
||||
setting_name = name,
|
||||
old_value = old_value,
|
||||
new_value = nil,
|
||||
player_index = player_index,
|
||||
value_changed = old_value ~= nil
|
||||
})
|
||||
end
|
||||
|
||||
---Returns the full settings data, note that this is a reference, do not modify
|
||||
---this data unless you know what you're doing!
|
||||
function Public.get_setting_metadata()
|
||||
|
Loading…
x
Reference in New Issue
Block a user