LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

SettingsModel

Description
Provides an interface model between game settings and the UI for re-use between several components. The model keeps a common, transient state until saved. When saving, the settings are applied to the global game settings and written to the player's configuration file.
Functions

addCloudQualitySetting

Description
Definition
addCloudQualitySetting()
Code
1836function SettingsModel:addCloudQualitySetting()
1837 local function readValue()
1838 return math.max(getCloudQuality(), 1)
1839 end
1840
1841 local function writeValue(value)
1842 setCloudQuality(value)
1843 end
1844
1845 self:addSetting(SettingsModel.SETTING.CLOUD_QUALITY, readValue, writeValue, true)
1846end

addConsoleRenderQualitySetting

Description
Definition
addConsoleRenderQualitySetting()
Code
1619function SettingsModel:addConsoleRenderQualitySetting()
1620 local function readValue()
1621 local _, renderQuality = SettingsModel.getConsoleResolutionStateFromMode(getDiscretePerformanceSetting())
1622 return renderQuality
1623 end
1624
1625 local function writeValue(value)
1626 self:setConsolePerformanceSetting()
1627 end
1628
1629 self:addSetting(SettingsModel.SETTING.CONSOLE_RENDER_QUALITY, readValue, writeValue)
1630end

addConsoleResolutionSetting

Description
Definition
addConsoleResolutionSetting()
Code
1603function SettingsModel:addConsoleResolutionSetting()
1604 local function readValue()
1605 local displayResolution, _ = SettingsModel.getConsoleResolutionStateFromMode(getDiscretePerformanceSetting())
1606 return displayResolution
1607 end
1608
1609 local function writeValue(value)
1610 self:setConsolePerformanceSetting()
1611 setScreenMode(value - 1)
1612 end
1613
1614 self:addSetting(SettingsModel.SETTING.CONSOLE_RESOLUTION, readValue, writeValue)
1615end

addFoliageDrawDistanceSetting

Description
Definition
addFoliageDrawDistanceSetting()
Code
1965function SettingsModel:addFoliageDrawDistanceSetting()
1966 local function readValue()
1967 return Utils.getValueIndex(getFoliageViewDistanceCoeff(), self.percentValues)
1968 end
1969
1970 local function writeValue(value)
1971 setFoliageViewDistanceCoeff(self.percentValues[value])
1972 end
1973
1974 self:addSetting(SettingsModel.SETTING.FOLIAGE_DRAW_DISTANCE, readValue, writeValue, true)
1975end

addFoliageShadowSetting

Description
Definition
addFoliageShadowSetting()
Code
1979function SettingsModel:addFoliageShadowSetting()
1980 local function readValue()
1981 return getAllowFoliageShadows()
1982 end
1983
1984 local function writeValue(value)
1985 setAllowFoliageShadows(value)
1986 end
1987
1988 self:addSetting(SettingsModel.SETTING.FOLIAGE_SHADOW, readValue, writeValue, false)
1989end

addLODDistanceSetting

Description
Definition
addLODDistanceSetting()
Code
1993function SettingsModel:addLODDistanceSetting()
1994 local function readValue()
1995 return Utils.getValueIndex(getLODDistanceCoeff(), self.percentValues)
1996 end
1997
1998 local function writeValue(value)
1999 setLODDistanceCoeff(self.percentValues[value])
2000 end
2001
2002 self:addSetting(SettingsModel.SETTING.LOD_DISTANCE, readValue, writeValue, true)
2003end

addManagedSettings

Description
Add managed valid settings which receive their initial value from the loaded game settings or the engine.
Definition
addManagedSettings()
Code
252function SettingsModel:addManagedSettings()
253 self:addPerformanceClassSetting()
254 self:addMSAASetting()
255 self:addTextureFilteringSetting()
256 self:addTextureResolutionSetting()
257 self:addShadowQualitySetting()
258 self:addShaderQualitySetting()
259 self:addShadowMapFilteringSetting()
260 self:addShadowMaxLightsSetting()
261 self:addTerrainQualitySetting()
262 self:addObjectDrawDistanceSetting()
263 self:addFoliageDrawDistanceSetting()
264 self:addFoliageShadowSetting()
265 self:addLODDistanceSetting()
266 self:addTerrainLODDistanceSetting()
267 self:addVolumeMeshTessellationSetting()
268 self:addMaxTireTracksSetting()
269 self:addLightsProfileSetting()
270 self:addRealBeaconLightsSetting()
271 self:addMaxMirrorsSetting()
272 self:addPostProcessAntiAliasingSetting()
273 self:addDLSSSetting()
274 self:addFidelityFxSRSetting()
275 self:addFidelityFxSR20Setting()
276 self:addXeSSSetting()
277 self:addSharpnessSetting()
278 self:addShadingRateQualitySetting()
279 self:addShadowDistanceQualitySetting()
280 self:addSSAOQualitySetting()
281 self:addCloudQualitySetting()
282
283 self:addSetting(SettingsModel.SETTING.FULLSCREEN_MODE, getFullscreenMode, setFullscreenMode)
284 self:addLanguageSetting()
285 self:addMPLanguageSetting()
286 self:addInputHelpModeSetting()
287 self:addBrightnessSetting()
288 self:addVSyncSetting()
289 self:addFovYSetting()
290 self:addUIScaleSetting()
291 self:addMasterVolumeSetting()
292 self:addMusicVolumeSetting()
293 self:addEnvironmentVolumeSetting()
294 self:addVehicleVolumeSetting()
295 self:addRadioVolumeSetting()
296 self:addVolumeGUISetting()
297 self:addVoiceVolumeSetting()
298 self:addVoiceInputVolumeSetting()
299 self:addVoiceModeSetting()
300 self:addVoiceInputSensitivitySetting()
301 self:addSteeringBackSpeedSetting()
302 self:addSteeringSensitivitySetting()
303 self:addCameraSensitivitySetting()
304 self:addVehicleArmSensitivitySetting()
305 self:addRealBeaconLightBrightnessSetting()
306 self:addActiveCameraSuspensionSetting()
307 self:addCamerCheckCollisionSetting()
308 self:addDirectionChangeModeSetting()
309 self:addGearShiftModeSetting()
310 self:addHudSpeedGaugeSetting()
311 self:addForceFeedbackSetting()
312
313 if Platform.hasAdjustableFrameLimit then
314 self:addFrameLimitSetting()
315 end
316
317 if Platform.isMobile then
318 self:addGyroscopeSteeringSetting()
319 self:addHintsSetting()
320 self:addCameraTiltingSetting()
321 end
322
323 if Platform.isConsole then
324 self:addConsoleResolutionSetting()
325 self:addConsoleRenderQualitySetting()
326 else
327 self:addSetting(SettingsModel.SETTING.RESOLUTION, getScreenMode, setScreenMode)
328 self:addResolutionScaleSetting()
329 self:addResolutionScale3dSetting()
330 end
331
332 if Platform.isStadia then
333 self:addHDRPeakBrightnessSetting()
334 end
335
336 self:addDirectSetting(SettingsModel.SETTING.USE_COLORBLIND_MODE)
337 self:addDirectSetting(SettingsModel.SETTING.GAMEPAD_ENABLED)
338 self:addDirectSetting(SettingsModel.SETTING.SHOW_FIELD_INFO)
339 self:addDirectSetting(SettingsModel.SETTING.SHOW_HELP_MENU)
340 self:addDirectSetting(SettingsModel.SETTING.RADIO_IS_ACTIVE)
341 self:addDirectSetting(SettingsModel.SETTING.RESET_CAMERA)
342 self:addDirectSetting(SettingsModel.SETTING.RADIO_VEHICLE_ONLY)
343 self:addDirectSetting(SettingsModel.SETTING.IS_TRAIN_TABBABLE)
344 self:addDirectSetting(SettingsModel.SETTING.HEAD_TRACKING_ENABLED)
345 self:addDirectSetting(SettingsModel.SETTING.USE_FAHRENHEIT)
346 self:addDirectSetting(SettingsModel.SETTING.USE_WORLD_CAMERA)
347 self:addDirectSetting(SettingsModel.SETTING.MONEY_UNIT)
348 self:addDirectSetting(SettingsModel.SETTING.USE_ACRE)
349 self:addDirectSetting(SettingsModel.SETTING.EASY_ARM_CONTROL)
350 self:addDirectSetting(SettingsModel.SETTING.INVERT_Y_LOOK)
351 self:addDirectSetting(SettingsModel.SETTING.USE_MILES)
352 self:addDirectSetting(SettingsModel.SETTING.SHOW_TRIGGER_MARKER)
353 self:addDirectSetting(SettingsModel.SETTING.SHOW_MULTIPLAYER_NAMES)
354 self:addDirectSetting(SettingsModel.SETTING.SHOW_HELP_TRIGGER)
355 self:addDirectSetting(SettingsModel.SETTING.SHOW_HELP_ICONS)
356 self:addDirectSetting(SettingsModel.SETTING.CAMERA_BOBBING, true)
357
358 -- -- check for missing settings
359 -- for _, key in pairs(SettingsModel.SETTING) do
360 -- if self.settings[key] == nil then
361 -- log(key)
362 -- end
363 -- end
364end

addMaxTireTracksSetting

Description
Definition
addMaxTireTracksSetting()
Code
2035function SettingsModel:addMaxTireTracksSetting()
2036 local function readValue()
2037 return Utils.getValueIndex(getTyreTracksSegmentsCoeff(), self.tireTracksValues)
2038 end
2039
2040 local function writeValue(value)
2041 setTyreTracksSegementsCoeff(self.tireTracksValues[value])
2042 end
2043
2044 self:addSetting(SettingsModel.SETTING.MAX_TIRE_TRACKS, readValue, writeValue, true)
2045end

addMSAASetting

Description
Definition
addMSAASetting()
Code
1684function SettingsModel:addMSAASetting()
1685 local function readValue()
1686 return SettingsModel.getMSAAIndex(getMSAA())
1687 end
1688
1689 local function writeValue(value)
1690 setMSAA(SettingsModel.getMSAAFromIndex(value))
1691 end
1692
1693 self:addSetting(SettingsModel.SETTING.MSAA, readValue, writeValue)
1694end

addObjectDrawDistanceSetting

Description
Definition
addObjectDrawDistanceSetting()
Code
1951function SettingsModel:addObjectDrawDistanceSetting()
1952 local function readValue()
1953 return Utils.getValueIndex(getViewDistanceCoeff(), self.percentValues)
1954 end
1955
1956 local function writeValue(value)
1957 setViewDistanceCoeff(self.percentValues[value])
1958 end
1959
1960 self:addSetting(SettingsModel.SETTING.OBJECT_DRAW_DISTANCE, readValue, writeValue, true)
1961end

addSetting

Description
Add a setting to the model. Reader and writer functions need to be provided which transform display values (usually indices) to actual setting values and interact with the current game setting or engine states. Writer function can have side-effects, such as directly applying values to the engine state or modifying dependent sub-settings.
Definition
addSetting(string gameSettingsKey, function readerFunction, function writerFunction, boolean noRestartRequired)
Arguments
stringgameSettingsKeyKey of the setting in GameSettings
functionreaderFunctionFunction which reads and processes the setting value identified by the key, signature: function(settingsKey)
functionwriterFunctionFunction which processes and writes the setting value identified by the key, signature: function(value, settingsKey)
booleannoRestartRequiredtrue if no restart is required to apply the setting
Code
375function SettingsModel:addSetting(gameSettingsKey, readerFunction, writerFunction, noRestartRequired)
376 local initialValue = readerFunction(gameSettingsKey)
377
378 -- initial: the value of the settings when the screen was opened
379 -- saved: the value that is currently set to the engine
380 -- changed: the value that is currently set in the gui
381 self.settings[gameSettingsKey] = {key = gameSettingsKey, initial = initialValue, saved = initialValue, changed = initialValue, noRestartRequired = noRestartRequired}
382 self.settingReaders[gameSettingsKey] = readerFunction
383 self.settingWriters[gameSettingsKey] = writerFunction
384
385 table.insert(self.sortedSettings, self.settings[gameSettingsKey])
386end

addShaderQualitySetting

Description
Definition
addShaderQualitySetting()
Code
1895function SettingsModel:addShaderQualitySetting()
1896 local function readValue()
1897 return SettingsModel.getShaderQualityIndex(getShaderQuality())
1898 end
1899
1900 local function writeValue(value)
1901 setShaderQuality(SettingsModel.getShaderQualityByIndex(value))
1902 end
1903
1904 self:addSetting(SettingsModel.SETTING.SHADER_QUALITY, readValue, writeValue, false) -- restart needed to use correct shader cache
1905end

addShadingRateQualitySetting

Description
Definition
addShadingRateQualitySetting()
Code
1791function SettingsModel:addShadingRateQualitySetting()
1792 local function readValue()
1793 return getShadingRateQuality() + 1
1794 end
1795
1796 local function writeValue(value)
1797 setShadingRateQuality(math.max(value - 1, 0))
1798 end
1799
1800 self:addSetting(SettingsModel.SETTING.SHADING_RATE_QUALITY, readValue, writeValue, true)
1801end

addShadowDistanceQualitySetting

Description
Definition
addShadowDistanceQualitySetting()
Code
1805function SettingsModel:addShadowDistanceQualitySetting()
1806 local function readValue()
1807 return getShadowDistanceQuality() + 1
1808 end
1809
1810 local function writeValue(value)
1811 setShadowDistanceQuality(math.max(value - 1, 0))
1812 end
1813
1814 self:addSetting(SettingsModel.SETTING.SHADOW_DISTANCE_QUALITY, readValue, writeValue, true)
1815end

addShadowMapFilteringSetting

Description
Definition
addShadowMapFilteringSetting()
Code
1909function SettingsModel:addShadowMapFilteringSetting()
1910 local function readValue()
1911 return SettingsModel.getShadowMapFilterIndex(getShadowMapFilterSize())
1912 end
1913
1914 local function writeValue(value)
1915 setShadowMapFilterSize(SettingsModel.getShadowMapFilterByIndex(value))
1916 end
1917
1918 self:addSetting(SettingsModel.SETTING.SHADOW_MAP_FILTERING, readValue, writeValue, false) -- restart needed to use correct shader cache
1919end

addShadowMaxLightsSetting

Description
Definition
addShadowMaxLightsSetting()
Code
1923function SettingsModel:addShadowMaxLightsSetting()
1924 local function readValue()
1925 return getMaxNumShadowLights()
1926 end
1927
1928 local function writeValue(value)
1929 setMaxNumShadowLights(value)
1930 end
1931
1932 self:addSetting(SettingsModel.SETTING.MAX_LIGHTS, readValue, writeValue, true)
1933end

addShadowQualitySetting

Description
Definition
addShadowQualitySetting()
Code
1880function SettingsModel:addShadowQualitySetting()
1881 local function readValue()
1882 return SettingsModel.getShadowQualityIndex(getShadowQuality(), getHasShadowFocusBox())
1883 end
1884
1885 local function writeValue(value)
1886 setShadowQuality(SettingsModel.getShadowQualityByIndex(value))
1887 setHasShadowFocusBox(SettingsModel.getHasShadowFocusBoxByIndex(value))
1888 end
1889
1890 self:addSetting(SettingsModel.SETTING.SHADOW_QUALITY, readValue, writeValue, false)
1891end

addSSAOQualitySetting

Description
Definition
addSSAOQualitySetting()
Code
1819function SettingsModel:addSSAOQualitySetting()
1820 local function readValue()
1821 local numSamples = getSSAOQuality()
1822 local index = self.ssaoSamplesToQualityIndex[numSamples] or 1
1823 return index
1824 end
1825
1826 local function writeValue(value)
1827 local numSamples = self.ssaoQualityValues[value]
1828 setSSAOQuality(numSamples)
1829 end
1830
1831 self:addSetting(SettingsModel.SETTING.SSAO_QUALITY, readValue, writeValue, true)
1832end

addTerrainLODDistanceSetting

Description
Definition
addTerrainLODDistanceSetting()
Code
2007function SettingsModel:addTerrainLODDistanceSetting()
2008 local function readValue()
2009 return Utils.getValueIndex(getTerrainLODDistanceCoeff(), self.percentValues)
2010 end
2011
2012 local function writeValue(value)
2013 setTerrainLODDistanceCoeff(self.percentValues[value])
2014 end
2015
2016 self:addSetting(SettingsModel.SETTING.TERRAIN_LOD_DISTANCE, readValue, writeValue, true)
2017end

addTerrainQualitySetting

Description
Definition
addTerrainQualitySetting()
Code
1937function SettingsModel:addTerrainQualitySetting()
1938 local function readValue()
1939 return SettingsModel.getTerrainQualityIndex(getTerrainQuality())
1940 end
1941
1942 local function writeValue(value)
1943 setTerrainQuality(SettingsModel.getTerrainQualityByIndex(value))
1944 end
1945
1946 self:addSetting(SettingsModel.SETTING.TERRAIN_QUALITY, readValue, writeValue, false) -- restart needed to use correct shader cache
1947end

addTextureFilteringSetting

Description
Definition
addTextureFilteringSetting()
Code
1850function SettingsModel:addTextureFilteringSetting()
1851 local function readValue()
1852 return SettingsModel.getTextureFilteringIndex(getFilterTrilinear(), getFilterAnisotropy())
1853 end
1854
1855 local function writeValue(value)
1856 local isTrilinear, anisoValue = SettingsModel.getTextureFilteringByIndex(value)
1857 setFilterTrilinear(isTrilinear)
1858 setFilterAnisotropy(anisoValue)
1859 end
1860
1861 self:addSetting(SettingsModel.SETTING.TEXTURE_FILTERING, readValue, writeValue, false) -- restart so that all texture are created with the right filtering
1862end

addTextureResolutionSetting

Description
Definition
addTextureResolutionSetting()
Code
1866function SettingsModel:addTextureResolutionSetting()
1867 local function readValue()
1868 return SettingsModel.getTextureResolutionIndex(getTextureResolution())
1869 end
1870
1871 local function writeValue(value)
1872 setTextureResolution(SettingsModel.getTextureResolutionByIndex(value))
1873 end
1874
1875 self:addSetting(SettingsModel.SETTING.TEXTURE_RESOLUTION, readValue, writeValue, false) -- restart so that all texture are created with the right resolution
1876end

addVolumeMeshTessellationSetting

Description
Definition
addVolumeMeshTessellationSetting()
Code
2021function SettingsModel:addVolumeMeshTessellationSetting()
2022 local function readValue()
2023 return Utils.getValueIndex(SettingsModel.getVolumeMeshTessellationCoeff(), self.percentValues)
2024 end
2025
2026 local function writeValue(value)
2027 SettingsModel.setVolumeMeshTessellationCoeff(self.percentValues[value])
2028 end
2029
2030 self:addSetting(SettingsModel.SETTING.VOLUME_MESH_TESSELLATION, readValue, writeValue, true)
2031end

applyChanges

Description
Apply the currently held, transient settings to the game settings.
Definition
applyChanges(bool doSave)
Arguments
booldoSaveIf true, the changes will also be persisted to storage.
Code
483function SettingsModel:applyChanges(settingClassesToSave)
484 for _, setting in pairs(self.sortedSettings) do
485 local settingsKey = setting.key
486 local savedValue = self.settings[settingsKey].saved
487 local changedValue = self.settings[settingsKey].changed
488
489 if savedValue ~= changedValue then
490 local writeFunction = self.settingWriters[settingsKey]
491 writeFunction(changedValue, settingsKey) -- write to game settings / engine
492
493 self.settings[settingsKey].saved = changedValue
494 end
495 self.settings[settingsKey].initial = changedValue -- update initial value
496 end
497
498 if settingClassesToSave ~= 0 then
499 self:saveChanges(settingClassesToSave)
500 end
501end

applyCustomSettings

Description
Definition
applyCustomSettings()
Code
545function SettingsModel:applyCustomSettings()
546 for settingsKey in pairs(self.settings) do
547 if settingsKey ~= SettingsModel.SETTING.PERFORMANCE_CLASS then
548 local changedValue = self.settings[settingsKey].changed
549 if changedValue ~= self.settings[settingsKey].saved then
550 local writeFunction = self.settingWriters[settingsKey]
551 writeFunction(changedValue, settingsKey)
552 self.settings[settingsKey].saved = changedValue
553 end
554 end
555 end
556end

applyPerformanceClass

Description
Definition
applyPerformanceClass()
Code
533function SettingsModel:applyPerformanceClass(value)
534 local settingsKey = SettingsModel.SETTING.PERFORMANCE_CLASS
535 local writeFunction = self.settingWriters[settingsKey]
536 writeFunction(value, settingsKey)
537 self.settings[settingsKey].changed = value
538 self.settings[settingsKey].saved = value
539
540 self:refreshChangedValue()
541end

createControlDisplayValues

Description
Populate value and string lists for control elements display.
Definition
createControlDisplayValues()
Code
564function SettingsModel:createControlDisplayValues()
565 self.volumeTexts = {self.l10n:getText("ui_off"), "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%"}
566 self.recordingVolumeTexts = {self.l10n:getText("ui_auto"), "50%", "60%", "70%", "80%", "90%", "100%", "110%", "120%", "130%", "140%", "150%"}
567
568 self.voiceModeTexts = {
569 self.l10n:getText("ui_off"),
570 self.l10n:getText("ui_voiceActivity"),
571 }
572 if Platform.supportsPushToTalk then
573 table.insert(self.voiceModeTexts, self.l10n:getText("ui_pushToTalk"))
574 end
575
576 self.voiceInputThresholdTexts = {self.l10n:getText("ui_auto"), "0%", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%"}
577
578 for i = self.minBrightness, self.maxBrightness + 0.0001, self.brightnessStep do -- add a little to max for floating point precision
579 table.insert(self.brightnessTexts, string.format("%.1f", i))
580 end
581
582 local index = 1
583 for i = self.minFovY, self.maxFovY do
584 self.indexToFovYMapping[index] = i
585 self.fovYToIndexMapping[i] = index
586 table.insert(self.fovYTexts, string.format(self.l10n:getText("setting_fovyDegree"), i))
587
588 index = index + 1
589 end
590
591 for i = 1, 16 do
592 table.insert(self.uiScaleTexts, string.format("%d%%", 50 + (i - 1) * 5))
593 end
594
595 for i = 0.5, 2.1, 0.1 do
596 table.insert(self.resolutionScaleTexts, string.format("%d%%", MathUtil.round(i * 100)))
597 end
598
599 for i = 0.5, 2.1, 0.1 do
600 table.insert(self.resolutionScale3dTexts, string.format("%d%%", MathUtil.round(i * 100)))
601 end
602
603 for i = 0.5, 3, self.cameraSensitivityStep do
604 table.insert(self.cameraSensitivityStrings, string.format("%d%%", i * 100))
605 table.insert(self.cameraSensitivityValues, i)
606 end
607
608 for i = 0.5, 3, self.vehicleArmSensitivityStep do
609 table.insert(self.vehicleArmSensitivityStrings, string.format("%d%%", i * 100))
610 table.insert(self.vehicleArmSensitivityValues, i)
611 end
612
613 for i = 0, 1, self.realBeaconLightBrightnessStep do
614 if i > 0 then
615 table.insert(self.realBeaconLightBrightnessStrings, string.format("%d%%", i * 100 + 0.5))
616 else
617 table.insert(self.realBeaconLightBrightnessStrings, self.l10n:getText("setting_off"))
618 end
619 table.insert(self.realBeaconLightBrightnessValues, i)
620 end
621
622 for i = 0, 10, self.steeringBackSpeedStep do
623 table.insert(self.steeringBackSpeedStrings, string.format("%d%%", i * 10))
624 table.insert(self.steeringBackSpeedValues, i)
625 end
626
627 for i = 0.5, 2.1, self.steeringSensitivityStep do
628 table.insert(self.steeringSensitivityStrings, string.format("%d%%", i * 100 + 0.5))
629 table.insert(self.steeringSensitivityValues, i)
630 end
631
632 self.moneyUnitTexts = {self.l10n:getText("unit_euro"), self.l10n:getText("unit_dollar"), self.l10n:getText("unit_pound")}
633 self.distanceUnitTexts = {self.l10n:getText("unit_km"), self.l10n:getText("unit_miles")}
634 self.temperatureUnitTexts = {self.l10n:getText("unit_celsius"), self.l10n:getText("unit_fahrenheit")}
635 self.areaUnitTexts = {self.l10n:getText("unit_ha"), self.l10n:getText("unit_acre")}
636 self.radioModeTexts = {self.l10n:getText("setting_radioAlways"), self.l10n:getText("setting_radioVehicleOnly")}
637 self.msaaTexts = {self.l10n:getText("ui_off"), "2x", "4x", "8x"}
638 self.shadowQualityTexts = {self.l10n:getText("setting_off"), self.l10n:getText("setting_medium"), self.l10n:getText("setting_high"), self.l10n:getText("setting_veryHigh")}
639 self.shadowDistanceQualityTexts = {self.l10n:getText("setting_low"), self.l10n:getText("setting_medium"), self.l10n:getText("setting_high")}
640 self.fourStateTexts = {self.l10n:getText("setting_low"), self.l10n:getText("setting_medium"), self.l10n:getText("setting_high"), self.l10n:getText("setting_veryHigh")}
641 self.lowHighTexts = {self.l10n:getText("setting_low"), self.l10n:getText("setting_high")}
642 self.textureFilteringTexts = {"Bilinear", "Trilinear", "Aniso 1x", "Aniso 2x", "Aniso 4x", "Aniso 8x", "Aniso 16x"}
643 self.foliageShadowTexts = {self.l10n:getText("ui_off"), self.l10n:getText("ui_on")}
644 self.ssaoQualityTexts = {self.l10n:getText("setting_low"), self.l10n:getText("setting_medium"), self.l10n:getText("setting_high"), self.l10n:getText("setting_veryHigh")}
645 self.cloudQualityTexts = {self.l10n:getText("setting_low"), self.l10n:getText("setting_medium"), self.l10n:getText("setting_high"), self.l10n:getText("setting_veryHigh")}
646
647 self.dlssTexts = { }
648 self.dlssMapping = { }
649 self.dlssMappingReverse = { }
650 for quality = 0, DLSSQuality.NUM - 1 do
651 if quality == DLSSQuality.OFF or getSupportsDLSSQuality(quality) then
652 table.insert(self.dlssTexts, quality == DLSSQuality.OFF and self.l10n:getText("ui_off") or getDLSSQualityName(quality))
653 self.dlssMapping[quality] = #self.dlssTexts
654 self.dlssMappingReverse[#self.dlssTexts] = quality
655 end
656 end
657
658 for i=0, 3 do
659 local samples = getDefaultSSAOQuality(i)
660 table.insert(self.ssaoQualityValues, samples)
661 self.ssaoSamplesToQualityIndex[samples] = #self.ssaoQualityValues
662 end
663
664
665 self.fidelityFxSRTexts = { }
666 self.fidelityFxSRMapping = { }
667 self.fidelityFxSRMappingReverse = { }
668 for quality = 0, FidelityFxSRQuality.NUM - 1 do
669 if quality == FidelityFxSRQuality.OFF or getSupportsFidelityFxSRQuality(quality) then
670 table.insert(self.fidelityFxSRTexts, quality == FidelityFxSRQuality.OFF and self.l10n:getText("ui_off") or getFidelityFxSRQualityName(quality))
671 self.fidelityFxSRMapping[quality] = #self.fidelityFxSRTexts
672 self.fidelityFxSRMappingReverse[#self.fidelityFxSRTexts] = quality
673 end
674 end
675
676 self.fidelityFxSR20Texts = { }
677 self.fidelityFxSR20Mapping = { }
678 self.fidelityFxSR20MappingReverse = { }
679 for quality = 0, FidelityFxSR20Quality.NUM - 1 do
680 if quality == FidelityFxSR20Quality.OFF or getSupportsFidelityFxSR20Quality(quality) then
681 table.insert(self.fidelityFxSR20Texts, quality == FidelityFxSR20Quality.OFF and self.l10n:getText("ui_off") or getFidelityFxSR20QualityName(quality))
682 self.fidelityFxSR20Mapping[quality] = #self.fidelityFxSR20Texts
683 self.fidelityFxSR20MappingReverse[#self.fidelityFxSR20Texts] = quality
684 end
685 end
686
687 self.xeSSTexts = { }
688 self.xeSSMapping = { }
689 self.xeSSMappingReverse = { }
690 for quality = 0, XeSSQuality.NUM - 1 do
691 if quality == XeSSQuality.OFF or getSupportsXeSSQuality(quality) then
692 table.insert(self.xeSSTexts, quality == XeSSQuality.OFF and self.l10n:getText("ui_off") or getXeSSQualityName(quality))
693 self.xeSSMapping[quality] = #self.xeSSTexts
694 self.xeSSMappingReverse[#self.xeSSTexts] = quality
695 end
696 end
697
698 for i = self.minSharpness, self.maxSharpness + 0.0001, self.sharpnessStep do -- add a little to max for floating point precision
699 table.insert(self.sharpnessTexts, string.format("%.1f", i))
700 end
701
702 self.postProcessAntiAliasingTexts = { }
703 self.postProcessAntiAliasingMapping = { }
704 self.postProcessAntiAliasingMappingReverse = { }
705 self.postProcessAntiAliasingToolTip = self.l10n:getText("toolTip_ppaa")
706 for ppaa = 0, PostProcessAntiAliasing.NUM - 1 do
707 if ppaa == PostProcessAntiAliasing.OFF or getSupportsPostProcessAntiAliasing(ppaa) then
708 table.insert(self.postProcessAntiAliasingTexts, ppaa == PostProcessAntiAliasing.OFF and g_i18n:getText("ui_off") or getPostProcessAntiAliasingName(ppaa))
709 self.postProcessAntiAliasingMapping[ppaa] = #self.postProcessAntiAliasingTexts
710 self.postProcessAntiAliasingMappingReverse[#self.postProcessAntiAliasingTexts] = ppaa
711
712 if ppaa == PostProcessAntiAliasing.TAA then
713 self.postProcessAntiAliasingToolTip = self.postProcessAntiAliasingToolTip .. "\n"..self.l10n:getText("toolTip_ppaa_taa")
714 elseif ppaa == PostProcessAntiAliasing.DLAA then
715 self.postProcessAntiAliasingToolTip = self.postProcessAntiAliasingToolTip .. "\n"..self.l10n:getText("toolTip_ppaa_dlaa")
716 end
717 end
718 end
719
720 self.hdrPeakBrightnessValues = {}
721 self.hdrPeakBrightnessTexts = {}
722 self.hdrPeakBrightnessStep = 10
723 for i=0, 50 do
724 local value = (100 + i * self.hdrPeakBrightnessStep)
725 table.insert(self.hdrPeakBrightnessTexts, string.format("%d", value))
726 table.insert(self.hdrPeakBrightnessValues, value)
727 end
728
729 self.shadowMapMaxLightsTexts = {}
730 for i=1,10 do
731 table.insert(self.shadowMapMaxLightsTexts, string.format("%d", i))
732 end
733
734 self.percentValues = {}
735 self.perentageTexts = {}
736 self.percentStep = 0.05
737 for i=0, 30 do
738 table.insert(self.perentageTexts, string.format("%.f%%", (0.5+i*self.percentStep)*100))
739 table.insert(self.percentValues, (0.5+i*self.percentStep))
740 end
741
742 self.tireTracksValues = {}
743 self.tireTracksTexts = {}
744 self.tireTracksStep = 0.5
745 for i=0, 4, self.tireTracksStep do
746 table.insert(self.tireTracksTexts, string.format("%d%%", i*100))
747 table.insert(self.tireTracksValues, i)
748 end
749
750 self.maxMirrorsTexts = {}
751 for i=0,7 do
752 table.insert(self.maxMirrorsTexts, string.format("%d", i))
753 end
754
755 self.resolutionTexts = {}
756 local numR = getNumOfScreenModes()
757 for i = 0, numR - 1 do
758 local x, y = getScreenModeInfo(i)
759 local aspect = x / y
760 local aspectStr
761 if aspect == 1.25 then
762 aspectStr = "(5:4)"
763 elseif aspect > 1.3 and aspect < 1.4 then
764 aspectStr = "(4:3)"
765 elseif aspect > 1.7 and aspect < 1.8 then
766 aspectStr = "(16:9)"
767 elseif aspect > 2.3 and aspect < 2.4 then
768 aspectStr = "(21:9)"
769 else
770 aspectStr = string.format("(%1.0f:10)", aspect * 10)
771 end
772
773 table.insert(self.resolutionTexts, string.format("%dx%d %s", x, y, aspectStr))
774 end
775
776 self.fullscreenModeTexts = {}
777 for i = 0, FullscreenMode.NUM - 1 do
778 if i == FullscreenMode.WINDOWED then
779 table.insert(self.fullscreenModeTexts, self.l10n:getText("ui_windowed"))
780 elseif i == FullscreenMode.WINDOWED_FULLSCREEN then
781 table.insert(self.fullscreenModeTexts, self.l10n:getText("ui_windowed_fullscreen"))
782 else
783 -- FullscreenMode.EXCLUSIVE_FULLSCREEN
784 table.insert(self.fullscreenModeTexts, self.l10n:getText("ui_exclusive_fullscreen"))
785 end
786 end
787
788 self.mpLanguageTexts = {}
789 local numL = getNumOfLanguages()
790 for i=0, numL-1 do
791 table.insert(self.mpLanguageTexts, getLanguageName(i))
792 end
793
794 self.inputHelpModeTexts = {self.l10n:getText("ui_auto"), self.l10n:getText("ui_keyboard"), self.l10n:getText("ui_gamepad")}
795
796 self.frameLimitMapping = {}
797 self.frameLimitMappingReverse = {}
798 self.frameLimitTexts = {}
799 for _, value in ipairs(g_gameSettings.frameLimitValues) do
800 table.insert(self.frameLimitTexts, tostring(value))
801 self.frameLimitMapping[value] = #self.frameLimitTexts
802 self.frameLimitMappingReverse[#self.frameLimitTexts] = value
803 end
804
805 self.directionChangeModeTexts = {
806 [VehicleMotor.DIRECTION_CHANGE_MODE_AUTOMATIC] = self.l10n:getText("ui_directionChangeModeAutomatic"),
807 [VehicleMotor.DIRECTION_CHANGE_MODE_MANUAL] = self.l10n:getText("ui_directionChangeModeManual")
808 }
809
810 self.gearShiftModeTexts = {
811 [VehicleMotor.SHIFT_MODE_AUTOMATIC] = self.l10n:getText("ui_gearShiftModeAutomatic"),
812 [VehicleMotor.SHIFT_MODE_MANUAL] = self.l10n:getText("ui_gearShiftModeManual"),
813 }
814 -- Consoles are gamepad only, and we cannot properly map the clutch there
815 if not Platform.isConsole then
816 self.gearShiftModeTexts[VehicleMotor.SHIFT_MODE_MANUAL_CLUTCH] = self.l10n:getText("ui_gearShiftModeManualClutch")
817 end
818
819 self.hudSpeedGaugeTexts = {
820 [SpeedMeterDisplay.GAUGE_MODE_RPM] = self.l10n:getText("ui_hudSpeedGaugeRPM"),
821 [SpeedMeterDisplay.GAUGE_MODE_SPEED] = self.l10n:getText("ui_hudSpeedGaugeSpeed"),
822 }
823
824 --self.consoleResolutionTexts = { self.l10n:getText("ui_fullhd_desc"), self.l10n:getText("ui_quadhd_desc"), self.l10n:getText("ui_ultrahd_desc") }
825 self.consoleResolutionTexts = { self.l10n:getText("ui_fullhd_desc"), self.l10n:getText("ui_quadhd_desc") }
826 self.consoleRenderQualityTexts = { self.l10n:getText("button_normal"), self.l10n:getText("button_enhanced") }
827
828 self.deadzoneValues = {}
829 self.deadzoneTexts = {}
830 self.deadzoneStep = 0.01
831 for i = 0, 0.3+0.001, self.deadzoneStep do
832 table.insert(self.deadzoneTexts, string.format("%d%%", math.floor(i * 100+0.001)))
833 table.insert(self.deadzoneValues, i)
834 end
835
836 self.sensitivityValues = {}
837 self.sensitivityTexts = {}
838 self.sensitivityStep = 0.25
839 for i = 0.5, 2, self.sensitivityStep do
840 table.insert(self.sensitivityTexts, string.format("%d%%", i * 100))
841 table.insert(self.sensitivityValues, i)
842 end
843
844 self.headTrackingSensitivityValues = {}
845 self.headTrackingSensitivityTexts = {}
846 self.headTrackingSensitivityStep = 0.05
847 for i = 0, 1+0.001, self.headTrackingSensitivityStep do
848 table.insert(self.headTrackingSensitivityTexts, string.format("%d%%", i * 100+0.001))
849 table.insert(self.headTrackingSensitivityValues, i)
850 end
851end

getAreaUnitTexts

Description
Get valid area unit texts.
Definition
getAreaUnitTexts()
Code
1554function SettingsModel:getAreaUnitTexts()
1555 return self.areaUnitTexts
1556end

getAudioVolumeTexts

Description
Get valid audio volume texts.
Definition
getAudioVolumeTexts()
Code
1476function SettingsModel:getAudioVolumeTexts()
1477 return self.volumeTexts
1478end

getBrightnessTexts

Description
Get valid brightness option texts.
Definition
getBrightnessTexts()
Code
1458function SettingsModel:getBrightnessTexts()
1459 return self.brightnessTexts
1460end

getCameraSensitivityTexts

Description
Get valid camera sensitivity texts.
Definition
getCameraSensitivityTexts()
Code
1507function SettingsModel:getCameraSensitivityTexts()
1508 return self.cameraSensitivityStrings
1509end

getCloudQualityTexts

Description
Definition
getCloudQualityTexts()
Code
1356function SettingsModel:getCloudQualityTexts()
1357 return self.cloudQualityTexts
1358end

getConsoleIsRenderQualityDisabled

Description
Definition
getConsoleIsRenderQualityDisabled()
Code
1168function SettingsModel:getConsoleIsRenderQualityDisabled()
1169 local displayResolution = self:getValue(SettingsModel.SETTING.CONSOLE_RESOLUTION)
1170 return not getNeoMode() or displayResolution ~= 1
1171end

getConsoleIsRenderQualityVisible

Description
Definition
getConsoleIsRenderQualityVisible()
Code
1181function SettingsModel:getConsoleIsRenderQualityVisible()
1182 return getNeoMode()
1183end

getConsoleIsResolutionVisible

Description
Definition
getConsoleIsResolutionVisible()
Code
1175function SettingsModel:getConsoleIsResolutionVisible()
1176 return getNeoMode() and get4kAvailable()
1177end

getConsoleRenderQualityTexts

Description
Definition
getConsoleRenderQualityTexts()
Code
1193function SettingsModel:getConsoleRenderQualityTexts()
1194 return self.consoleRenderQualityTexts
1195end

getConsoleResolutionTexts

Description
Definition
getConsoleResolutionTexts()
Code
1187function SettingsModel:getConsoleResolutionTexts()
1188 return self.consoleResolutionTexts
1189end

getCurrentDeviceName

Description
Definition
getCurrentDeviceName()
Code
902function SettingsModel:getCurrentDeviceName()
903 local setting = self.deviceSettings[self.currentDevice]
904 if setting ~= nil then
905 return setting.device.deviceName
906 end
907
908 return ""
909end

getCurrentDeviceSensitivityValue

Description
Definition
getCurrentDeviceSensitivityValue()
Code
1070function SettingsModel:getCurrentDeviceSensitivityValue(axisIndex)
1071 local settings = self.deviceSettings[self.currentDevice]
1072 if settings ~= nil then
1073 return self.sensitivityValues[settings.sensitivities[axisIndex].current]
1074 end
1075end

getDeadzoneTexts

Description
Definition
getDeadzoneTexts()
Code
855function SettingsModel:getDeadzoneTexts()
856 return self.deadzoneTexts
857end

getDeviceAxisDeadzoneValue

Description
Definition
getDeviceAxisDeadzoneValue()
Code
1098function SettingsModel:getDeviceAxisDeadzoneValue(axisIndex)
1099 local settings = self.deviceSettings[self.currentDevice]
1100 return settings.deadzones[axisIndex].current
1101end

getDeviceAxisSensitivityValue

Description
Definition
getDeviceAxisSensitivityValue()
Code
1105function SettingsModel:getDeviceAxisSensitivityValue(axisIndex)
1106 local settings = self.deviceSettings[self.currentDevice]
1107 return settings.sensitivities[axisIndex].current
1108end

getDeviceHasAxisDeadzone

Description
Definition
getDeviceHasAxisDeadzone()
Code
873function SettingsModel:getDeviceHasAxisDeadzone(axisIndex)
874 local settings = self.deviceSettings[self.currentDevice]
875 return settings ~= nil and settings.deadzones[axisIndex] ~= nil
876end

getDeviceHasAxisSensitivity

Description
Definition
getDeviceHasAxisSensitivity()
Code
880function SettingsModel:getDeviceHasAxisSensitivity(axisIndex)
881 local settings = self.deviceSettings[self.currentDevice]
882 return settings ~= nil and settings.sensitivities[axisIndex] ~= nil
883end

getDirectionChangeModeTexts

Description
Definition
getDirectionChangeModeTexts()
Code
1229function SettingsModel:getDirectionChangeModeTexts()
1230 return self.directionChangeModeTexts
1231end

getDistanceUnitTexts

Description
Get valid distance unit texts.
Definition
getDistanceUnitTexts()
Code
1542function SettingsModel:getDistanceUnitTexts()
1543 return self.distanceUnitTexts
1544end

getDLSSTexts

Description
Definition
getDLSSTexts()
Code
1309function SettingsModel:getDLSSTexts()
1310 return self.dlssTexts
1311end

getFidelityFxSR20Texts

Description
Definition
getFidelityFxSR20Texts()
Code
1321function SettingsModel:getFidelityFxSR20Texts()
1322 return self.fidelityFxSR20Texts
1323end

getFidelityFxSRTexts

Description
Definition
getFidelityFxSRTexts()
Code
1315function SettingsModel:getFidelityFxSRTexts()
1316 return self.fidelityFxSRTexts
1317end

getFoliageDrawDistanceTexts

Description
Definition
getFoliageDrawDistanceTexts()
Code
1416function SettingsModel:getFoliageDrawDistanceTexts()
1417 return self.perentageTexts
1418end

getFoliageShadowTexts

Description
Definition
getFoliageShadowTexts()
Code
1422function SettingsModel:getFoliageShadowTexts()
1423 return self.foliageShadowTexts
1424end

getForceFeedbackTexts

Description
Get valid audio volume texts.
Definition
getForceFeedbackTexts()
Code
1488function SettingsModel:getForceFeedbackTexts()
1489 -- Same as volume texts: Off to 100%
1490 return self.volumeTexts
1491end

getFovYTexts

Description
Get valid FOV Y option texts.
Definition
getFovYTexts()
Code
1464function SettingsModel:getFovYTexts()
1465 return self.fovYTexts
1466end

getFrameLimitTexts

Description
Definition
getFrameLimitTexts()
Code
1217function SettingsModel:getFrameLimitTexts()
1218 return self.frameLimitTexts
1219end

getFullscreenModeTexts

Description
Definition
getFullscreenModeTexts()
Code
1205function SettingsModel:getFullscreenModeTexts()
1206 return self.fullscreenModeTexts
1207end

getGearShiftModeTexts

Description
Definition
getGearShiftModeTexts()
Code
1235function SettingsModel:getGearShiftModeTexts()
1236 return self.gearShiftModeTexts
1237end

getHDRPeakBrightnessTexts

Description
Get valid audio volume texts.
Definition
getHDRPeakBrightnessTexts()
Code
1285function SettingsModel:getHDRPeakBrightnessTexts()
1286 return self.hdrPeakBrightnessTexts
1287end

getHeadTrackingSensitivityTexts

Description
Definition
getHeadTrackingSensitivityTexts()
Code
867function SettingsModel:getHeadTrackingSensitivityTexts()
868 return self.headTrackingSensitivityTexts
869end

getHeadTrackingSensitivityValue

Description
Definition
getHeadTrackingSensitivityValue()
Code
1119function SettingsModel:getHeadTrackingSensitivityValue(axisIndex)
1120 local settings = self.deviceSettings[self.currentDevice]
1121 return settings.headTrackingSensitivity.current
1122end

getHudSpeedGaugeTexts

Description
Definition
getHudSpeedGaugeTexts()
Code
1241function SettingsModel:getHudSpeedGaugeTexts()
1242 return self.hudSpeedGaugeTexts
1243end

getInputHelpModeTexts

Description
Definition
getInputHelpModeTexts()
Code
1223function SettingsModel:getInputHelpModeTexts()
1224 return self.inputHelpModeTexts
1225end

getIsDeviceMouse

Description
Definition
getIsDeviceMouse()
Code
1126function SettingsModel:getIsDeviceMouse()
1127 local settings = self.deviceSettings[self.currentDevice]
1128 return settings ~= nil and settings.device.category == InputDevice.CATEGORY.KEYBOARD_MOUSE
1129end

getIsLanguageDisabled

Description
Definition
getIsLanguageDisabled()
Code
1253function SettingsModel:getIsLanguageDisabled()
1254 return #g_availableLanguagesTable <= 1 or GS_IS_STEAM_VERSION or GS_PLATFORM_GGP
1255end

getLanguageTexts

Description
Definition
getLanguageTexts()
Code
1247function SettingsModel:getLanguageTexts()
1248 return g_availableLanguageNamesTable
1249end

getLightsProfileTexts

Description
Definition
getLightsProfileTexts()
Code
1398function SettingsModel:getLightsProfileTexts()
1399 return self.fourStateTexts
1400end

getLODDistanceTexts

Description
Definition
getLODDistanceTexts()
Code
1428function SettingsModel:getLODDistanceTexts()
1429 return self.perentageTexts
1430end

getMaxMirrorsTexts

Description
Definition
getMaxMirrorsTexts()
Code
1452function SettingsModel:getMaxMirrorsTexts()
1453 return self.maxMirrorsTexts
1454end

getMaxTireTracksTexts

Description
Definition
getMaxTireTracksTexts()
Code
1446function SettingsModel:getMaxTireTracksTexts()
1447 return self.tireTracksTexts
1448end

getMoneyUnitTexts

Description
Get valid money unit (=currency) texts.
Definition
getMoneyUnitTexts()
Code
1536function SettingsModel:getMoneyUnitTexts()
1537 return self.moneyUnitTexts
1538end

getMouseSensitivityValue

Description
Definition
getMouseSensitivityValue()
Code
1112function SettingsModel:getMouseSensitivityValue(axisIndex)
1113 local settings = self.deviceSettings[self.currentDevice]
1114 return settings.mouseSensitivity.current
1115end

getMPLanguageTexts

Description
Definition
getMPLanguageTexts()
Code
1211function SettingsModel:getMPLanguageTexts()
1212 return self.mpLanguageTexts
1213end

getMSAATexts

Description
Definition
getMSAATexts()
Code
1291function SettingsModel:getMSAATexts()
1292 return self.msaaTexts
1293end

getNumDevices

Description
Definition
getNumDevices()
Code
887function SettingsModel:getNumDevices()
888 return #self.deviceSettings
889end

getObjectDrawDistanceTexts

Description
Definition
getObjectDrawDistanceTexts()
Code
1410function SettingsModel:getObjectDrawDistanceTexts()
1411 return self.perentageTexts
1412end

getPerformanceClassTexts

Description
Definition
getPerformanceClassTexts()
Code
1259function SettingsModel:getPerformanceClassTexts()
1260 local class, isCustom = getPerformanceClass()
1261
1262 local texts = {}
1263 table.insert(texts, self.l10n:getText("setting_low"))
1264 table.insert(texts, self.l10n:getText("setting_medium"))
1265 table.insert(texts, self.l10n:getText("setting_high"))
1266 table.insert(texts, self.l10n:getText("setting_veryHigh"))
1267
1268 if not GS_IS_MOBILE_VERSION then
1269 local settings = GameSettings.PERFORMANCE_CLASS_PRESETS[Utils.getPerformanceClassId()]
1270 isCustom = isCustom or (settings[SettingsModel.SETTING.LIGHTS_PROFILE] ~= g_gameSettings:getValue(SettingsModel.SETTING.LIGHTS_PROFILE))
1271 isCustom = isCustom or (settings[SettingsModel.SETTING.MAX_MIRRORS] ~= g_gameSettings:getValue(SettingsModel.SETTING.MAX_MIRRORS))
1272 isCustom = isCustom or (settings[SettingsModel.SETTING.REAL_BEACON_LIGHTS] ~= g_gameSettings:getValue(SettingsModel.SETTING.REAL_BEACON_LIGHTS))
1273
1274 if isCustom then
1275 local index = Utils.getPerformanceClassIndex(class)
1276 texts[index] = texts[index] .. " (Custom)"
1277 end
1278 end
1279
1280 return texts, class, isCustom
1281end

getPostProcessAATexts

Description
Definition
getPostProcessAATexts()
Code
1297function SettingsModel:getPostProcessAATexts()
1298 return self.postProcessAntiAliasingTexts
1299end

getPostProcessAAToolTip

Description
Definition
getPostProcessAAToolTip()
Code
1303function SettingsModel:getPostProcessAAToolTip()
1304 return self.postProcessAntiAliasingToolTip
1305end

getRadioModeTexts

Description
Get valid radio mode texts.
Definition
getRadioModeTexts()
Code
1560function SettingsModel:getRadioModeTexts()
1561 return self.radioModeTexts
1562end

getRealBeaconLightBrightnessTexts

Description
Get valid real beacon light brightness texts.
Definition
getRealBeaconLightBrightnessTexts()
Code
1519function SettingsModel:getRealBeaconLightBrightnessTexts()
1520 return self.realBeaconLightBrightnessStrings
1521end

getRecordingVolumeTexts

Description
Get valid recording volume texts.
Definition
getRecordingVolumeTexts()
Code
1495function SettingsModel:getRecordingVolumeTexts()
1496 return self.recordingVolumeTexts
1497end

getResolutionScale3dTexts

Description
Definition
getResolutionScale3dTexts()
Code
1572function SettingsModel:getResolutionScale3dTexts()
1573 return self.resolutionScale3dTexts
1574end

getResolutionScaleTexts

Description
Definition
getResolutionScaleTexts()
Code
1566function SettingsModel:getResolutionScaleTexts()
1567 return self.resolutionScaleTexts
1568end

getResolutionTexts

Description
Definition
getResolutionTexts()
Code
1199function SettingsModel:getResolutionTexts()
1200 return self.resolutionTexts
1201end

getSensitivityTexts

Description
Definition
getSensitivityTexts()
Code
861function SettingsModel:getSensitivityTexts()
862 return self.sensitivityTexts
863end

getShaderQualityTexts

Description
Definition
getShaderQualityTexts()
Code
1368function SettingsModel:getShaderQualityTexts()
1369 return self.fourStateTexts
1370end

getShadingRateQualityTexts

Description
Definition
getShadingRateQualityTexts()
Code
1338function SettingsModel:getShadingRateQualityTexts()
1339 return self.fourStateTexts
1340end

getShadowDistanceQualityTexts

Description
Definition
getShadowDistanceQualityTexts()
Code
1362function SettingsModel:getShadowDistanceQualityTexts()
1363 return self.shadowDistanceQualityTexts
1364end

getShadowMapFilteringTexts

Description
Definition
getShadowMapFilteringTexts()
Code
1386function SettingsModel:getShadowMapFilteringTexts()
1387 return self.lowHighTexts
1388end

getShadowMapLightsTexts

Description
Definition
getShadowMapLightsTexts()
Code
1404function SettingsModel:getShadowMapLightsTexts()
1405 return self.shadowMapMaxLightsTexts
1406end

getShadowQualityTexts

Description
Definition
getShadowQualityTexts()
Code
1344function SettingsModel:getShadowQualityTexts()
1345 return self.shadowQualityTexts
1346end

getSSAOQualityTexts

Description
Definition
getSSAOQualityTexts()
Code
1350function SettingsModel:getSSAOQualityTexts()
1351 return self.ssaoQualityTexts
1352end

getSteeringBackSpeedTexts

Description
Get valid camera sensitivity texts.
Definition
getSteeringBackSpeedTexts()
Code
1525function SettingsModel:getSteeringBackSpeedTexts()
1526 return self.steeringBackSpeedStrings
1527end

getTemperatureUnitTexts

Description
Get valid temperature unit texts.
Definition
getTemperatureUnitTexts()
Code
1548function SettingsModel:getTemperatureUnitTexts()
1549 return self.temperatureUnitTexts
1550end

getTerraingQualityTexts

Description
Definition
getTerraingQualityTexts()
Code
1392function SettingsModel:getTerraingQualityTexts()
1393 return self.fourStateTexts
1394end

getTerrainLODDistanceTexts

Description
Definition
getTerrainLODDistanceTexts()
Code
1434function SettingsModel:getTerrainLODDistanceTexts()
1435 return self.perentageTexts
1436end

getTextureFilteringTexts

Description
Definition
getTextureFilteringTexts()
Code
1380function SettingsModel:getTextureFilteringTexts()
1381 return self.textureFilteringTexts
1382end

getTextureResolutionTexts

Description
Definition
getTextureResolutionTexts()
Code
1374function SettingsModel:getTextureResolutionTexts()
1375 return self.lowHighTexts
1376end

getUiScaleTexts

Description
Get valid UI scale texts.
Definition
getUiScaleTexts()
Code
1470function SettingsModel:getUiScaleTexts()
1471 return self.uiScaleTexts
1472end

getValue

Description
Get a settings value.
Definition
getValue(string settingKey)
Arguments
stringsettingKeySetting key, use one of the values in SettingsModel.SETTING.
Return Values
tableCurrentlyactive (changed) settings value
Code
400function SettingsModel:getValue(settingKey, trueValue)
401 if trueValue then
402 return self.settingReaders[settingKey](settingKey)
403 end
404 if self.settings[settingKey] == nil then -- resolution can be missing on consoles
405 return 0
406 end
407
408 return self.settings[settingKey].changed
409end

getVehicleArmSensitivityTexts

Description
Get valid camera sensitivity texts.
Definition
getVehicleArmSensitivityTexts()
Code
1513function SettingsModel:getVehicleArmSensitivityTexts()
1514 return self.vehicleArmSensitivityStrings
1515end

getVoiceInputSensitivityTexts

Description
Get valid audio volume texts.
Definition
getVoiceInputSensitivityTexts()
Code
1482function SettingsModel:getVoiceInputSensitivityTexts()
1483 return self.voiceInputThresholdTexts
1484end

getVoiceModeTexts

Description
Definition
getVoiceModeTexts()
Code
1501function SettingsModel:getVoiceModeTexts()
1502 return self.voiceModeTexts
1503end

getVolumeMeshTessalationTexts

Description
Definition
getVolumeMeshTessalationTexts()
Code
1440function SettingsModel:getVolumeMeshTessalationTexts()
1441 return self.perentageTexts
1442end

getXeSSTexts

Description
Definition
getXeSSTexts()
Code
1327function SettingsModel:getXeSSTexts()
1328 return self.xeSSTexts
1329end

hasChanges

Description
Check if any setting has been changed in the model.
Definition
hasChanges()
Return Values
boolTrueif any setting has been changed, false otherwise
Code
457function SettingsModel:hasChanges()
458 for _, setting in pairs(self.settings) do
459 if setting.initial ~= setting.changed or setting.initial ~= setting.saved then
460 return true
461 end
462 end
463
464 return self:hasDeviceChanges()
465end

hasDeviceChanges

Description
Definition
hasDeviceChanges()
Code
954function SettingsModel:hasDeviceChanges()
955 for _, settings in ipairs(self.deviceSettings) do
956 for axisIndex, _ in pairs(settings.deadzones) do
957 local deadzone = settings.deadzones[axisIndex]
958 if deadzone.current ~= deadzone.saved then
959 return true
960 end
961
962 local sensitivity = settings.sensitivities[axisIndex]
963 if sensitivity.current ~= sensitivity.saved then
964 return true
965 end
966 end
967
968 if settings.device.category == InputDevice.CATEGORY.KEYBOARD_MOUSE then
969 local mouseSensitivity = settings.mouseSensitivity
970 if mouseSensitivity.current ~= mouseSensitivity.saved then
971 return true
972 end
973 end
974
975 local headTrackingSensitivity = settings.headTrackingSensitivity
976 if headTrackingSensitivity.current ~= headTrackingSensitivity.saved then
977 return true
978 end
979 end
980
981 return false
982end

initDeviceSettings

Description
Definition
initDeviceSettings()
Code
913function SettingsModel:initDeviceSettings()
914 self.deviceSettings = {}
915 self.currentDevice = 0
916
917 for _, device in pairs(g_inputBinding.devicesByInternalId) do
918 local deadzones = {}
919 local sensitivities = {}
920 local mouseSensitivity = {}
921 local headTrackingSensitivity = {}
922 table.insert(self.deviceSettings, {device=device, deadzones=deadzones, sensitivities=sensitivities, mouseSensitivity=mouseSensitivity, headTrackingSensitivity=headTrackingSensitivity})
923
924 for axisIndex = 0, Input.MAX_NUM_AXES - 1 do
925 if getHasGamepadAxis(axisIndex, device.internalId) then
926 local deadzone = device:getDeadzone(axisIndex)
927 local deadzoneValue = Utils.getValueIndex(deadzone, self.deadzoneValues)
928 deadzones[axisIndex] = {current = deadzoneValue, saved = deadzoneValue}
929
930 local sensitivity = device:getSensitivity(axisIndex)
931 local sensitivityValue = Utils.getValueIndex(sensitivity, self.sensitivityValues)
932 sensitivities[axisIndex] = {current = sensitivityValue, saved = sensitivityValue}
933 end
934 end
935
936 if device.category == InputDevice.CATEGORY.KEYBOARD_MOUSE then
937 local scale, _ = g_inputBinding:getMouseMotionScale()
938 local value = Utils.getValueIndex(scale, self.sensitivityValues)
939 mouseSensitivity.current = value
940 mouseSensitivity.saved = value
941 end
942
943
944 local value = Utils.getValueIndex(getCameraTrackingSensitivity(), self.headTrackingSensitivityValues)
945 headTrackingSensitivity.current = value
946 headTrackingSensitivity.saved = value
947
948 self.currentDevice = 1
949 end
950end

initialize

Description
Initialize model. Read current configuration settings and populate valid display and configuration option values.
Definition
initialize()
Code
245function SettingsModel:initialize()
246 self:createControlDisplayValues()
247 self:addManagedSettings()
248end

needsRestartToApplyChanges

Description
Check if any setting has been changed in the model.
Definition
needsRestartToApplyChanges()
Return Values
boolTrueif any setting has been changed, false otherwise
Code
470function SettingsModel:needsRestartToApplyChanges()
471 for _, setting in pairs(self.settings) do
472 if (setting.initial ~= setting.changed or setting.initial ~= setting.saved) and not setting.noRestartRequired then
473 return true
474 end
475 end
476
477 return self:hasDeviceChanges()
478end

new

Description
Create a new instance.
Definition
new(table gameSettings, int settingsFileHandle, table l10n, table soundMixer)
Arguments
tablegameSettingsGameSettings object which holds the currently active and applied game settings
intsettingsFileHandleEngine file handle of the player's settings file
tablel10nI18N reference for localized display string resolution
tablesoundMixerSoundMixer reference for direct application of volume settings
Return Values
tableSettingsModelinstance
Code
133function SettingsModel.new(gameSettings, settingsFileHandle, l10n, soundMixer, isConsoleVersion)
134 local self = setmetatable({}, SettingsModel_mt)
135
136 self.gameSettings = gameSettings
137 self.settingsFileHandle = settingsFileHandle
138 self.l10n = l10n
139 self.soundMixer = soundMixer
140 self.isConsoleVersion = isConsoleVersion
141
142 self.settings = {} -- previous and current settings, {[setting] -> {saved=value, changed=value}}
143 self.sortedSettings = {} -- settings
144 self.settingReaders = {} -- [settingKey] -> function
145 self.settingWriters = {} -- [settingKey] -> function
146
147 self.defaultReaderFunction = self:makeDefaultReaderFunction()
148 self.defaultWriterFunction = self:makeDefaultWriterFunction()
149
150 self.volumeTexts = {}
151 self.voiceInputThresholdTexts = {}
152 self.recordingVolumeTexts = {}
153 self.voiceModeTexts = {}
154 self.brightnessTexts = {}
155 self.fovYTexts = {}
156 self.indexToFovYMapping = {}
157 self.fovYToIndexMapping = {}
158 self.uiScaleValues = {}
159 self.uiScaleTexts = {}
160 self.cameraSensitivityValues = {}
161 self.cameraSensitivityStrings = {}
162 self.cameraSensitivityStep = 0.25
163 self.vehicleArmSensitivityValues = {}
164 self.vehicleArmSensitivityStrings = {}
165 self.vehicleArmSensitivityStep = 0.25
166 self.realBeaconLightBrightnessValues = {}
167 self.realBeaconLightBrightnessStrings = {}
168 self.realBeaconLightBrightnessStep = 0.1
169 self.steeringBackSpeedValues = {}
170 self.steeringBackSpeedStrings = {}
171 self.steeringBackSpeedStep = 1
172 self.steeringSensitivityValues = {}
173 self.steeringSensitivityStrings = {}
174 self.steeringSensitivityStep = 0.1
175 self.moneyUnitTexts = {}
176 self.distanceUnitTexts = {}
177 self.temperatureUnitTexts = {}
178 self.areaUnitTexts = {}
179 self.radioModeTexts = {}
180 self.resolutionScaleTexts = {}
181 self.resolutionScale3dTexts = {}
182 self.dlssTexts = {}
183 self.fidelityFxSRTexts = {}
184 self.fidelityFxSR20Texts = {}
185 self.xeSSTexts = {}
186 self.sharpnessTexts = {}
187 self.postProcessAntiAliasingTexts = {}
188
189 self.msaaTexts = {}
190 self.shadowQualityTexts = {}
191 self.shadowDistanceQualityTexts = {}
192 self.fourStateTexts = {}
193 self.lowHighTexts = {}
194 self.textureFilteringTexts = {}
195 self.shadowMapMaxLightsTexts = {}
196 self.hdrPeakBrightnessValues = {}
197 self.hdrPeakBrightnessTexts = {}
198 self.hdrPeakBrightnessStep = 0.05
199 self.percentValues = {}
200 self.perentageTexts = {}
201 self.percentStep = 0.05
202 self.tireTracksValues = {}
203 self.tireTracksTexts = {}
204 self.tireTracksStep = 0.5
205 self.maxMirrorsTexts = {}
206 self.foliageShadowTexts = {}
207 self.ssaoQualityTexts = {}
208 self.ssaoQualityValues = {}
209 self.ssaoSamplesToQualityIndex = {}
210 self.cloudQualityTexts = {}
211
212 self.resolutionTexts = {}
213 self.fullscreenModeTexts = {}
214 self.mpLanguageTexts = {}
215 self.inputHelpModeTexts = {}
216 self.directionChangeModeTexts = {}
217 self.gearShiftModeTexts = {}
218 self.hudSpeedGaugeTexts = {}
219 self.frameLimitTexts = {}
220
221 self.intialValues = {}
222
223 self.deviceSettings = {}
224 self.currentDevice = {}
225
226 self.minBrightness = 0.5
227 self.maxBrightness = 2.0
228 self.brightnessStep = 0.1
229
230 self.minSharpness = 0.0
231 self.maxSharpness = 2.0
232 self.sharpnessStep = 0.1
233
234 self.minFovY = Platform.minFovY
235 self.maxFovY = Platform.maxFovY
236
237 self:initialize()
238
239 return self
240end

nextDevice

Description
Definition
nextDevice()
Code
893function SettingsModel:nextDevice()
894 self.currentDevice = self.currentDevice + 1
895 if self.currentDevice > #self.deviceSettings then
896 self.currentDevice = 1
897 end
898end

refresh

Description
Refresh settings values from their reader functions. Use this when other components might have changed the settings state and the model needs to reflect those changes now.
Definition
refresh()
Code
421function SettingsModel:refresh()
422 for settingsKey, setting in pairs(self.settings) do
423 setting.initial = self.settingReaders[settingsKey](settingsKey)
424 setting.changed = setting.initial
425 setting.saved = setting.initial
426 end
427end

refreshChangedValue

Description
Refresh currently changed settings values from their reader functions. Calling reset will still reset to the old known values. Use this when other components might have changed the settings state and the model needs to reflect those changes now.
Definition
refreshChangedValue()
Code
433function SettingsModel:refreshChangedValue()
434 for settingsKey, setting in pairs(self.settings) do
435 setting.changed = self.settingReaders[settingsKey](settingsKey)
436 setting.saved = setting.changed
437 end
438end

reset

Description
Reset all settings to the initial values since the last apply
Definition
reset()
Code
443function SettingsModel:reset()
444 for _, setting in pairs(self.sortedSettings) do
445 setting.changed = setting.initial
446 setting.saved = setting.initial
447 local writeFunction = self.settingWriters[setting.key]
448 writeFunction(setting.changed, setting.key)
449 end
450
451 self:resetDeviceChanges()
452end

resetDeviceChanges

Description
Definition
resetDeviceChanges()
Code
1028function SettingsModel:resetDeviceChanges()
1029 for _, settings in ipairs(self.deviceSettings) do
1030 for axisIndex, _ in pairs(settings.deadzones) do
1031 local deadzone = settings.deadzones[axisIndex]
1032 deadzone.current = deadzone.saved
1033
1034 local sensitivity = settings.sensitivities[axisIndex]
1035 sensitivity.current = deadzone.saved
1036 end
1037
1038 settings.mouseSensitivity.current = settings.mouseSensitivity.saved
1039 settings.headTrackingSensitivity.current = settings.headTrackingSensitivity.saved
1040 end
1041end

saveChanges

Description
Save the game settings which may have been modified by this model. This will not apply transient changes but only persist the currently applied game settings.
Definition
saveChanges()
Code
506function SettingsModel:saveChanges(settingClassesToSave)
507 if bitAND(settingClassesToSave, SettingsModel.SETTING_CLASS.SAVE_GAMEPLAY_SETTINGS) ~= 0 then
508 self.gameSettings:saveToXMLFile(self.settingsFileHandle)
509 end
510
511 self:saveDeviceChanges()
512
513 if bitAND(settingClassesToSave, SettingsModel.SETTING_CLASS.SAVE_ENGINE_QUALITY_SETTINGS) ~= 0 then
514 saveHardwareScalability()
515 if self.isConsoleVersion or GS_PLATFORM_GGP or GS_IS_MOBILE_VERSION then
516 executeSettingsChange()
517 end
518 end
519end

saveDeviceChanges

Description
Definition
saveDeviceChanges()
Code
986function SettingsModel:saveDeviceChanges()
987 local changedSettings = false
988 for _, settings in ipairs(self.deviceSettings) do
989 local device = settings.device
990 for axisIndex, _ in pairs(settings.deadzones) do
991 local deadzones = settings.deadzones[axisIndex]
992 local deadzone = self.deadzoneValues[deadzones.current]
993 deadzones.saved = deadzones.current
994 device:setDeadzone(axisIndex, deadzone)
995
996 local sensitivities = settings.sensitivities[axisIndex]
997 local sensitivity = self.sensitivityValues[sensitivities.current]
998 sensitivities.saved = sensitivities.current
999
1000 device:setSensitivity(axisIndex, sensitivity)
1001 changedSettings = true
1002 end
1003 if settings.device.category == InputDevice.CATEGORY.KEYBOARD_MOUSE then
1004 local mouseSensitivity = settings.mouseSensitivity
1005 if mouseSensitivity.current ~= mouseSensitivity.saved then
1006 g_inputBinding:setMouseMotionScale(self.sensitivityValues[mouseSensitivity.current])
1007 mouseSensitivity.saved = mouseSensitivity.current
1008 changedSettings = true
1009 end
1010
1011 local headTrackingSensitivity = settings.headTrackingSensitivity
1012 if headTrackingSensitivity.current ~= headTrackingSensitivity.saved then
1013 setCameraTrackingSensitivity(self.headTrackingSensitivityValues[headTrackingSensitivity.current])
1014 headTrackingSensitivity.saved = headTrackingSensitivity.current
1015 changedSettings = true
1016 end
1017 end
1018 end
1019
1020 if changedSettings then
1021 g_inputBinding:applyGamepadDeadzones()
1022 g_inputBinding:saveToXMLFile()
1023 end
1024end

setConsolePerformanceSetting

Description
Definition
setConsolePerformanceSetting()
Code
1634function SettingsModel:setConsolePerformanceSetting()
1635 local renderQuality = self:getValue(SettingsModel.SETTING.CONSOLE_RENDER_QUALITY)
1636 local resolution = self:getValue(SettingsModel.SETTING.CONSOLE_RESOLUTION)
1637 local discreteSetting = SettingsModel.getModeFromResolutionState(resolution, renderQuality)
1638 setDiscretePerformanceSetting(discreteSetting)
1639end

setConsoleResolution

Description
Definition
setConsoleResolution()
Code
1156function SettingsModel:setConsoleResolution(value)
1157 local displayResolution = self:getValue(SettingsModel.SETTING.CONSOLE_RESOLUTION)
1158 if not getNeoMode() or displayResolution then
1159 self:setValue(SettingsModel.SETTING.CONSOLE_RENDER_QUALITY, 1)
1160 else
1161 self:setValue(SettingsModel.SETTING.CONSOLE_RENDER_QUALITY, self.settings[SettingsModel.SETTING.CONSOLE_RENDER_QUALITY].saved)
1162 end
1163 self:setValue(SettingsModel.SETTING.CONSOLE_RESOLUTION, value)
1164end

setDeviceDeadzoneValue

Description
Definition
setDeviceDeadzoneValue()
Code
1045function SettingsModel:setDeviceDeadzoneValue(axisIndex, value)
1046 local settings = self.deviceSettings[self.currentDevice]
1047 if settings ~= nil then
1048 settings.deadzones[axisIndex].current = value
1049 end
1050end

setDeviceSensitivityValue

Description
Definition
setDeviceSensitivityValue()
Code
1061function SettingsModel:setDeviceSensitivityValue(axisIndex, value)
1062 local settings = self.deviceSettings[self.currentDevice]
1063 if settings ~= nil then
1064 settings.sensitivities[axisIndex].current = value
1065 end
1066end

setHeadTrackingSensitivity

Description
Definition
setHeadTrackingSensitivity()
Code
1089function SettingsModel:setHeadTrackingSensitivity(value)
1090 local settings = self.deviceSettings[self.currentDevice]
1091 if settings ~= nil then
1092 settings.headTrackingSensitivity.current = value
1093 end
1094end

setMouseSensitivity

Description
Definition
setMouseSensitivity()
Code
1080function SettingsModel:setMouseSensitivity(value)
1081 local settings = self.deviceSettings[self.currentDevice]
1082 if settings ~= nil then
1083 settings.mouseSensitivity.current = value
1084 end
1085end

setSettingsFileHandle

Description
Set the settings file handle when it changes (e.g. possible in the gamepad sign-in process).
Definition
setSettingsFileHandle()
Code
413function SettingsModel:setSettingsFileHandle(settingsFileHandle)
414 self.settingsFileHandle = settingsFileHandle
415end

setValue

Description
Set a settings value.
Definition
setValue(string settingKey, table value)
Arguments
stringsettingKeySetting key, use one of the values in SettingsModel.SETTING.
tablevalueNew setting value
Code
392function SettingsModel:setValue(settingKey, value)
393 self.settings[settingKey].changed = value
394end