Rework options visual

This commit is contained in:
Henrique Santiago 2013-01-25 13:33:51 -02:00
parent a144174c41
commit c982ca81a5
6 changed files with 168 additions and 94 deletions

View File

@ -0,0 +1,40 @@
VolumeScrollbar < HorizontalScrollBar
step: 1
@onValueChange: modules.client_options.setOption(self:getId(), self:getValue())
@onSetup: |
UIScrollBar.onSetup(self)
local value = modules.client_options.getOption(self:getId())
self:setValue(value)
Panel
OptionCheckBox
id: enableAudio
!text: tr('Enable audio')
OptionCheckBox
id: enableMusicSound
!text: tr('Enable music sound')
OptionCheckBox
id: enableEffectsSound
!text: tr('Enable effects sound')
Label
id: musicSoundVolumeLabel
!text: tr('Music volume: %d', 100)
anchors.left: parent.left
anchors.right: parent.right
anchors.top: prev.bottom
margin-top: 6
@onSetup: |
local value = modules.client_options.getOption('musicSoundVolume')
self:setText(tr('Music volume: %d', value))
VolumeScrollbar
id: musicSoundVolume
anchors.left: parent.left
anchors.right: parent.right
anchors.top: prev.bottom
margin-top: 3
minimum: 0
maximum: 100

View File

@ -12,14 +12,10 @@ Panel
!text: tr('Enable smart walking')
!tooltip: tr('Will detect when to use diagonal step based on the\nkeys you are pressing')
OptionCheckBox
id: walkBooster
!text: tr('Enable walk booster')
!tooltip: tr('Also known as dash in tibia community, recommended\nfor playing characters with high speed')
OptionCheckBox
id: enableMusic
!text: tr('Enable music')
//OptionCheckBox
//id: walkBooster
//!text: tr('Enable walk booster')
//!tooltip: tr('Also known as dash in community, recommended\nfor playing characters with high speed')
OptionCheckBox
id: showPing

View File

@ -8,18 +8,12 @@ FrameRateScrollbar < HorizontalScrollBar
self:setValue(value)
Panel
Label
!text: tr('Graphics Engine:')
anchors.left: parent.left
anchors.top: parent.top
ButtonBox
id: opengl1
anchors.left: prev.right
anchors.verticalCenter: prev.verticalCenter
anchors.left: parent.left
anchors.top: parent.top
text: OpenGL 1
size: 80 20
margin-left: 6
ButtonBox
id: opengl2
@ -29,6 +23,14 @@ Panel
size: 80 20
margin-left: 4
ButtonBox
id: directx9
anchors.left: prev.right
anchors.verticalCenter: prev.verticalCenter
text: DirectX 9
size: 80 20
margin-left: 4
OptionCheckBox
id: vsync
!text: tr('Enable vertical synchronization')
@ -39,12 +41,17 @@ Panel
!text: tr('Show frame rate')
OptionCheckBox
id: fullscreen
!text: tr('Fullscreen')
id: enableLights
!text: tr('Enable lights')
OptionCheckBox
id: dontStretchShrink
!text: tr("Don't stretch or shrink Game Window")
id: enableShaders
!text: tr('Enable shader effects')
OptionCheckBox
id: fullscreen
!text: tr('Fullscreen')
tooltip: Ctrl+Shift+F
Label
id: backgroundFrameRateLabel
@ -52,7 +59,7 @@ Panel
anchors.left: parent.left
anchors.right: parent.right
anchors.top: prev.bottom
margin-top: 16
margin-top: 6
@onSetup: |
local value = modules.client_options.getOption('backgroundFrameRate')
local text = value

View File

@ -1,9 +1,8 @@
local defaultOptions = {
vsync = false,
showFps = true,
showPing = true,
showFps = false,
showPing = false,
fullscreen = false,
dontStretchShrink = false,
classicControl = false,
walkBooster = false,
smartWalk = false,
@ -15,38 +14,58 @@ local defaultOptions = {
showLevelsInConsole = true,
showPrivateMessagesInConsole = false,
showPrivateMessagesOnScreen = true,
enableMusic = true,
showLeftPanel = false,
foregroundFrameRate = 61,
backgroundFrameRate = 201,
ambientLight = 15,
painterEngine = 0
painterEngine = 0,
enableAudio = true,
enableMusicSound = true,
enableShaders = true,
musicSoundVolume = 100,
enableLights = true,
enableShaders = true,
ambientLight = 25,
enableEffectsSound = 0
}
local warningWindow
local optionsWindow
local optionsButton
local optionsTabBar
local options = {}
local gamePanel
local generalPanel
local consolePanel
local graphicsPanel
local soundPanel
local audioButton
local function setupGraphicsEngines()
local enginesRadioGroup = UIRadioGroup.create()
local ogl1 = graphicsPanel:getChildById('opengl1')
local ogl2 = graphicsPanel:getChildById('opengl2')
local dx9 = graphicsPanel:getChildById('directx9')
enginesRadioGroup:addWidget(ogl1)
enginesRadioGroup:addWidget(ogl2)
enginesRadioGroup:addWidget(dx9)
if g_window.getPlatformType() == 'WIN32-EGL' then
enginesRadioGroup:selectWidget(dx9)
ogl1:setEnabled(false)
ogl2:setEnabled(false)
dx9:setEnabled(true)
else
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
ogl1:setEnabled(g_graphics.isPainterEngineAvailable(1))
ogl2:setEnabled(g_graphics.isPainterEngineAvailable(2))
if g_app.getOs() ~= 'windows' then
dx9:hide()
end
end
enginesRadioGroup.onSelectionChange = function(self, selected)
if selected == ogl1 then
@ -60,21 +79,9 @@ local function setupGraphicsEngines()
graphicsPanel:getChildById('foregroundFrameRate'):disable()
graphicsPanel:getChildById('foregroundFrameRateLabel'):disable()
end
end
function displayWarning(widget, warning)
if warningWindow and warningWindow:isVisible() then
return
end
if widget:isChecked() then
local yesCallback = function() warningWindow:destroy() warningWindow=nil end
local noCallback = function() widget:setChecked(false) warningWindow:destroy() warningWindow=nil end
warningWindow = displayGeneralBox('Warning', tr(warning), {
{ text='Yes', callback=yesCallback },
{ text='No', callback=noCallback },
anchor=AnchorHorizontalCenter}, yesCallback, noCallback)
end
local shadersBox = graphicsPanel:getChildById('enableShaders')
shadersBox:setEnabled(g_graphics.getPainterEngine() == 2)
end
function init()
@ -88,49 +95,45 @@ function init()
end
end
g_keyboard.bindKeyDown('Ctrl+D', function() toggle() end)
g_keyboard.bindKeyDown('Ctrl+F', function() toggleOption('fullscreen') end)
g_keyboard.bindKeyDown('Ctrl+Shift+D', function() toggleOption('walkBooster') end)
g_keyboard.bindKeyDown('Ctrl+Shift+F', function() toggleOption('fullscreen') end)
--g_keyboard.bindKeyDown('Ctrl+D', function() toggleOption('walkBooster') end)
optionsWindow = g_ui.displayUI('options')
optionsWindow:hide()
optionsButton = modules.client_topmenu.addLeftButton('optionsButton', tr('Options') .. ' (Ctrl+D)', '/images/topbuttons/options', toggle)
optionsButton = modules.client_topmenu.addLeftButton('optionsButton', tr('Options'), '/images/topbuttons/options', toggle)
optionsTabBar = optionsWindow:getChildById('optionsTabBar')
optionsTabBar:setContentWidget(optionsWindow:getChildById('optionsTabContent'))
gamePanel = g_ui.loadUI('game')
optionsTabBar:addTab(tr('Game'), gamePanel)
generalPanel = g_ui.loadUI('game')
optionsTabBar:addTab(tr('Game'), generalPanel, '/images/optionstab/game')
consolePanel = g_ui.loadUI('console')
optionsTabBar:addTab(tr('Console'), consolePanel)
optionsTabBar:addTab(tr('Console'), consolePanel, '/images/optionstab/console')
graphicsPanel = g_ui.loadUI('graphics')
optionsTabBar:addTab(tr('Graphics'), graphicsPanel)
optionsTabBar:addTab(tr('Graphics'), graphicsPanel, '/images/optionstab/graphics')
if g_game.isOfficialTibia() then
local optionWalkBooster = gamePanel:getChildById('walkBooster')
optionWalkBooster.onCheckChange = function(widget)
displayWarning(widget, "This feature could be detectable by official Tibia servers. Would like to continue?")
setOption(widget:getId(), widget:isChecked())
end
end
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()
end
function terminate()
g_keyboard.unbindKeyDown('Ctrl+D')
g_keyboard.unbindKeyDown('Ctrl+F')
g_keyboard.unbindKeyDown('Ctrl+Shift+D')
--g_keyboard.unbindKeyDown('Ctrl+D')
g_keyboard.unbindKeyDown('Ctrl+Shift+F')
optionsWindow:destroy()
optionsWindow = nil
optionsButton:destroy()
optionsButton = nil
optionsTabBar = nil
gamePanel = nil
generalPanel = nil
consolePanel = nil
graphicsPanel = nil
audioPanel = nil
end
function toggle()
@ -152,12 +155,7 @@ function hide()
end
function toggleOption(key)
local optionWidget = optionsWindow:recursiveGetChildById(key)
if optionWidget then
optionWidget:setChecked(not getOption(key))
else
setOption(key, not getOption(key))
end
end
function setOption(key, value)
@ -176,12 +174,22 @@ function setOption(key, value)
end)
elseif key == 'fullscreen' then
g_window.setFullscreen(value)
elseif key == 'dontStretchShrink' then
addEvent(function()
modules.game_interface.updateStretchShrink()
end)
elseif key == 'enableMusic' then
elseif key == 'enableAudio' then
g_sounds.setAudioEnabled(value)
addEvent(function()
if value then
audioButton:setIcon('/images/topbuttons/audio')
else
audioButton:setIcon('/images/topbuttons/audio_mute')
end
end)
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
elseif key == 'showLeftPanel' then
addEvent(function()
modules.game_interface.getLeftPanel():setOn(value)
@ -208,19 +216,35 @@ function setOption(key, value)
graphicsPanel:getChildById('foregroundFrameRateLabel'):setText(tr('Interface framerate limit: %s', text))
end
g_app.setForegroundPaneMaxFps(value)
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)
elseif key == 'ambientLight' then
addEvent(function()
local map = rootWidget:recursiveGetChildById('gameMapPanel')
local map = modules.game_interface.getMapPanel()
if graphicsPanel then
graphicsPanel:getChildById('ambientLightLabel'):setText(tr('Ambient light: %s%%', value))
end
if map then
map:setMinimumAmbientLight(value/100)
map:setDrawLights(value < 100)
end
map:setDrawLights(options['enableLights'] and value < 100)
end)
elseif key == 'painterEngine' then
g_graphics.selectPainterEngine(value)
addEvent(function()
if graphicsPanel then
local shadersBox = graphicsPanel:getChildById('enableShaders')
shadersBox:setEnabled(value == 2)
end
end)
end
g_settings.set(key, value)
options[key] = value
@ -230,4 +254,6 @@ function getOption(key)
return options[key]
end
function addTab(name, panel, icon)
optionsTabBar:addTab(name, panel, icon)
end

View File

@ -17,24 +17,24 @@ OptionCheckBox < CheckBox
MainWindow
id: optionsWindow
!text: tr('Options')
size: 350 310
size: 480 340
@onEnter: modules.client_options.hide()
@onEscape: modules.client_options.hide()
TabBarRounded
TabBarVertical
id: optionsTabBar
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
Panel
id: optionsTabContent
anchors.top: optionsTabBar.bottom
anchors.left: parent.left
anchors.top: optionsTabBar.top
anchors.left: optionsTabBar.right
anchors.right: parent.right
anchors.bottom: parent.bottom
margin-top: 10
anchors.bottom: optionsTabBar.bottom
margin-left: 10
Button
!text: tr('Ok')

View File

@ -296,7 +296,7 @@ KeyCodeDescs = {
[KeyNumpad6] = 'Numpad6',
[KeyNumpad7] = 'Numpad7',
[KeyNumpad8] = 'Numpad8',
[KeyNumpad9] = 'Numpad9'
[KeyNumpad9] = 'Numpad9',
}
NetworkMessageTypes = {
@ -307,5 +307,10 @@ NetworkMessageTypes = {
U64 = 5,
NumberString = 6,
String = 7,
Table = 8
Table = 8,
}
SoundChannels = {
Music = 1,
Ambient = 2,
}