diff --git a/binaries/data/mods/public/gui/options/options.js b/binaries/data/mods/public/gui/options/options.js index 3b94b85a26..84a1a6cbc1 100644 --- a/binaries/data/mods/public/gui/options/options.js +++ b/binaries/data/mods/public/gui/options/options.js @@ -80,8 +80,6 @@ function setupControl(option, i, category) text.size = size; control = Engine.GetGUIObjectByName(category + "Tickbox[" + i + "]"); let checked; - let keyRenderer; - for (let param in option.parameters) { switch (param) @@ -89,36 +87,24 @@ function setupControl(option, i, category) case "config": checked = Engine.ConfigDB_GetValue("user", key) == "true"; break; - case "renderer": - keyRenderer = option.parameters.renderer; - if (!Engine["Renderer_Get" + keyRenderer + "Enabled"]) - { - warn("Invalid renderer key " + keyRenderer); - keyRenderer = undefined; - break; - } - if (Engine["Renderer_Get" + keyRenderer + "Enabled"]() != checked) - { - warn("Incompatible renderer option value for " + keyRenderer); - Engine["Renderer_Set" + keyRenderer + "Enabled"](checked); - } + case "function": break; default: warn("Unknown option source type '" + param + "'"); } } - onUpdate = function(key, keyRenderer) + onUpdate = function(key) { return function() { - if (keyRenderer) - Engine["Renderer_Set" + keyRenderer + "Enabled"](this.checked); + if (option.parameters.function) + Engine[option.parameters.function](this.checked); Engine.ConfigDB_CreateValue("user", key, String(this.checked)); Engine.ConfigDB_SetChanges("user", true); updateOptionPanel(); }; - }(key, keyRenderer); + }(key); // Load final data to the control element. control.checked = checked; @@ -353,27 +339,15 @@ function revertChanges() for (let item in g_Controls) { let control = g_Controls[item]; - // needs to update renderer values (which are all of boolean type) - if (control.parameters.renderer) - { - if (control.type != "boolean") - { - warn("Invalid type option " + control.type + " defined in renderer for " + item + ": will not be reverted"); - continue; - } - let checked = Engine.ConfigDB_GetValue("user", item) == "true"; - Engine["Renderer_Set" + control.parameters.renderer + "Enabled"](checked); - } - // and the possible function calls (which are of number or string types) if (control.parameters.function) { - if (control.type != "string" && control.type != "number" && control.type != "slider" && control.type != "dropdown") - { - warn("Invalid type option " + control.type + " defined with function for " + item + ": will not be reverted"); - continue; - } - let caption = Engine.ConfigDB_GetValue("user", item); - Engine[control.parameters.function](+caption); + let value = Engine.ConfigDB_GetValue("user", item); + Engine[control.parameters.function]( + (control.type == "string" || control.type == "dropdown") ? + value : + control.type == "boolean" ? + value == "true" : + +value); } } Engine.ConfigDB_SetChanges("user", false); diff --git a/binaries/data/mods/public/gui/options/options.json b/binaries/data/mods/public/gui/options/options.json index 43b8d977f0..2052a0f356 100644 --- a/binaries/data/mods/public/gui/options/options.json +++ b/binaries/data/mods/public/gui/options/options.json @@ -142,13 +142,13 @@ "type": "boolean", "label": "Prefer GLSL", "tooltip": "Use OpenGL 2.0 shaders (recommended)", - "parameters": { "config": "preferglsl", "renderer": "PreferGLSL" } + "parameters": { "config": "preferglsl", "function": "Renderer_SetPreferGLSLEnabled" } }, { "type": "boolean", "label": "Post Processing", "tooltip": "Use screen-space postprocessing filters (HDR, Bloom, DOF, etc)", - "parameters": { "config": "postproc", "renderer": "Postproc" } + "parameters": { "config": "postproc", "function": "Renderer_SetPostprocEnabled" } }, { "type": "slider", @@ -160,7 +160,7 @@ "type": "boolean", "label": "Shadows", "tooltip": "Enable shadows", - "parameters": { "config": "shadows", "renderer": "Shadows" }, + "parameters": { "config": "shadows", "function": "Renderer_SetShadowsEnabled" }, "dependencies": [ "shadowquality", "shadowpcf" ] }, { @@ -183,68 +183,68 @@ "type": "boolean", "label": "Shadow Filtering", "tooltip": "Smooth shadows", - "parameters": { "config": "shadowpcf", "renderer": "ShadowPCF" } + "parameters": { "config": "shadowpcf", "function": "Renderer_SetShadowPCFEnabled" } }, { "type": "boolean", "label": "Unit Silhouettes", "tooltip": "Show outlines of units behind buildings", - "parameters": { "config": "silhouettes", "renderer": "Silhouettes" } + "parameters": { "config": "silhouettes", "function": "Renderer_SetSilhouettesEnabled" } }, { "type": "boolean", "label": "Particles", "tooltip": "Enable particles", - "parameters": { "config": "particles", "renderer": "Particles" } + "parameters": { "config": "particles", "function": "Renderer_SetParticlesEnabled" } }, { "type": "boolean", "label": "Water Effects", "tooltip": "When OFF, use the lowest settings possible to render water. This makes other settings irrelevant.", - "parameters": { "config": "watereffects", "renderer": "WaterEffects" }, + "parameters": { "config": "watereffects", "function": "Renderer_SetWaterEffectsEnabled" }, "dependencies": [ "waterfancyeffects", "waterrealdepth", "waterreflection", "waterrefraction", "watershadows" ] }, { "type": "boolean", "label": "HQ Water Effects", "tooltip": "Use higher-quality effects for water, rendering coastal waves, shore foam, and ships trails.", - "parameters": { "config": "waterfancyeffects", "renderer": "WaterFancyEffects" } + "parameters": { "config": "waterfancyeffects", "function": "Renderer_SetWaterFancyEffectsEnabled" } }, { "type": "boolean", "label": "Real Water Depth", "tooltip": "Use actual water depth in rendering calculations", - "parameters": { "config": "waterrealdepth", "renderer": "WaterRealDepth" } + "parameters": { "config": "waterrealdepth", "function": "Renderer_SetWaterRealDepthEnabled" } }, { "type": "boolean", "label": "Water Reflections", "tooltip": "Allow water to reflect a mirror image", - "parameters": { "config": "waterreflection", "renderer": "WaterReflection" } + "parameters": { "config": "waterreflection", "function": "Renderer_SetWaterReflectionEnabled" } }, { "type": "boolean", "label": "Water Refraction", "tooltip": "Use a real water refraction map and not transparency", - "parameters": { "config": "waterrefraction", "renderer": "WaterRefraction" } + "parameters": { "config": "waterrefraction", "function": "Renderer_SetWaterRefractionEnabled" } }, { "type": "boolean", "label": "Shadows on Water", "tooltip": "Cast shadows on water", - "parameters": { "config": "watershadows", "renderer": "WaterShadows" } + "parameters": { "config": "watershadows", "function": "Renderer_SetWaterShadowsEnabled" } }, { "type": "boolean", "label": "Smooth LOS", "tooltip": "Lift darkness and fog-of-war smoothly", - "parameters": { "config": "smoothlos", "renderer": "SmoothLOS" } + "parameters": { "config": "smoothlos", "function": "Renderer_SetSmoothLOSEnabled" } }, { "type": "boolean", "label": "Show Sky", "tooltip": "Render Sky", - "parameters": { "config": "showsky", "renderer": "ShowSky" } + "parameters": { "config": "showsky", "function": "Renderer_SetShowSkyEnabled" } }, { "type": "boolean",