mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-01 13:45:34 +00:00
51 lines
No EOL
1.9 KiB
Lua
51 lines
No EOL
1.9 KiB
Lua
return function(player)
|
|
local core = require('openmw.core')
|
|
local types = require('openmw.types')
|
|
local world = not player and require('openmw.world')
|
|
|
|
|
|
local sections = require('scripts.omw.settings.sections')
|
|
local render = player and require('scripts.omw.settings.render') or nil
|
|
|
|
local settingChangeEvent = 'omwSettingChanged'
|
|
local globalSetEvent = 'omwSettingGlobalSet'
|
|
local registerEvent = 'omwSettingGroupRegistered'
|
|
|
|
local groups, scopes, SCOPE, isGlobal = sections.groups, sections.scopes, sections.SCOPE, sections.isGlobal
|
|
|
|
|
|
|
|
local saveScope = scopes[player and SCOPE.SavePlayer or SCOPE.SaveGlobal]
|
|
return {
|
|
interfaceName = 'Settings',
|
|
interface = {
|
|
getGroup = getGroup,
|
|
SCOPE = SCOPE,
|
|
registerGroup = not player and require('scripts.omw.settings.register') or nil,
|
|
registerType = player and render.registerType or nil,
|
|
},
|
|
engineHandlers = {
|
|
onLoad = function(saved)
|
|
if not player then groups:reset() end
|
|
saveScope:reset(saved)
|
|
end,
|
|
onSave = function()
|
|
return saveScope:asTable()
|
|
end,
|
|
},
|
|
eventHandlers = {
|
|
[settingChangeEvent] = function(e)
|
|
getGroup(e.groupName):__changed(e.settingName, e.value)
|
|
end,
|
|
[globalSetEvent] = not player and function(e)
|
|
local setting = getSetting(e.groupName, e.settingName)
|
|
if isGlobal(setting.scope) then
|
|
setSettingValue(e.groupName, e.settingName, e.value)
|
|
else
|
|
error(('Unexpected Setting event for a non-global setting %s'):format(e.settingName))
|
|
end
|
|
end or nil,
|
|
[registerEvent] = player and render.onGroupRegistered or nil,
|
|
}
|
|
}
|
|
end |