mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-06 00:55:50 +00:00
162 lines
6.2 KiB
Lua
162 lines
6.2 KiB
Lua
local types = require('openmw.types')
|
|
local self = require('openmw.self')
|
|
|
|
local common = require('scripts.omw.settings.common')
|
|
|
|
local function registerPage(options)
|
|
types.Player.sendMenuEvent(self, common.registerPageEvent, options)
|
|
end
|
|
|
|
---
|
|
-- @type PageOptions
|
|
-- @field #string key A unique key
|
|
-- @field #string l10n A localization context (an argument of core.l10n)
|
|
-- @field #string name A key from the localization context
|
|
-- @field #string description A key from the localization context (optional, can be `nil`)
|
|
|
|
---
|
|
-- @type GroupOptions
|
|
-- @field #string key A unique key, starts with "Settings" by convention
|
|
-- @field #string l10n A localization context (an argument of core.l10n)
|
|
-- @field #string name A key from the localization context
|
|
-- @field #string description A key from the localization context (optional, can be `nil`)
|
|
-- @field #string page Key of a page which will contain this group
|
|
-- @field #number order Groups within the same page are sorted by this number, or their key for equal values.
|
|
-- Defaults to 0.
|
|
-- @field #boolean permanentStorage Whether the group should be stored in permanent storage, or in the save file
|
|
-- @field #list<#SettingOptions> settings A [iterables#List](iterables.html#List) table of #SettingOptions
|
|
|
|
---
|
|
-- Table of setting options
|
|
-- @type SettingOptions
|
|
-- @field #string key A unique key
|
|
-- @field #string name A key from the localization context
|
|
-- @field #string description A key from the localization context (optional, can be `nil`)
|
|
-- @field default A default value
|
|
-- @field #string renderer A renderer key (see the "Built-in Setting Renderers" page)
|
|
-- @field argument An argument for the renderer
|
|
|
|
return {
|
|
interfaceName = 'Settings',
|
|
---
|
|
-- @module Settings
|
|
-- @usage
|
|
-- -- In a player script
|
|
-- local storage = require('openmw.storage')
|
|
-- local I = require('openmw.interfaces')
|
|
-- I.Settings.registerPage {
|
|
-- key = 'MyModPage',
|
|
-- l10n = 'MyMod',
|
|
-- name = 'My Mod Name',
|
|
-- description = 'My Mod Description',
|
|
-- }
|
|
-- I.Settings.registerGroup {
|
|
-- key = 'SettingsPlayerMyMod',
|
|
-- page = 'MyModPage',
|
|
-- l10n = 'MyMod',
|
|
-- name = 'My Group Name',
|
|
-- description = 'My Group Description',
|
|
-- permanentStorage = false,
|
|
-- settings = {
|
|
-- {
|
|
-- key = 'Greeting',
|
|
-- renderer = 'textLine',
|
|
-- name = 'Greeting',
|
|
-- description = 'Text to display when the game starts',
|
|
-- default = 'Hello, world!',
|
|
-- },
|
|
-- },
|
|
-- }
|
|
-- local playerSettings = storage.playerSection('SettingsPlayerMyMod')
|
|
-- ...
|
|
-- ui.showMessage(playerSettings:get('Greeting'))
|
|
-- -- ...
|
|
-- -- access a setting page registered by a global script
|
|
-- local globalSettings = storage.globalSection('SettingsGlobalMyMod')
|
|
interface = {
|
|
---
|
|
-- @field [parent=#Settings] #number version
|
|
version = 1,
|
|
---
|
|
-- @function [parent=#Settings] registerPage Register a page to be displayed in the settings menu,
|
|
-- available in player and menu scripts
|
|
-- @param #PageOptions options
|
|
-- @usage
|
|
-- I.Settings.registerPage({
|
|
-- key = 'MyModName',
|
|
-- l10n = 'MyModName',
|
|
-- name = 'MyModName',
|
|
-- description = 'MyModDescription',
|
|
-- })---
|
|
registerPage = registerPage,
|
|
---
|
|
-- @function [parent=#Settings] registerRenderer Register a renderer,
|
|
-- only available in menu scripts (DEPRECATED in player scripts)
|
|
-- @param #string key
|
|
-- @param #function renderer A renderer function, receives setting's value,
|
|
-- a function to change it and an argument from the setting options
|
|
-- @usage
|
|
-- I.Settings.registerRenderer('text', function(value, set, arg)
|
|
-- return {
|
|
-- type = ui.TYPE.TextEdit,
|
|
-- props = {
|
|
-- size = util.vector2(arg and arg.size or 150, 30),
|
|
-- text = value,
|
|
-- textColor = util.color.rgb(1, 1, 1),
|
|
-- textSize = 15,
|
|
-- textAlignV = ui.ALIGNMENT.End,
|
|
-- },
|
|
-- events = {
|
|
-- textChanged = async:callback(function(s) set(s) end),
|
|
-- },
|
|
-- }
|
|
-- end)
|
|
registerRenderer = function(name)
|
|
print(([[Can't register setting renderer "%s". registerRenderer and moved to Menu context Settings interface]])
|
|
:format(name))
|
|
end,
|
|
---
|
|
-- @function [parent=#Settings] registerGroup Register a group to be attached to a page,
|
|
-- available in player, menu and global scripts
|
|
-- Note: menu scripts only allow group with permanentStorage = true, but can render the page before a game is loaded!
|
|
-- @param #GroupOptions options
|
|
-- @usage
|
|
-- I.Settings.registerGroup {
|
|
-- key = 'SettingsTest',
|
|
-- page = 'test',
|
|
-- l10n = 'test',
|
|
-- name = 'Player',
|
|
-- description = 'Player settings group',
|
|
-- permanentStorage = false,
|
|
-- settings = {
|
|
-- {
|
|
-- key = 'Greeting',
|
|
-- default = 'Hi',
|
|
-- renderer = 'textLine',
|
|
-- name = 'Text Input',
|
|
-- description = 'Short text input',
|
|
-- },
|
|
-- {
|
|
-- key = 'Flag',
|
|
-- default = false,
|
|
-- renderer = 'checkbox',
|
|
-- name = 'Flag',
|
|
-- description = 'Flag toggle',
|
|
-- },
|
|
-- }
|
|
-- }
|
|
registerGroup = common.registerGroup,
|
|
---
|
|
-- @function [parent=#Settings] updateRendererArgument Change the renderer argument of a setting
|
|
-- available both in player, menu and global scripts
|
|
-- @param #string groupKey A settings group key
|
|
-- @param #string settingKey A setting key
|
|
-- @param argument A renderer argument
|
|
updateRendererArgument = common.updateRendererArgument,
|
|
},
|
|
engineHandlers = {
|
|
onLoad = common.onLoad,
|
|
onSave = common.onSave,
|
|
},
|
|
}
|