Script v1_7_1_0
- AI
- Animals
- Collections
- Contracts
- Debug
- Economy
- Elements
- EnvironmentalScore
- Errors
- Events
- GUI
- AnimalScreen
- AnimationElement
- BitmapElement
- BoxLayoutElement
- BreadcrumbsElement
- ButtonElement
- ButtonOverlay
- ChatWindow
- CheckedOptionElement
- ClearElement
- ColorPickButtonElement
- ConstructionScreen
- ContextActionDisplay
- ControlBarDisplay
- DialogElement
- DynamicFadedBitmapElement
- FillLevelsDisplay
- FlowLayoutElement
- FocusManager
- FrameElement
- FrameReferenceElement
- GameInfoDisplay
- GameInfoDisplayMobile
- GamePausedDisplay
- Gui
- GuiDataSource
- GuiElement
- GuiMixin
- GuiOverlay
- GuiProfile
- GuiSoundPlayer
- GuiTopDownCamera
- GuiTopDownCursor
- GuiUtils
- HUDDisplayElement
- HUDElement
- HUDFrameElement
- HUDPopupMessage
- HUDSliderElement
- HUDTextDisplay
- IndexChangeSubjectMixin
- IndexStateElement
- InfoDisplay
- InfoHUDBox
- InGameIcon
- IngameMap
- IngameMapElement
- InputGlyphElement
- InputGlyphElementUI
- InputHelpDisplay
- KeyValueInfoHUDBox
- ListElement
- ListItemElement
- MapOverlayGenerator
- MixerWagonHUDExtension
- MultiTextOptionElement
- MultiValueTween
- Overlay
- PagingElement
- PictureElement
- PlatformIconElement
- PlayerControlPadDisplay
- PlaySampleMixin
- RenderElement
- RoundStatusBar
- ScreenElement
- ScrollingLayoutElement
- SettingsModel
- SideNotification
- SideNotificationMobile
- SliderElement
- SpeakerDisplay
- SpeedMeterDisplay
- SpeedSliderDisplay
- StatusBar
- SteeringSliderDisplay
- TabbedMenu
- TabbedMenuFrameElement
- TabbedMenuWithDetails
- TableElement
- TableHeaderElement
- TerrainLayerElement
- TextBackdropElement
- TextElement
- TextInputElement
- ThreePartBitmapElement
- TimerElement
- ToggleButtonElement
- TopNotification
- Tween
- TweenSequence
- VariableWorkWidthHUDExten...
- VehicleHUDExtension
- VehicleSchemaDisplay
- VideoElement
- WardrobeScreen
- Handtools
- Hud
- I3d
- Input
- Jobs
- Maps
- Materials
- Misc
- Objects
- Parameters
- Placeables
- Placement
- Player
- Shop
- Sounds
- Specialization
- Specializations
- StateMachine
- Statistics
- Tasks
- Triggers
- Utils
- Vehicles
Engine v1_7_1_0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- general
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- NoteNode
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- VoiceChat
- XML
Foundation Reference
SettingsModel
DescriptionProvides 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
- addConsoleRenderQualitySetting
- addConsoleResolutionSetting
- addFoliageDrawDistanceSetting
- addFoliageShadowSetting
- addLODDistanceSetting
- addManagedSettings
- addMaxTireTracksSetting
- addMSAASetting
- addObjectDrawDistanceSetting
- addSetting
- addShaderQualitySetting
- addShadingRateQualitySetting
- addShadowDistanceQualitySetting
- addShadowMapFilteringSetting
- addShadowMaxLightsSetting
- addShadowQualitySetting
- addSSAOQualitySetting
- addTerrainLODDistanceSetting
- addTerrainQualitySetting
- addTextureFilteringSetting
- addTextureResolutionSetting
- addVolumeMeshTessellationSetting
- applyChanges
- applyCustomSettings
- applyPerformanceClass
- createControlDisplayValues
- getAreaUnitTexts
- getAudioVolumeTexts
- getBrightnessTexts
- getCameraSensitivityTexts
- getCloudQualityTexts
- getConsoleIsRenderQualityDisabled
- getConsoleIsRenderQualityVisible
- getConsoleIsResolutionVisible
- getConsoleRenderQualityTexts
- getConsoleResolutionTexts
- getCurrentDeviceName
- getCurrentDeviceSensitivityValue
- getDeadzoneTexts
- getDeviceAxisDeadzoneValue
- getDeviceAxisSensitivityValue
- getDeviceHasAxisDeadzone
- getDeviceHasAxisSensitivity
- getDirectionChangeModeTexts
- getDistanceUnitTexts
- getDLSSTexts
- getFidelityFxSR20Texts
- getFidelityFxSRTexts
- getFoliageDrawDistanceTexts
- getFoliageShadowTexts
- getForceFeedbackTexts
- getFovYTexts
- getFrameLimitTexts
- getFullscreenModeTexts
- getGearShiftModeTexts
- getHDRPeakBrightnessTexts
- getHeadTrackingSensitivityTexts
- getHeadTrackingSensitivityValue
- getHudSpeedGaugeTexts
- getInputHelpModeTexts
- getIsDeviceMouse
- getIsLanguageDisabled
- getLanguageTexts
- getLightsProfileTexts
- getLODDistanceTexts
- getMaxMirrorsTexts
- getMaxTireTracksTexts
- getMoneyUnitTexts
- getMouseSensitivityValue
- getMPLanguageTexts
- getMSAATexts
- getNumDevices
- getObjectDrawDistanceTexts
- getPerformanceClassTexts
- getPostProcessAATexts
- getPostProcessAAToolTip
- getRadioModeTexts
- getRealBeaconLightBrightnessTexts
- getRecordingVolumeTexts
- getResolutionScale3dTexts
- getResolutionScaleTexts
- getResolutionTexts
- getSensitivityTexts
- getShaderQualityTexts
- getShadingRateQualityTexts
- getShadowDistanceQualityTexts
- getShadowMapFilteringTexts
- getShadowMapLightsTexts
- getShadowQualityTexts
- getSSAOQualityTexts
- getSteeringBackSpeedTexts
- getTemperatureUnitTexts
- getTerraingQualityTexts
- getTerrainLODDistanceTexts
- getTextureFilteringTexts
- getTextureResolutionTexts
- getUiScaleTexts
- getValue
- getVehicleArmSensitivityTexts
- getVoiceInputSensitivityTexts
- getVoiceModeTexts
- getVolumeMeshTessalationTexts
- getXeSSTexts
- hasChanges
- hasDeviceChanges
- initDeviceSettings
- initialize
- needsRestartToApplyChanges
- new
- nextDevice
- refresh
- refreshChangedValue
- reset
- resetDeviceChanges
- saveChanges
- saveDeviceChanges
- setConsolePerformanceSetting
- setConsoleResolution
- setDeviceDeadzoneValue
- setDeviceSensitivityValue
- setHeadTrackingSensitivity
- setMouseSensitivity
- setSettingsFileHandle
- setValue
addCloudQualitySetting
DescriptionDefinitionaddCloudQualitySetting()Code
1836 | function 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) |
1846 | end |
addConsoleRenderQualitySetting
DescriptionDefinitionaddConsoleRenderQualitySetting()Code
1619 | function 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) |
1630 | end |
addConsoleResolutionSetting
DescriptionDefinitionaddConsoleResolutionSetting()Code
1603 | function 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) |
1615 | end |
addFoliageDrawDistanceSetting
DescriptionDefinitionaddFoliageDrawDistanceSetting()Code
1965 | function 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) |
1975 | end |
addFoliageShadowSetting
DescriptionDefinitionaddFoliageShadowSetting()Code
1979 | function 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) |
1989 | end |
addLODDistanceSetting
DescriptionDefinitionaddLODDistanceSetting()Code
1993 | function 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) |
2003 | end |
addManagedSettings
DescriptionAdd managed valid settings which receive their initial value from the loaded game settings or the engine.Definition
addManagedSettings()Code
252 | function 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 |
364 | end |
addMaxTireTracksSetting
DescriptionDefinitionaddMaxTireTracksSetting()Code
2035 | function 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) |
2045 | end |
addMSAASetting
DescriptionDefinitionaddMSAASetting()Code
1684 | function 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) |
1694 | end |
addObjectDrawDistanceSetting
DescriptionDefinitionaddObjectDrawDistanceSetting()Code
1951 | function 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) |
1961 | end |
addSetting
DescriptionAdd 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
string | gameSettingsKey | Key of the setting in GameSettings |
function | readerFunction | Function which reads and processes the setting value identified by the key, signature: function(settingsKey) |
function | writerFunction | Function which processes and writes the setting value identified by the key, signature: function(value, settingsKey) |
boolean | noRestartRequired | true if no restart is required to apply the setting |
375 | function 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]) |
386 | end |
addShaderQualitySetting
DescriptionDefinitionaddShaderQualitySetting()Code
1895 | function 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 |
1905 | end |
addShadingRateQualitySetting
DescriptionDefinitionaddShadingRateQualitySetting()Code
1791 | function 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) |
1801 | end |
addShadowDistanceQualitySetting
DescriptionDefinitionaddShadowDistanceQualitySetting()Code
1805 | function 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) |
1815 | end |
addShadowMapFilteringSetting
DescriptionDefinitionaddShadowMapFilteringSetting()Code
1909 | function 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 |
1919 | end |
addShadowMaxLightsSetting
DescriptionDefinitionaddShadowMaxLightsSetting()Code
1923 | function 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) |
1933 | end |
addShadowQualitySetting
DescriptionDefinitionaddShadowQualitySetting()Code
1880 | function 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) |
1891 | end |
addSSAOQualitySetting
DescriptionDefinitionaddSSAOQualitySetting()Code
1819 | function 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) |
1832 | end |
addTerrainLODDistanceSetting
DescriptionDefinitionaddTerrainLODDistanceSetting()Code
2007 | function 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) |
2017 | end |
addTerrainQualitySetting
DescriptionDefinitionaddTerrainQualitySetting()Code
1937 | function 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 |
1947 | end |
addTextureFilteringSetting
DescriptionDefinitionaddTextureFilteringSetting()Code
1850 | function 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 |
1862 | end |
addTextureResolutionSetting
DescriptionDefinitionaddTextureResolutionSetting()Code
1866 | function 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 |
1876 | end |
addVolumeMeshTessellationSetting
DescriptionDefinitionaddVolumeMeshTessellationSetting()Code
2021 | function 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) |
2031 | end |
applyChanges
DescriptionApply the currently held, transient settings to the game settings.Definition
applyChanges(bool doSave)Arguments
bool | doSave | If true, the changes will also be persisted to storage. |
483 | function 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 |
501 | end |
applyCustomSettings
DescriptionDefinitionapplyCustomSettings()Code
545 | function 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 |
556 | end |
applyPerformanceClass
DescriptionDefinitionapplyPerformanceClass()Code
533 | function 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() |
541 | end |
createControlDisplayValues
DescriptionPopulate value and string lists for control elements display.Definition
createControlDisplayValues()Code
564 | function 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 |
851 | end |
getAreaUnitTexts
DescriptionGet valid area unit texts.Definition
getAreaUnitTexts()Code
1554 | function SettingsModel:getAreaUnitTexts() |
1555 | return self.areaUnitTexts |
1556 | end |
getAudioVolumeTexts
DescriptionGet valid audio volume texts.Definition
getAudioVolumeTexts()Code
1476 | function SettingsModel:getAudioVolumeTexts() |
1477 | return self.volumeTexts |
1478 | end |
getBrightnessTexts
DescriptionGet valid brightness option texts.Definition
getBrightnessTexts()Code
1458 | function SettingsModel:getBrightnessTexts() |
1459 | return self.brightnessTexts |
1460 | end |
getCameraSensitivityTexts
DescriptionGet valid camera sensitivity texts.Definition
getCameraSensitivityTexts()Code
1507 | function SettingsModel:getCameraSensitivityTexts() |
1508 | return self.cameraSensitivityStrings |
1509 | end |
getCloudQualityTexts
DescriptionDefinitiongetCloudQualityTexts()Code
1356 | function SettingsModel:getCloudQualityTexts() |
1357 | return self.cloudQualityTexts |
1358 | end |
getConsoleIsRenderQualityDisabled
DescriptionDefinitiongetConsoleIsRenderQualityDisabled()Code
1168 | function SettingsModel:getConsoleIsRenderQualityDisabled() |
1169 | local displayResolution = self:getValue(SettingsModel.SETTING.CONSOLE_RESOLUTION) |
1170 | return not getNeoMode() or displayResolution ~= 1 |
1171 | end |
getConsoleIsRenderQualityVisible
DescriptionDefinitiongetConsoleIsRenderQualityVisible()Code
1181 | function SettingsModel:getConsoleIsRenderQualityVisible() |
1182 | return getNeoMode() |
1183 | end |
getConsoleIsResolutionVisible
DescriptionDefinitiongetConsoleIsResolutionVisible()Code
1175 | function SettingsModel:getConsoleIsResolutionVisible() |
1176 | return getNeoMode() and get4kAvailable() |
1177 | end |
getConsoleRenderQualityTexts
DescriptionDefinitiongetConsoleRenderQualityTexts()Code
1193 | function SettingsModel:getConsoleRenderQualityTexts() |
1194 | return self.consoleRenderQualityTexts |
1195 | end |
getConsoleResolutionTexts
DescriptionDefinitiongetConsoleResolutionTexts()Code
1187 | function SettingsModel:getConsoleResolutionTexts() |
1188 | return self.consoleResolutionTexts |
1189 | end |
getCurrentDeviceName
DescriptionDefinitiongetCurrentDeviceName()Code
902 | function SettingsModel:getCurrentDeviceName() |
903 | local setting = self.deviceSettings[self.currentDevice] |
904 | if setting ~= nil then |
905 | return setting.device.deviceName |
906 | end |
907 | |
908 | return "" |
909 | end |
getCurrentDeviceSensitivityValue
DescriptionDefinitiongetCurrentDeviceSensitivityValue()Code
1070 | function 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 |
1075 | end |
getDeadzoneTexts
DescriptionDefinitiongetDeadzoneTexts()Code
855 | function SettingsModel:getDeadzoneTexts() |
856 | return self.deadzoneTexts |
857 | end |
getDeviceAxisDeadzoneValue
DescriptionDefinitiongetDeviceAxisDeadzoneValue()Code
1098 | function SettingsModel:getDeviceAxisDeadzoneValue(axisIndex) |
1099 | local settings = self.deviceSettings[self.currentDevice] |
1100 | return settings.deadzones[axisIndex].current |
1101 | end |
getDeviceAxisSensitivityValue
DescriptionDefinitiongetDeviceAxisSensitivityValue()Code
1105 | function SettingsModel:getDeviceAxisSensitivityValue(axisIndex) |
1106 | local settings = self.deviceSettings[self.currentDevice] |
1107 | return settings.sensitivities[axisIndex].current |
1108 | end |
getDeviceHasAxisDeadzone
DescriptionDefinitiongetDeviceHasAxisDeadzone()Code
873 | function SettingsModel:getDeviceHasAxisDeadzone(axisIndex) |
874 | local settings = self.deviceSettings[self.currentDevice] |
875 | return settings ~= nil and settings.deadzones[axisIndex] ~= nil |
876 | end |
getDeviceHasAxisSensitivity
DescriptionDefinitiongetDeviceHasAxisSensitivity()Code
880 | function SettingsModel:getDeviceHasAxisSensitivity(axisIndex) |
881 | local settings = self.deviceSettings[self.currentDevice] |
882 | return settings ~= nil and settings.sensitivities[axisIndex] ~= nil |
883 | end |
getDirectionChangeModeTexts
DescriptionDefinitiongetDirectionChangeModeTexts()Code
1229 | function SettingsModel:getDirectionChangeModeTexts() |
1230 | return self.directionChangeModeTexts |
1231 | end |
getDistanceUnitTexts
DescriptionGet valid distance unit texts.Definition
getDistanceUnitTexts()Code
1542 | function SettingsModel:getDistanceUnitTexts() |
1543 | return self.distanceUnitTexts |
1544 | end |
getDLSSTexts
DescriptionDefinitiongetDLSSTexts()Code
1309 | function SettingsModel:getDLSSTexts() |
1310 | return self.dlssTexts |
1311 | end |
getFidelityFxSR20Texts
DescriptionDefinitiongetFidelityFxSR20Texts()Code
1321 | function SettingsModel:getFidelityFxSR20Texts() |
1322 | return self.fidelityFxSR20Texts |
1323 | end |
getFidelityFxSRTexts
DescriptionDefinitiongetFidelityFxSRTexts()Code
1315 | function SettingsModel:getFidelityFxSRTexts() |
1316 | return self.fidelityFxSRTexts |
1317 | end |
getFoliageDrawDistanceTexts
DescriptionDefinitiongetFoliageDrawDistanceTexts()Code
1416 | function SettingsModel:getFoliageDrawDistanceTexts() |
1417 | return self.perentageTexts |
1418 | end |
getFoliageShadowTexts
DescriptionDefinitiongetFoliageShadowTexts()Code
1422 | function SettingsModel:getFoliageShadowTexts() |
1423 | return self.foliageShadowTexts |
1424 | end |
getForceFeedbackTexts
DescriptionGet valid audio volume texts.Definition
getForceFeedbackTexts()Code
1488 | function SettingsModel:getForceFeedbackTexts() |
1489 | -- Same as volume texts: Off to 100% |
1490 | return self.volumeTexts |
1491 | end |
getFovYTexts
DescriptionGet valid FOV Y option texts.Definition
getFovYTexts()Code
1464 | function SettingsModel:getFovYTexts() |
1465 | return self.fovYTexts |
1466 | end |
getFrameLimitTexts
DescriptionDefinitiongetFrameLimitTexts()Code
1217 | function SettingsModel:getFrameLimitTexts() |
1218 | return self.frameLimitTexts |
1219 | end |
getFullscreenModeTexts
DescriptionDefinitiongetFullscreenModeTexts()Code
1205 | function SettingsModel:getFullscreenModeTexts() |
1206 | return self.fullscreenModeTexts |
1207 | end |
getGearShiftModeTexts
DescriptionDefinitiongetGearShiftModeTexts()Code
1235 | function SettingsModel:getGearShiftModeTexts() |
1236 | return self.gearShiftModeTexts |
1237 | end |
getHDRPeakBrightnessTexts
DescriptionGet valid audio volume texts.Definition
getHDRPeakBrightnessTexts()Code
1285 | function SettingsModel:getHDRPeakBrightnessTexts() |
1286 | return self.hdrPeakBrightnessTexts |
1287 | end |
getHeadTrackingSensitivityTexts
DescriptionDefinitiongetHeadTrackingSensitivityTexts()Code
867 | function SettingsModel:getHeadTrackingSensitivityTexts() |
868 | return self.headTrackingSensitivityTexts |
869 | end |
getHeadTrackingSensitivityValue
DescriptionDefinitiongetHeadTrackingSensitivityValue()Code
1119 | function SettingsModel:getHeadTrackingSensitivityValue(axisIndex) |
1120 | local settings = self.deviceSettings[self.currentDevice] |
1121 | return settings.headTrackingSensitivity.current |
1122 | end |
getHudSpeedGaugeTexts
DescriptionDefinitiongetHudSpeedGaugeTexts()Code
1241 | function SettingsModel:getHudSpeedGaugeTexts() |
1242 | return self.hudSpeedGaugeTexts |
1243 | end |
getInputHelpModeTexts
DescriptionDefinitiongetInputHelpModeTexts()Code
1223 | function SettingsModel:getInputHelpModeTexts() |
1224 | return self.inputHelpModeTexts |
1225 | end |
getIsDeviceMouse
DescriptionDefinitiongetIsDeviceMouse()Code
1126 | function SettingsModel:getIsDeviceMouse() |
1127 | local settings = self.deviceSettings[self.currentDevice] |
1128 | return settings ~= nil and settings.device.category == InputDevice.CATEGORY.KEYBOARD_MOUSE |
1129 | end |
getIsLanguageDisabled
DescriptionDefinitiongetIsLanguageDisabled()Code
1253 | function SettingsModel:getIsLanguageDisabled() |
1254 | return #g_availableLanguagesTable <= 1 or GS_IS_STEAM_VERSION or GS_PLATFORM_GGP |
1255 | end |
getLanguageTexts
DescriptionDefinitiongetLanguageTexts()Code
1247 | function SettingsModel:getLanguageTexts() |
1248 | return g_availableLanguageNamesTable |
1249 | end |
getLightsProfileTexts
DescriptionDefinitiongetLightsProfileTexts()Code
1398 | function SettingsModel:getLightsProfileTexts() |
1399 | return self.fourStateTexts |
1400 | end |
getLODDistanceTexts
DescriptionDefinitiongetLODDistanceTexts()Code
1428 | function SettingsModel:getLODDistanceTexts() |
1429 | return self.perentageTexts |
1430 | end |
getMaxMirrorsTexts
DescriptionDefinitiongetMaxMirrorsTexts()Code
1452 | function SettingsModel:getMaxMirrorsTexts() |
1453 | return self.maxMirrorsTexts |
1454 | end |
getMaxTireTracksTexts
DescriptionDefinitiongetMaxTireTracksTexts()Code
1446 | function SettingsModel:getMaxTireTracksTexts() |
1447 | return self.tireTracksTexts |
1448 | end |
getMoneyUnitTexts
DescriptionGet valid money unit (=currency) texts.Definition
getMoneyUnitTexts()Code
1536 | function SettingsModel:getMoneyUnitTexts() |
1537 | return self.moneyUnitTexts |
1538 | end |
getMouseSensitivityValue
DescriptionDefinitiongetMouseSensitivityValue()Code
1112 | function SettingsModel:getMouseSensitivityValue(axisIndex) |
1113 | local settings = self.deviceSettings[self.currentDevice] |
1114 | return settings.mouseSensitivity.current |
1115 | end |
getMPLanguageTexts
DescriptionDefinitiongetMPLanguageTexts()Code
1211 | function SettingsModel:getMPLanguageTexts() |
1212 | return self.mpLanguageTexts |
1213 | end |
getMSAATexts
DescriptionDefinitiongetMSAATexts()Code
1291 | function SettingsModel:getMSAATexts() |
1292 | return self.msaaTexts |
1293 | end |
getNumDevices
DescriptionDefinitiongetNumDevices()Code
887 | function SettingsModel:getNumDevices() |
888 | return #self.deviceSettings |
889 | end |
getObjectDrawDistanceTexts
DescriptionDefinitiongetObjectDrawDistanceTexts()Code
1410 | function SettingsModel:getObjectDrawDistanceTexts() |
1411 | return self.perentageTexts |
1412 | end |
getPerformanceClassTexts
DescriptionDefinitiongetPerformanceClassTexts()Code
1259 | function 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 |
1281 | end |
getPostProcessAATexts
DescriptionDefinitiongetPostProcessAATexts()Code
1297 | function SettingsModel:getPostProcessAATexts() |
1298 | return self.postProcessAntiAliasingTexts |
1299 | end |
getPostProcessAAToolTip
DescriptionDefinitiongetPostProcessAAToolTip()Code
1303 | function SettingsModel:getPostProcessAAToolTip() |
1304 | return self.postProcessAntiAliasingToolTip |
1305 | end |
getRadioModeTexts
DescriptionGet valid radio mode texts.Definition
getRadioModeTexts()Code
1560 | function SettingsModel:getRadioModeTexts() |
1561 | return self.radioModeTexts |
1562 | end |
getRealBeaconLightBrightnessTexts
DescriptionGet valid real beacon light brightness texts.Definition
getRealBeaconLightBrightnessTexts()Code
1519 | function SettingsModel:getRealBeaconLightBrightnessTexts() |
1520 | return self.realBeaconLightBrightnessStrings |
1521 | end |
getRecordingVolumeTexts
DescriptionGet valid recording volume texts.Definition
getRecordingVolumeTexts()Code
1495 | function SettingsModel:getRecordingVolumeTexts() |
1496 | return self.recordingVolumeTexts |
1497 | end |
getResolutionScale3dTexts
DescriptionDefinitiongetResolutionScale3dTexts()Code
1572 | function SettingsModel:getResolutionScale3dTexts() |
1573 | return self.resolutionScale3dTexts |
1574 | end |
getResolutionScaleTexts
DescriptionDefinitiongetResolutionScaleTexts()Code
1566 | function SettingsModel:getResolutionScaleTexts() |
1567 | return self.resolutionScaleTexts |
1568 | end |
getResolutionTexts
DescriptionDefinitiongetResolutionTexts()Code
1199 | function SettingsModel:getResolutionTexts() |
1200 | return self.resolutionTexts |
1201 | end |
getSensitivityTexts
DescriptionDefinitiongetSensitivityTexts()Code
861 | function SettingsModel:getSensitivityTexts() |
862 | return self.sensitivityTexts |
863 | end |
getShaderQualityTexts
DescriptionDefinitiongetShaderQualityTexts()Code
1368 | function SettingsModel:getShaderQualityTexts() |
1369 | return self.fourStateTexts |
1370 | end |
getShadingRateQualityTexts
DescriptionDefinitiongetShadingRateQualityTexts()Code
1338 | function SettingsModel:getShadingRateQualityTexts() |
1339 | return self.fourStateTexts |
1340 | end |
getShadowDistanceQualityTexts
DescriptionDefinitiongetShadowDistanceQualityTexts()Code
1362 | function SettingsModel:getShadowDistanceQualityTexts() |
1363 | return self.shadowDistanceQualityTexts |
1364 | end |
getShadowMapFilteringTexts
DescriptionDefinitiongetShadowMapFilteringTexts()Code
1386 | function SettingsModel:getShadowMapFilteringTexts() |
1387 | return self.lowHighTexts |
1388 | end |
getShadowMapLightsTexts
DescriptionDefinitiongetShadowMapLightsTexts()Code
1404 | function SettingsModel:getShadowMapLightsTexts() |
1405 | return self.shadowMapMaxLightsTexts |
1406 | end |
getShadowQualityTexts
DescriptionDefinitiongetShadowQualityTexts()Code
1344 | function SettingsModel:getShadowQualityTexts() |
1345 | return self.shadowQualityTexts |
1346 | end |
getSSAOQualityTexts
DescriptionDefinitiongetSSAOQualityTexts()Code
1350 | function SettingsModel:getSSAOQualityTexts() |
1351 | return self.ssaoQualityTexts |
1352 | end |
getSteeringBackSpeedTexts
DescriptionGet valid camera sensitivity texts.Definition
getSteeringBackSpeedTexts()Code
1525 | function SettingsModel:getSteeringBackSpeedTexts() |
1526 | return self.steeringBackSpeedStrings |
1527 | end |
getTemperatureUnitTexts
DescriptionGet valid temperature unit texts.Definition
getTemperatureUnitTexts()Code
1548 | function SettingsModel:getTemperatureUnitTexts() |
1549 | return self.temperatureUnitTexts |
1550 | end |
getTerraingQualityTexts
DescriptionDefinitiongetTerraingQualityTexts()Code
1392 | function SettingsModel:getTerraingQualityTexts() |
1393 | return self.fourStateTexts |
1394 | end |
getTerrainLODDistanceTexts
DescriptionDefinitiongetTerrainLODDistanceTexts()Code
1434 | function SettingsModel:getTerrainLODDistanceTexts() |
1435 | return self.perentageTexts |
1436 | end |
getTextureFilteringTexts
DescriptionDefinitiongetTextureFilteringTexts()Code
1380 | function SettingsModel:getTextureFilteringTexts() |
1381 | return self.textureFilteringTexts |
1382 | end |
getTextureResolutionTexts
DescriptionDefinitiongetTextureResolutionTexts()Code
1374 | function SettingsModel:getTextureResolutionTexts() |
1375 | return self.lowHighTexts |
1376 | end |
getUiScaleTexts
DescriptionGet valid UI scale texts.Definition
getUiScaleTexts()Code
1470 | function SettingsModel:getUiScaleTexts() |
1471 | return self.uiScaleTexts |
1472 | end |
getValue
DescriptionGet a settings value.Definition
getValue(string settingKey)Arguments
string | settingKey | Setting key, use one of the values in SettingsModel.SETTING. |
table | Currently | active (changed) settings value |
400 | function 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 |
409 | end |
getVehicleArmSensitivityTexts
DescriptionGet valid camera sensitivity texts.Definition
getVehicleArmSensitivityTexts()Code
1513 | function SettingsModel:getVehicleArmSensitivityTexts() |
1514 | return self.vehicleArmSensitivityStrings |
1515 | end |
getVoiceInputSensitivityTexts
DescriptionGet valid audio volume texts.Definition
getVoiceInputSensitivityTexts()Code
1482 | function SettingsModel:getVoiceInputSensitivityTexts() |
1483 | return self.voiceInputThresholdTexts |
1484 | end |
getVoiceModeTexts
DescriptionDefinitiongetVoiceModeTexts()Code
1501 | function SettingsModel:getVoiceModeTexts() |
1502 | return self.voiceModeTexts |
1503 | end |
getVolumeMeshTessalationTexts
DescriptionDefinitiongetVolumeMeshTessalationTexts()Code
1440 | function SettingsModel:getVolumeMeshTessalationTexts() |
1441 | return self.perentageTexts |
1442 | end |
getXeSSTexts
DescriptionDefinitiongetXeSSTexts()Code
1327 | function SettingsModel:getXeSSTexts() |
1328 | return self.xeSSTexts |
1329 | end |
hasChanges
DescriptionCheck if any setting has been changed in the model.Definition
hasChanges()Return Values
bool | True | if any setting has been changed, false otherwise |
457 | function 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() |
465 | end |
hasDeviceChanges
DescriptionDefinitionhasDeviceChanges()Code
954 | function 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 |
982 | end |
initDeviceSettings
DescriptionDefinitioninitDeviceSettings()Code
913 | function 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 |
950 | end |
initialize
DescriptionInitialize model. Read current configuration settings and populate valid display and configuration option values.Definition
initialize()Code
245 | function SettingsModel:initialize() |
246 | self:createControlDisplayValues() |
247 | self:addManagedSettings() |
248 | end |
needsRestartToApplyChanges
DescriptionCheck if any setting has been changed in the model.Definition
needsRestartToApplyChanges()Return Values
bool | True | if any setting has been changed, false otherwise |
470 | function 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() |
478 | end |
new
DescriptionCreate a new instance.Definition
new(table gameSettings, int settingsFileHandle, table l10n, table soundMixer)Arguments
table | gameSettings | GameSettings object which holds the currently active and applied game settings |
int | settingsFileHandle | Engine file handle of the player's settings file |
table | l10n | I18N reference for localized display string resolution |
table | soundMixer | SoundMixer reference for direct application of volume settings |
table | SettingsModel | instance |
133 | function 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 |
240 | end |
nextDevice
DescriptionDefinitionnextDevice()Code
893 | function SettingsModel:nextDevice() |
894 | self.currentDevice = self.currentDevice + 1 |
895 | if self.currentDevice > #self.deviceSettings then |
896 | self.currentDevice = 1 |
897 | end |
898 | end |
refresh
DescriptionRefresh 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
421 | function 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 |
427 | end |
refreshChangedValue
DescriptionRefresh 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
433 | function 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 |
438 | end |
reset
DescriptionReset all settings to the initial values since the last applyDefinition
reset()Code
443 | function 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() |
452 | end |
resetDeviceChanges
DescriptionDefinitionresetDeviceChanges()Code
1028 | function 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 |
1041 | end |
saveChanges
DescriptionSave 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
506 | function 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 |
519 | end |
saveDeviceChanges
DescriptionDefinitionsaveDeviceChanges()Code
986 | function 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 |
1024 | end |
setConsolePerformanceSetting
DescriptionDefinitionsetConsolePerformanceSetting()Code
1634 | function 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) |
1639 | end |
setConsoleResolution
DescriptionDefinitionsetConsoleResolution()Code
1156 | function 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) |
1164 | end |
setDeviceDeadzoneValue
DescriptionDefinitionsetDeviceDeadzoneValue()Code
1045 | function SettingsModel:setDeviceDeadzoneValue(axisIndex, value) |
1046 | local settings = self.deviceSettings[self.currentDevice] |
1047 | if settings ~= nil then |
1048 | settings.deadzones[axisIndex].current = value |
1049 | end |
1050 | end |
setDeviceSensitivityValue
DescriptionDefinitionsetDeviceSensitivityValue()Code
1061 | function SettingsModel:setDeviceSensitivityValue(axisIndex, value) |
1062 | local settings = self.deviceSettings[self.currentDevice] |
1063 | if settings ~= nil then |
1064 | settings.sensitivities[axisIndex].current = value |
1065 | end |
1066 | end |
setHeadTrackingSensitivity
DescriptionDefinitionsetHeadTrackingSensitivity()Code
1089 | function SettingsModel:setHeadTrackingSensitivity(value) |
1090 | local settings = self.deviceSettings[self.currentDevice] |
1091 | if settings ~= nil then |
1092 | settings.headTrackingSensitivity.current = value |
1093 | end |
1094 | end |
setMouseSensitivity
DescriptionDefinitionsetMouseSensitivity()Code
1080 | function SettingsModel:setMouseSensitivity(value) |
1081 | local settings = self.deviceSettings[self.currentDevice] |
1082 | if settings ~= nil then |
1083 | settings.mouseSensitivity.current = value |
1084 | end |
1085 | end |
setSettingsFileHandle
DescriptionSet the settings file handle when it changes (e.g. possible in the gamepad sign-in process).Definition
setSettingsFileHandle()Code
413 | function SettingsModel:setSettingsFileHandle(settingsFileHandle) |
414 | self.settingsFileHandle = settingsFileHandle |
415 | end |
setValue
DescriptionSet a settings value.Definition
setValue(string settingKey, table value)Arguments
string | settingKey | Setting key, use one of the values in SettingsModel.SETTING. |
table | value | New setting value |
392 | function SettingsModel:setValue(settingKey, value) |
393 | self.settings[settingKey].changed = value |
394 | end |