Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local defaultOptions = {
- vsync = false,
- showFps = false,
- showPing = true,
- fullscreen = false,
- classicControl = false,
- smartWalk = false,
- dashWalk = false,
- autoChaseOverride = true,
- showStatusMessagesInConsole = true,
- showEventMessagesInConsole = true,
- showInfoMessagesInConsole = true,
- showTimestampsInConsole = true,
- showLevelsInConsole = true,
- showPrivateMessagesInConsole = true,
- showPrivateMessagesOnScreen = true,
- showLeftPanel = false,
- foregroundFrameRate = 61,
- backgroundFrameRate = 201,
- painterEngine = 0,
- enableAudio = true,
- enableMusicSound = true,
- musicSoundVolume = 100,
- enableLights = true,
- ambientLight = 25,
- displayNames = true,
- displayHealth = true,
- displayMana = true,
- displayText = true,
- dontStretchShrink = false,
- turnDelay = 50,
- hotkeyDelay = 50,
- }
- local optionsWindow
- local optionsButton
- local optionsTabBar
- local options = {}
- 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(true)
- if g_graphics.getPainterEngine() == 2 then
- enginesRadioGroup:selectWidget(ogl2)
- else
- enginesRadioGroup:selectWidget(ogl1)
- end
- 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
- if not g_graphics.canCacheBackbuffer() then
- graphicsPanel:getChildById('foregroundFrameRate'):disable()
- graphicsPanel:getChildById('foregroundFrameRateLabel'):disable()
- end
- end
- function init()
- for k,v in pairs(defaultOptions) do
- g_settings.setDefault(k, v)
- options[k] = v
- end
- optionsWindow = g_ui.displayUI('options')
- optionsWindow:hide()
- optionsTabBar = optionsWindow:getChildById('optionsTabBar')
- optionsTabBar:setContentWidget(optionsWindow:getChildById('optionsTabContent'))
- g_keyboard.bindKeyDown('Ctrl+Shift+F', function() toggleOption('fullscreen') end)
- g_keyboard.bindKeyDown('Ctrl+N', toggleDisplays)
- generalPanel = g_ui.loadUI('game')
- optionsTabBar:addTab(tr('Game'), generalPanel, '/images/optionstab/game')
- consolePanel = g_ui.loadUI('console')
- optionsTabBar:addTab(tr('Console'), consolePanel, '/images/optionstab/console')
- graphicsPanel = g_ui.loadUI('graphics')
- optionsTabBar:addTab(tr('Graphics'), graphicsPanel, '/images/optionstab/graphics')
- audioPanel = g_ui.loadUI('audio')
- optionsTabBar:addTab(tr('Audio'), audioPanel, '/images/optionstab/audio')
- optionsButton = modules.client_topmenu.addLeftButton('optionsButton', tr('Options'), '/images/topbuttons/options', toggle)
- audioButton = modules.client_topmenu.addLeftButton('audioButton', tr('Audio'), '/images/topbuttons/audio', function() toggleOption('enableAudio') end)
- addEvent(function() setup() end)
- end
- function terminate()
- g_keyboard.unbindKeyDown('Ctrl+Shift+F')
- g_keyboard.unbindKeyDown('Ctrl+N')
- optionsWindow:destroy()
- optionsButton:destroy()
- audioButton:destroy()
- end
- function setup()
- setupGraphicsEngines()
- -- load options
- for k,v in pairs(defaultOptions) do
- if type(v) == 'boolean' then
- setOption(k, g_settings.getBoolean(k), true)
- elseif type(v) == 'number' then
- setOption(k, g_settings.getNumber(k), true)
- end
- end
- end
- function toggle()
- if optionsWindow:isVisible() then
- hide()
- else
- show()
- end
- end
- function show()
- optionsWindow:show()
- optionsWindow:raise()
- optionsWindow:focus()
- end
- function hide()
- optionsWindow:hide()
- end
- function toggleDisplays()
- if options['displayNames'] and options['displayHealth'] and options['displayMana'] then
- setOption('displayNames', false)
- elseif options['displayHealth'] then
- setOption('displayHealth', false)
- setOption('displayMana', false)
- else
- if not options['displayNames'] and not options['displayHealth'] then
- setOption('displayNames', true)
- else
- setOption('displayHealth', true)
- setOption('displayMana', true)
- end
- end
- end
- function toggleOption(key)
- setOption(key, not getOption(key))
- end
- function setOption(key, value, force)
- if not force and options[key] == value then return end
- local gameMapPanel = modules.game_interface.getMapPanel()
- if key == 'vsync' then
- g_window.setVerticalSync(value)
- elseif key == 'showFps' then
- modules.client_topmenu.setFpsVisible(value)
- elseif key == 'showPing' then
- modules.client_topmenu.setPingVisible(value)
- elseif key == 'fullscreen' then
- g_window.setFullscreen(value)
- elseif key == 'enableAudio' then
- g_sounds.setAudioEnabled(value)
- if value then
- audioButton:setIcon('/images/topbuttons/audio')
- else
- audioButton:setIcon('/images/topbuttons/audio_mute')
- end
- elseif key == 'enableMusicSound' then
- g_sounds.getChannel(SoundChannels.Music):setEnabled(value)
- elseif key == 'musicSoundVolume' then
- g_sounds.getChannel(SoundChannels.Music):setGain(value/100)
- audioPanel:getChildById('musicSoundVolumeLabel'):setText(tr('Music volume: %d', value))
- elseif key == 'showLeftPanel' then
- modules.game_interface.getLeftPanel():setOn(value)
- elseif key == 'backgroundFrameRate' then
- local text, v = value, value
- if value <= 0 or value >= 201 then text = 'max' v = 0 end
- graphicsPanel:getChildById('backgroundFrameRateLabel'):setText(tr('Game framerate limit: %s', text))
- g_app.setBackgroundPaneMaxFps(v)
- elseif key == 'foregroundFrameRate' then
- local text, v = value, value
- if value <= 0 or value >= 61 then text = 'max' v = 0 end
- graphicsPanel:getChildById('foregroundFrameRateLabel'):setText(tr('Interface framerate limit: %s', text))
- g_app.setForegroundPaneMaxFps(v)
- elseif key == 'enableLights' then
- gameMapPanel:setDrawLights(value and options['ambientLight'] < 100)
- graphicsPanel:getChildById('ambientLight'):setEnabled(value)
- graphicsPanel:getChildById('ambientLightLabel'):setEnabled(value)
- elseif key == 'ambientLight' then
- graphicsPanel:getChildById('ambientLightLabel'):setText(tr('Ambient light: %s%%', value))
- gameMapPanel:setMinimumAmbientLight(value/100)
- gameMapPanel:setDrawLights(options['enableLights'] and value < 100)
- elseif key == 'painterEngine' then
- g_graphics.selectPainterEngine(value)
- elseif key == 'displayNames' then
- gameMapPanel:setDrawNames(value)
- elseif key == 'displayHealth' then
- gameMapPanel:setDrawHealthBars(value)
- elseif key == 'displayMana' then
- gameMapPanel:setDrawManaBar(value)
- elseif key == 'displayText' then
- gameMapPanel:setDrawTexts(value)
- elseif key == 'dontStretchShrink' then
- addEvent(function()
- modules.game_interface.updateStretchShrink()
- end)
- elseif key == 'turnDelay' then
- generalPanel:getChildById('turnDelayLabel'):setText(tr('Turn delay: %sms', value))
- elseif key == 'hotkeyDelay' then
- generalPanel:getChildById('hotkeyDelayLabel'):setText(tr('Hotkey delay: %sms', value))
- end
- -- change value for keybind updates
- for _,panel in pairs(optionsTabBar:getTabsPanel()) do
- local widget = panel:recursiveGetChildById(key)
- if widget then
- if widget:getStyle().__class == 'UICheckBox' then
- widget:setChecked(value)
- elseif widget:getStyle().__class == 'UIScrollBar' then
- widget:setValue(value)
- end
- break
- end
- end
- g_settings.set(key, value)
- options[key] = value
- end
- function getOption(key)
- return options[key]
- end
- function addTab(name, panel, icon)
- optionsTabBar:addTab(name, panel, icon)
- end
- function addButton(name, func, icon)
- optionsTabBar:addButton(name, func, icon)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement