tibia-client/modules/client_options/options.lua

257 lines
7.3 KiB
Lua
Raw Normal View History

2012-07-05 20:49:10 +02:00
local defaultOptions = {
vsync = false,
2013-01-25 16:33:51 +01:00
showFps = false,
showPing = false,
2012-07-05 20:49:10 +02:00
fullscreen = false,
classicControl = false,
smartWalk = false,
autoChaseOverride = true,
2012-07-05 20:49:10 +02:00
showStatusMessagesInConsole = true,
showEventMessagesInConsole = true,
showInfoMessagesInConsole = true,
showTimestampsInConsole = true,
showLevelsInConsole = true,
showPrivateMessagesInConsole = false,
showPrivateMessagesOnScreen = true,
showLeftPanel = false,
foregroundFrameRate = 61,
backgroundFrameRate = 201,
2013-01-25 16:33:51 +01:00
painterEngine = 0,
enableAudio = true,
enableMusicSound = true,
enableShaders = true,
musicSoundVolume = 100,
enableLights = true,
enableShaders = true,
ambientLight = 25,
2012-07-05 20:49:10 +02:00
}
2012-01-07 21:00:07 +01:00
local optionsWindow
2012-01-07 18:36:58 +01:00
local optionsButton
local optionsTabBar
2012-07-05 20:49:10 +02:00
local options = {}
2013-01-25 16:33:51 +01:00
local generalPanel
local consolePanel
local graphicsPanel
2013-01-25 16:33:51 +01:00
local soundPanel
local audioButton
local function setupGraphicsEngines()
2012-06-26 00:13:30 +02:00
local enginesRadioGroup = UIRadioGroup.create()
local ogl1 = graphicsPanel:getChildById('opengl1')
local ogl2 = graphicsPanel:getChildById('opengl2')
2013-01-25 16:33:51 +01:00
local dx9 = graphicsPanel:getChildById('directx9')
enginesRadioGroup:addWidget(ogl1)
enginesRadioGroup:addWidget(ogl2)
2013-01-25 16:33:51 +01:00
enginesRadioGroup:addWidget(dx9)
2013-01-25 16:33:51 +01:00
if g_window.getPlatformType() == 'WIN32-EGL' then
enginesRadioGroup:selectWidget(dx9)
ogl1:setEnabled(false)
ogl2:setEnabled(false)
dx9:setEnabled(true)
else
2013-01-25 16:33:51 +01:00
ogl1:setEnabled(g_graphics.isPainterEngineAvailable(1))
ogl2:setEnabled(g_graphics.isPainterEngineAvailable(2))
dx9:setEnabled(false)
if g_graphics.getPainterEngine() == 2 then
enginesRadioGroup:selectWidget(ogl2)
else
enginesRadioGroup:selectWidget(ogl1)
end
2013-01-25 16:33:51 +01:00
if g_app.getOs() ~= 'windows' then
dx9:hide()
end
end
enginesRadioGroup.onSelectionChange = function(self, selected)
if selected == ogl1 then
setOption('painterEngine', 1)
elseif selected == ogl2 then
setOption('painterEngine', 2)
end
end
2012-06-08 18:58:08 +02:00
if not g_graphics.canCacheBackbuffer() then
2012-08-24 19:16:30 +02:00
graphicsPanel:getChildById('foregroundFrameRate'):disable()
graphicsPanel:getChildById('foregroundFrameRateLabel'):disable()
2012-06-08 18:58:08 +02:00
end
2012-01-07 18:36:58 +01:00
2013-01-25 16:33:51 +01:00
local shadersBox = graphicsPanel:getChildById('enableShaders')
shadersBox:setEnabled(g_graphics.getPainterEngine() == 2)
end
function init()
-- load options
2012-07-05 20:49:10 +02:00
for k,v in pairs(defaultOptions) do
g_settings.setDefault(k, v)
if type(v) == 'boolean' then
setOption(k, g_settings.getBoolean(k))
2012-07-05 20:49:10 +02:00
elseif type(v) == 'number' then
setOption(k, g_settings.getNumber(k))
end
2012-01-06 10:10:55 +01:00
end
2012-01-07 22:19:40 +01:00
2013-01-25 16:33:51 +01:00
g_keyboard.bindKeyDown('Ctrl+Shift+F', function() toggleOption('fullscreen') end)
optionsWindow = g_ui.displayUI('options')
optionsWindow:hide()
2013-01-25 16:33:51 +01:00
optionsButton = modules.client_topmenu.addLeftButton('optionsButton', tr('Options'), '/images/topbuttons/options', toggle)
optionsTabBar = optionsWindow:getChildById('optionsTabBar')
optionsTabBar:setContentWidget(optionsWindow:getChildById('optionsTabContent'))
2013-01-25 16:33:51 +01:00
generalPanel = g_ui.loadUI('game')
optionsTabBar:addTab(tr('Game'), generalPanel, '/images/optionstab/game')
consolePanel = g_ui.loadUI('console')
2013-01-25 16:33:51 +01:00
optionsTabBar:addTab(tr('Console'), consolePanel, '/images/optionstab/console')
graphicsPanel = g_ui.loadUI('graphics')
2013-01-25 16:33:51 +01:00
optionsTabBar:addTab(tr('Graphics'), graphicsPanel, '/images/optionstab/graphics')
2013-01-25 16:33:51 +01:00
audioPanel = g_ui.loadUI('audio')
optionsTabBar:addTab(tr('Audio'), audioPanel, '/images/optionstab/audio')
audioButton = modules.client_topmenu.addLeftButton('audioButton', tr('Audio'), '/images/topbuttons/audio', function() toggleOption('enableAudio') end)
setupGraphicsEngines()
2012-01-06 09:48:59 +01:00
end
2011-11-17 01:12:11 +01:00
function terminate()
2013-01-25 16:33:51 +01:00
--g_keyboard.unbindKeyDown('Ctrl+D')
g_keyboard.unbindKeyDown('Ctrl+Shift+F')
2012-01-07 21:00:07 +01:00
optionsWindow:destroy()
optionsWindow = nil
optionsButton:destroy()
optionsButton = nil
optionsTabBar = nil
2013-01-25 16:33:51 +01:00
generalPanel = nil
consolePanel = nil
graphicsPanel = nil
2013-01-25 16:33:51 +01:00
audioPanel = nil
2012-01-07 21:00:07 +01:00
end
function toggle()
2012-01-07 21:00:07 +01:00
if optionsWindow:isVisible() then
hide()
2012-01-07 21:00:07 +01:00
else
show()
2012-01-07 21:00:07 +01:00
end
end
function show()
2012-01-07 21:00:07 +01:00
optionsWindow:show()
optionsWindow:raise()
optionsWindow:focus()
2012-01-07 21:00:07 +01:00
end
function hide()
2012-01-07 21:00:07 +01:00
optionsWindow:hide()
2011-11-17 01:12:11 +01:00
end
function toggleOption(key)
2013-01-25 16:33:51 +01:00
setOption(key, not getOption(key))
end
function setOption(key, value)
2012-07-05 20:49:10 +02:00
if options[key] == value then return end
2012-01-06 10:10:55 +01:00
if key == 'vsync' then
g_window.setVerticalSync(value)
elseif key == 'showFps' then
2012-01-07 01:18:08 +01:00
addEvent(function()
local frameCounter = rootWidget:recursiveGetChildById('frameCounter')
if frameCounter then frameCounter:setVisible(value) end
2012-01-07 01:18:08 +01:00
end)
elseif key == 'showPing' then
addEvent(function()
local ping = rootWidget:recursiveGetChildById('pingLabel')
if ping then ping:setVisible(value) end
end)
2012-01-06 10:10:55 +01:00
elseif key == 'fullscreen' then
2012-07-05 20:49:10 +02:00
g_window.setFullscreen(value)
2013-01-25 16:33:51 +01:00
elseif key == 'enableAudio' then
g_sounds.setAudioEnabled(value)
addEvent(function()
2013-01-25 16:33:51 +01:00
if value then
audioButton:setIcon('/images/topbuttons/audio')
else
audioButton:setIcon('/images/topbuttons/audio_mute')
end
end)
2013-01-25 16:33:51 +01:00
elseif key == 'enableMusicSound' then
g_sounds.getChannel(SoundChannels.Music):setEnabled(value)
elseif key == 'musicSoundVolume' then
g_sounds.getChannel(SoundChannels.Music):setGain(value/100)
if audioPanel then
audioPanel:getChildById('musicSoundVolumeLabel'):setText(tr('Music volume: %d', value))
end
2012-06-21 21:31:22 +02:00
elseif key == 'showLeftPanel' then
addEvent(function()
modules.game_interface.getLeftPanel():setOn(value)
2012-06-21 21:31:22 +02:00
end)
2012-07-05 20:49:10 +02:00
elseif key == 'backgroundFrameRate' then
local text = value
if value <= 0 or value >= 201 then
text = 'max'
value = 0
end
if graphicsPanel then
graphicsPanel:getChildById('backgroundFrameRateLabel'):setText(tr('Game framerate limit: %s', text))
end
2012-07-05 20:49:10 +02:00
g_app.setBackgroundPaneMaxFps(value)
elseif key == 'foregroundFrameRate' then
2012-07-07 16:44:53 +02:00
local text = value
if value <= 0 or value >= 61 then
text = 'max'
value = 0
end
if graphicsPanel then
graphicsPanel:getChildById('foregroundFrameRateLabel'):setText(tr('Interface framerate limit: %s', text))
2012-07-07 16:44:53 +02:00
end
g_app.setForegroundPaneMaxFps(value)
2013-01-25 16:33:51 +01:00
elseif key == 'enableLights' then
addEvent(function()
local map = modules.game_interface.getMapPanel()
map:setDrawLights(value and options['ambientLight'] < 100)
if graphicsPanel then
graphicsPanel:getChildById('ambientLight'):setEnabled(value)
graphicsPanel:getChildById('ambientLightLabel'):setEnabled(value)
end
end)
elseif key == 'enableShaders' then
g_graphics.setShouldUseShaders(value)
2012-11-30 17:47:53 +01:00
elseif key == 'ambientLight' then
addEvent(function()
2013-01-25 16:33:51 +01:00
local map = modules.game_interface.getMapPanel()
2012-11-30 17:47:53 +01:00
if graphicsPanel then
graphicsPanel:getChildById('ambientLightLabel'):setText(tr('Ambient light: %s%%', value))
end
2013-01-25 16:33:51 +01:00
map:setMinimumAmbientLight(value/100)
map:setDrawLights(options['enableLights'] and value < 100)
2012-11-30 17:47:53 +01:00
end)
2012-07-05 20:49:10 +02:00
elseif key == 'painterEngine' then
g_graphics.selectPainterEngine(value)
2013-01-25 16:33:51 +01:00
addEvent(function()
if graphicsPanel then
local shadersBox = graphicsPanel:getChildById('enableShaders')
shadersBox:setEnabled(value == 2)
end
end)
2012-01-06 10:10:55 +01:00
end
2012-06-26 00:13:30 +02:00
g_settings.set(key, value)
options[key] = value
end
function getOption(key)
return options[key]
end
2012-07-05 20:49:10 +02:00
2013-01-25 16:33:51 +01:00
function addTab(name, panel, icon)
optionsTabBar:addTab(name, panel, icon)
end