Skip to content

Commit

Permalink
Moved most springsetting responsibility from the settings widget to C…
Browse files Browse the repository at this point in the history
…onfiguration. Added graphics preset autodetection based on gpuMemorySize.
  • Loading branch information
GoogleFrog committed Jun 4, 2017
1 parent 3c619e6 commit bb4dc56
Show file tree
Hide file tree
Showing 4 changed files with 202 additions and 143 deletions.
4 changes: 3 additions & 1 deletion LuaMenu/configs/gameConfig/zk/mainConfig.lua
Expand Up @@ -13,7 +13,7 @@ local gameUnitInformation = VFS.Include(LUA_DIRNAME .. "configs/gameConfig/" ..

local link_reportPlayer, link_userPage, link_homePage, link_replays, link_maps, link_particularMapPage = VFS.Include(LUA_DIRNAME .. "configs/gameConfig/" .. shortname .. "/linkFunctions.lua")

local settingsConfig, settingsDefault = VFS.Include(LUA_DIRNAME .. "configs/gameConfig/" .. shortname .. "/settingsMenu.lua")
local settingsConfig, settingsNames, settingsDefault, SettingsPresetFunc = VFS.Include(LUA_DIRNAME .. "configs/gameConfig/" .. shortname .. "/settingsMenu.lua")

local headingLarge = LUA_DIRNAME .. "configs/gameConfig/" .. shortname .. "/skinning/headingLarge.png"
local headingSmall = LUA_DIRNAME .. "configs/gameConfig/" .. shortname .. "/skinning/headingSmall.png"
Expand Down Expand Up @@ -63,7 +63,9 @@ local externalFuncAndData = {
aiBlacklist = aiBlacklist,
oldAiVersions = oldAiVersions,
settingsConfig = settingsConfig,
settingsNames = settingsNames,
settingsDefault = settingsDefault,
SettingsPresetFunc = SettingsPresetFunc,
singleplayerConfig = singleplayerConfig,
helpSubmenuConfig = helpSubmenuConfig,
skirmishDefault = skirmishDefault,
Expand Down
43 changes: 40 additions & 3 deletions LuaMenu/configs/gameConfig/zk/settingsMenu.lua
@@ -1,6 +1,6 @@
local invertZoomMult = -1

local settings = {
local settingsConfig = {
{
name = "Graphics",
presets = {
Expand Down Expand Up @@ -701,7 +701,7 @@ local settings = {
},
}

local settingsDefaults = {
local settingsDefault = {
WaterType = "Bumpmapped",
WaterQuality = "High",
DeferredRendering = "On",
Expand All @@ -723,4 +723,41 @@ local settingsDefaults = {
CameraPanSpeed = 50,
}

return settings, settingsDefaults
local settingsNames = {}
for i = 1, #settingsConfig do
local subSettings = settingsConfig[i].settings
for j = 1, #subSettings do
local data = subSettings[j]
settingsNames[data.name] = data
if data.options then
data.optionNames = {}
for k = 1, #data.options do
data.optionNames[data.options[k].name] = data.options[k]
end
end
end
end

local function DefaultPresetFunc()
if Platform then
local gpuMemorySize = Platform.gpuMemorySize
Spring.Utilities.TableEcho(Platform, "Platform")
if gpuMemorySize then
if gpuMemorySize < 1024 then
-- Minimal
return settingsConfig[1].presets[1].settings
elseif gpuMemorySize < 2048 then
-- Low
return settingsConfig[1].presets[2].settings
elseif gpuMemorySize == 2048 then
-- Medium
return settingsConfig[1].presets[3].settings
end
end
-- High
return settingsConfig[1].presets[4].settings
end
return false
end

return settingsConfig, settingsNames, settingsDefault, DefaultPresetFunc
133 changes: 133 additions & 0 deletions LuaMenu/widgets/chobby/components/configuration.lua
Expand Up @@ -167,13 +167,130 @@ function Configuration:init()
[5] = {size = 48, shadow = false},
}

self.configParamTypes = {}
for _, param in pairs(Spring.GetConfigParams()) do
self.configParamTypes[param.name] = param.type
end

self.AtiIntelSettingsOverride = nil
self.fixedSettingsOverride = AtiIntelSettingsOverride

self.countryShortnames = VFS.Include(LUA_DIRNAME .. "configs/countryShortname.lua")

self.game_settings = VFS.Include(LUA_DIRNAME .. "configs/springsettings/springsettings.lua")

self.settingsMenuValues = self.gameConfig.settingsDefault

self.animate_lobby = gl.CreateShader ~= nil

self:UpdateFixedSettings()
end

---------------------------------------------------------------------------------
-- Settings
---------------------------------------------------------------------------------

function Configuration:SetSpringsettingsValue(key, value, compatOverride)
if self.doNotSetAnySpringSettings then
return
end

if not compatOverride then
local compatProfile = self.forcedCompatibilityProfile
if compatProfile and compatProfile[key] then
return
end
end

value = (self.fixedSettingsOverride and self.fixedSettingsOverride[key]) or value

local configType = self.configParamTypes[key]
if configType == "int" then
Spring.Echo("SetSettings Int", key, value)
Spring.SetConfigInt(key, value)
elseif configType == "bool" or configType == "float" then
Spring.Echo("SetSettings Value", key, value)
Spring.SetConfigString(key, value)
elseif configType == nil then
Spring.Log("Settings", LOG.WARNING, "No such key: " .. tostring(key) .. ", but setting it as string anyway.")
Spring.SetConfigString(key, value)
else
Spring.Log("Settings", LOG.WARNING, "Unexpected key type: " .. configType .. ", but setting it as string anyway.")
Spring.SetConfigString(key, value)
end
end

function Configuration:UpdateFixedSettings(newOverride)
local gameSettings = self.game_settings

-- Reset old
local oldOverride = self.fixedSettingsOverride
self.fixedSettingsOverride = nil
if oldOverride then
for key, value in pairs(oldOverride) do
if gameSettings[key] then
self:SetSpringsettingsValue(key, gameSettings[key])
end
end
end

-- Apply new
self.fixedSettingsOverride = newOverride
if newOverride then
for key, value in pairs(newOverride) do
self:SetSpringsettingsValue(key, value)
end
end
end

function Configuration:SetSettingsConfigOption(name, newValue)
local setting = self.gameConfig.settingsNames[name]
if not setting then
return false
end

self.settingsMenuValues[name] = newValue

if setting.isNumberSetting then
local applyFunction = setting.applyFunction
if applyFunction then
local applyData = applyFunction(newValue)
if applyData then
for applyName, value in pairs(applyData) do
self.game_settings[applyName] = value
self:SetSpringsettingsValue(applyName, value)
end
end
else
local springValue = setting.springConversion(newValue)
self.game_settings[setting.applyName] = springValue
self:SetSpringsettingsValue(setting.applyName, springValue)
end
else
-- Selection from multiple options
local selectedOption = setting.optionNames[newValue]
if setting.fileTarget then
local sourceFile = VFS.LoadFile(selectedOption.file)
local settingsFile = io.open(setting.fileTarget, "w")
settingsFile:write(sourceFile)
settingsFile:close()
else
local applyData = selectedOption.apply or (selectedOption.applyFunction and selectedOption.applyFunction())
if not applyData then
return
end
for applyName, value in pairs(applyData) do
self.game_settings[applyName] = value
self:SetSpringsettingsValue(applyName, value)
end
end
end
end

function Configuration:ApplySettingsConfigPreset(preset)
for name, value in pairs(preset) do
self:SetSettingsConfigOption(name, value)
end
end

---------------------------------------------------------------------------------
Expand Down Expand Up @@ -207,6 +324,14 @@ function Configuration:SetConfigData(data)
end

self.forcedCompatibilityProfile = VFS.Include(LUA_DIRNAME .. "configs/springsettings/forcedCompatibilityProfile.lua")

self.defaultSettingsPreset = data.defaultSettingsPreset
if (not self.defaultSettingsPreset) and self.gameConfig.SettingsPresetFunc then
self.defaultSettingsPreset = self.gameConfig.SettingsPresetFunc()
if self.defaultSettingsPreset then
self:ApplySettingsConfigPreset(self.defaultSettingsPreset)
end
end
end

function Configuration:GetConfigData()
Expand All @@ -228,6 +353,7 @@ function Configuration:GetConfigData()
lobby_fullscreen = self.lobby_fullscreen,
animate_lobby = self.animate_lobby,
game_settings = self.game_settings,
defaultSettingsPreset = self.defaultSettingsPreset,
notifyForAllChat = self.notifyForAllChat,
planetwarsNotifications = self.planetwarsNotifications,
simplifiedSkirmishSetup = self.simplifiedSkirmishSetup,
Expand Down Expand Up @@ -279,6 +405,13 @@ function Configuration:SetConfigValue(key, value)
if key == "gameConfigName" then
self.gameConfig = VFS.Include(LUA_DIRNAME .. "configs/gameConfig/" .. value .. "/mainConfig.lua")
end
if key == "atiIntelCompat" then
if value then
self:UpdateFixedSettings(self.AtiIntelSettingsOverride)
else
self:UpdateFixedSettings()
end
end
self:_CallListeners("OnConfigurationChange", key, value)
end

Expand Down

0 comments on commit bb4dc56

Please sign in to comment.