LUADOC - Farming Simulator 19

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

addConsoleRenderQualitySetting

Description
Definition
addConsoleRenderQualitySetting()
Code
1150function SettingsModel:addConsoleRenderQualitySetting()
1151 local function readValue()
1152 local _, renderQuality = SettingsModel.getConsoleResolutionStateFromMode(getDiscretePerformanceSetting())
1153 return renderQuality
1154 end
1155
1156 local function writeValue(value)
1157 self:setConsolePerformanceSetting()
1158 end
1159
1160 self:addSetting(SettingsModel.SETTING.CONSOLE_RENDER_QUALITY, readValue, writeValue)
1161end

addConsoleResolutionSetting

Description
Definition
addConsoleResolutionSetting()
Code
1134function SettingsModel:addConsoleResolutionSetting()
1135 local function readValue()
1136 local displayResolution, _ = SettingsModel.getConsoleResolutionStateFromMode(getDiscretePerformanceSetting())
1137 return displayResolution
1138 end
1139
1140 local function writeValue(value)
1141 self:setConsolePerformanceSetting()
1142 setScreenMode(value - 1)
1143 end
1144
1145 self:addSetting(SettingsModel.SETTING.CONSOLE_RESOLUTION, readValue, writeValue)
1146end

addFoliageDrawDistanceSetting

Description
Definition
addFoliageDrawDistanceSetting()
Code
1337function SettingsModel:addFoliageDrawDistanceSetting()
1338 local function readValue()
1339 return Utils.getValueIndex(getFoliageViewDistanceCoeff(), self.percentValues)
1340 end
1341
1342 local function writeValue(value)
1343 setFoliageViewDistanceCoeff(self.percentValues[value]);
1344 end
1345
1346 self:addSetting(SettingsModel.SETTING.FOLIAGE_DRAW_DISTANCE, readValue, writeValue)
1347end

addLODDistanceSetting

Description
Definition
addLODDistanceSetting()
Code
1351function SettingsModel:addLODDistanceSetting()
1352 local function readValue()
1353 return Utils.getValueIndex(getLODDistanceCoeff(), self.percentValues)
1354 end
1355
1356 local function writeValue(value)
1357 setLODDistanceCoeff(self.percentValues[value]);
1358 end
1359
1360 self:addSetting(SettingsModel.SETTING.LOD_DISTANCE, readValue, writeValue)
1361end

addManagedSettings

Description
Add managed valid settings which receive their initial value from the loaded game settings or the engine.
Definition
addManagedSettings()
Code
193function SettingsModel:addManagedSettings()
194 self:addPerformanceClassSetting()
195 self:addMSAASetting()
196 self:addTextureFilteringSetting()
197 self:addTextureResolutionSetting()
198 self:addShadowQualitySetting()
199 self:addShaderQualitySetting()
200 self:addShadowMapFilteringSetting()
201 self:addShadowMaxLightsSetting()
202 self:addTerrainQualitySetting()
203 self:addObjectDrawDistanceSetting()
204 self:addFoliageDrawDistanceSetting()
205 self:addLODDistanceSetting()
206 self:addTerrainLODDistanceSetting()
207 self:addVolumeMeshTessellationSetting()
208 self:addMaxTireTracksSetting()
209 self:addLightsProfileSetting()
210 self:addRealBeaconLightsSetting()
211 self:addMaxMirrorsSetting()
212
213 self:addWindowModeSetting()
214 self:addLanguageSetting()
215 self:addMPLanguageSetting()
216 self:addInputHelpModeSetting()
217 self:addBrightnessSetting()
218 self:addVSyncSetting()
219 self:addFovYSetting()
220 self:addUIScaleSetting()
221 self:addMasterVolumeSetting()
222 self:addMusicVolumeSetting()
223 self:addEnvironmentVolumeSetting()
224 self:addVehicleVolumeSetting()
225 self:addRadioVolumeSetting()
226 self:addVolumeGUISetting()
227 self:addSteeringBackSpeedSetting()
228 self:addSteeringSensitivitySetting()
229 self:addCameraSensitivitySetting()
230 self:addVehicleArmSensitivitySetting()
231
232 if GS_IS_CONSOLE_VERSION then
233 self:addConsoleResolutionSetting()
234 self:addConsoleRenderQualitySetting()
235 else
236 self:addSetting(SettingsModel.SETTING.RESOLUTION, getScreenMode, setScreenMode)
237 self:addResolutionScaleSetting()
238 end
239
240 if GS_PLATFORM_TYPE == GS_PLATFORM_TYPE_GGP then
241 self:addHDRPeakBrightnessSetting()
242 end
243
244 self:addDirectSetting(SettingsModel.SETTING.USE_COLORBLIND_MODE)
245 self:addDirectSetting(SettingsModel.SETTING.GAMEPAD_ENABLED)
246 self:addDirectSetting(SettingsModel.SETTING.SHOW_FIELD_INFO)
247 self:addDirectSetting(SettingsModel.SETTING.SHOW_HELP_MENU)
248 self:addDirectSetting(SettingsModel.SETTING.RADIO_IS_ACTIVE)
249 self:addDirectSetting(SettingsModel.SETTING.RESET_CAMERA)
250 self:addDirectSetting(SettingsModel.SETTING.RADIO_VEHICLE_ONLY)
251 self:addDirectSetting(SettingsModel.SETTING.IS_TRAIN_TABBABLE)
252 self:addDirectSetting(SettingsModel.SETTING.HEAD_TRACKING_ENABLED)
253 self:addDirectSetting(SettingsModel.SETTING.USE_FAHRENHEIT)
254 self:addDirectSetting(SettingsModel.SETTING.USE_WORLD_CAMERA)
255 self:addDirectSetting(SettingsModel.SETTING.MONEY_UNIT)
256 self:addDirectSetting(SettingsModel.SETTING.USE_ACRE)
257 self:addDirectSetting(SettingsModel.SETTING.EASY_ARM_CONTROL)
258 self:addDirectSetting(SettingsModel.SETTING.INVERT_Y_LOOK)
259 self:addDirectSetting(SettingsModel.SETTING.USE_MILES)
260 self:addDirectSetting(SettingsModel.SETTING.SHOW_TRIGGER_MARKER)
261 self:addDirectSetting(SettingsModel.SETTING.SHOW_HELP_ICONS)
262
263 -- -- check for missing settings
264 -- for _, key in pairs(SettingsModel.SETTING) do
265 -- if self.settings[key] == nil then
266 -- log(key)
267 -- end
268 -- end
269end

addMaxTireTracksSetting

Description
Definition
addMaxTireTracksSetting()
Code
1393function SettingsModel:addMaxTireTracksSetting()
1394 local function readValue()
1395 return Utils.getValueIndex(getTyreTracksSegmentsCoeff(), self.tireTracksValues)
1396 end
1397
1398 local function writeValue(value)
1399 setTyreTracksSegementsCoeff(self.tireTracksValues[value]);
1400 end
1401
1402 self:addSetting(SettingsModel.SETTING.MAX_TIRE_TRACKS, readValue, writeValue)
1403end

addMSAASetting

Description
Definition
addMSAASetting()
Code
1208function SettingsModel:addMSAASetting()
1209 local function readValue()
1210 return SettingsModel.getMSAAIndex(getMSAA())
1211 end
1212
1213 local function writeValue(value)
1214 setMSAA(SettingsModel.getMSAAFromIndex(value))
1215 end
1216
1217 self:addSetting(SettingsModel.SETTING.MSAA, readValue, writeValue)
1218end

addObjectDrawDistanceSetting

Description
Definition
addObjectDrawDistanceSetting()
Code
1323function SettingsModel:addObjectDrawDistanceSetting()
1324 local function readValue()
1325 return Utils.getValueIndex(getViewDistanceCoeff(), self.percentValues)
1326 end
1327
1328 local function writeValue(value)
1329 setViewDistanceCoeff(self.percentValues[value]);
1330 end
1331
1332 self:addSetting(SettingsModel.SETTING.OBJECT_DRAW_DISTANCE, readValue, writeValue)
1333end

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
280function SettingsModel:addSetting(gameSettingsKey, readerFunction, writerFunction, noRestartRequired)
281 local initialValue = readerFunction(gameSettingsKey)
282
283 self.settings[gameSettingsKey] = {key = gameSettingsKey, saved = initialValue, changed = initialValue, noRestartRequired = noRestartRequired}
284 self.settingReaders[gameSettingsKey] = readerFunction
285 self.settingWriters[gameSettingsKey] = writerFunction
286
287 table.insert(self.sortedSettings, self.settings[gameSettingsKey])
288end

addShaderQualitySetting

Description
Definition
addShaderQualitySetting()
Code
1267function SettingsModel:addShaderQualitySetting()
1268 local function readValue()
1269 return SettingsModel.getShaderQualityIndex(getShaderQuality())
1270 end
1271
1272 local function writeValue(value)
1273 setShaderQuality(SettingsModel.getShaderQualityByIndex(value))
1274 end
1275
1276 self:addSetting(SettingsModel.SETTING.SHADER_QUALITY, readValue, writeValue)
1277end

addShadowMapFilteringSetting

Description
Definition
addShadowMapFilteringSetting()
Code
1281function SettingsModel:addShadowMapFilteringSetting()
1282 local function readValue()
1283 return SettingsModel.getShadowMapFilterIndex(getShadowMapFilterSize())
1284 end
1285
1286 local function writeValue(value)
1287 setShadowMapFilterSize(SettingsModel.getShadowMapFilterByIndex(value))
1288 end
1289
1290 self:addSetting(SettingsModel.SETTING.SHADOW_MAP_FILTERING, readValue, writeValue)
1291end

addShadowMaxLightsSetting

Description
Definition
addShadowMaxLightsSetting()
Code
1295function SettingsModel:addShadowMaxLightsSetting()
1296 local function readValue()
1297 return getMaxNumShadowLights()
1298 end
1299
1300 local function writeValue(value)
1301 setMaxNumShadowLights(value)
1302 end
1303
1304 self:addSetting(SettingsModel.SETTING.MAX_LIGHTS, readValue, writeValue)
1305end

addShadowQualitySetting

Description
Definition
addShadowQualitySetting()
Code
1252function SettingsModel:addShadowQualitySetting()
1253 local function readValue()
1254 return SettingsModel.getShadowQualityIndex(getShadowQuality(), getHasShadowFocusBox())
1255 end
1256
1257 local function writeValue(value)
1258 setShadowQuality(SettingsModel.getShadowQualityByIndex(value))
1259 setHasShadowFocusBox(SettingsModel.getHasShadowFocusBoxByIndex(value))
1260 end
1261
1262 self:addSetting(SettingsModel.SETTING.SHADOW_QUALITY, readValue, writeValue)
1263end

addTerrainLODDistanceSetting

Description
Definition
addTerrainLODDistanceSetting()
Code
1365function SettingsModel:addTerrainLODDistanceSetting()
1366 local function readValue()
1367 return Utils.getValueIndex(getTerrainLODDistanceCoeff(), self.percentValues)
1368 end
1369
1370 local function writeValue(value)
1371 setTerrainLODDistanceCoeff(self.percentValues[value]);
1372 end
1373
1374 self:addSetting(SettingsModel.SETTING.TERRAIN_LOD_DISTANCE, readValue, writeValue)
1375end

addTerrainQualitySetting

Description
Definition
addTerrainQualitySetting()
Code
1309function SettingsModel:addTerrainQualitySetting()
1310 local function readValue()
1311 return SettingsModel.getTerrainQualityIndex(getHasTerrainNormalMapping())
1312 end
1313
1314 local function writeValue(value)
1315 setHasTerrainNormalMapping(SettingsModel.getTerrainQualityByIndex(value));
1316 end
1317
1318 self:addSetting(SettingsModel.SETTING.TERRAIN_QUALITY, readValue, writeValue)
1319end

addTextureFilteringSetting

Description
Definition
addTextureFilteringSetting()
Code
1222function SettingsModel:addTextureFilteringSetting()
1223 local function readValue()
1224 return SettingsModel.getTextureFilteringIndex(getFilterTrilinear(), getFilterAnisotropy())
1225 end
1226
1227 local function writeValue(value)
1228 local isTrilinear, anisoValue = SettingsModel.getTextureFilteringByIndex(value)
1229 setFilterTrilinear(isTrilinear)
1230 setFilterAnisotropy(anisoValue)
1231 end
1232
1233 self:addSetting(SettingsModel.SETTING.TEXTURE_FILTERING, readValue, writeValue)
1234end

addTextureResolutionSetting

Description
Definition
addTextureResolutionSetting()
Code
1238function SettingsModel:addTextureResolutionSetting()
1239 local function readValue()
1240 return SettingsModel.getTextureResolutionIndex(getTextureResolution())
1241 end
1242
1243 local function writeValue(value)
1244 setTextureResolution(SettingsModel.getTextureResolutionByIndex(value))
1245 end
1246
1247 self:addSetting(SettingsModel.SETTING.TEXTURE_RESOLUTION, readValue, writeValue)
1248end

addVolumeMeshTessellationSetting

Description
Definition
addVolumeMeshTessellationSetting()
Code
1379function SettingsModel:addVolumeMeshTessellationSetting()
1380 local function readValue()
1381 return Utils.getValueIndex(SettingsModel.getVolumeMeshTessellationCoeff(), self.percentValues)
1382 end
1383
1384 local function writeValue(value)
1385 SettingsModel.setVolumeMeshTessellationCoeff(self.percentValues[value]);
1386 end
1387
1388 self:addSetting(SettingsModel.SETTING.VOLUME_MESH_TESSELLATION, readValue, writeValue)
1389end

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
380function SettingsModel:applyChanges(settingClassesToSave)
381 for _, setting in pairs(self.sortedSettings) do
382 local settingsKey = setting.key
383 local savedValue = self.settings[settingsKey].saved
384 local changedValue = self.settings[settingsKey].changed
385
386 if savedValue ~= changedValue then
387 local writeFunction = self.settingWriters[settingsKey]
388 writeFunction(changedValue, settingsKey) -- write to game settings / engine
389
390 self.settings[settingsKey].saved = changedValue -- update internal model
391 end
392 end
393
394 if settingClassesToSave ~= 0 then
395 self:saveChanges(settingClassesToSave)
396 end
397end

applyCustomSettings

Description
Definition
applyCustomSettings()
Code
439function SettingsModel:applyCustomSettings()
440 for settingsKey in pairs(self.settings) do
441 if settingsKey ~= SettingsModel.SETTING.PERFORMANCE_CLASS then
442 local changedValue = self.settings[settingsKey].changed
443 local writeFunction = self.settingWriters[settingsKey]
444 writeFunction(changedValue, settingsKey)
445 end
446 end
447end

applyPerformanceClass

Description
Definition
applyPerformanceClass()
Code
428function SettingsModel:applyPerformanceClass(value)
429 local settingsKey = SettingsModel.SETTING.PERFORMANCE_CLASS
430 local writeFunction = self.settingWriters[settingsKey]
431 writeFunction(value, settingsKey)
432 self.settings[settingsKey].changed = value
433
434 self:refreshChangedValue()
435end

createControlDisplayValues

Description
Populate value and string lists for control elements display.
Definition
createControlDisplayValues()
Code
455function SettingsModel:createControlDisplayValues()
456 self.volumeTexts = {self.l10n:getText("ui_off"), "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%"}
457
458 for i = self.minBrightness, self.maxBrightness + 0.0001, self.brightnessStep do -- add a little to max for floating point precision
459 table.insert(self.brightnessTexts, string.format("%.1f", i))
460 end
461
462 local index = 1
463 for i = self.minFovY, self.maxFovY do
464 self.indexToFovYMapping[index] = i
465 self.fovYToIndexMapping[i] = index
466 table.insert(self.fovYTexts, string.format(self.l10n:getText("setting_fovyDegree"), i))
467
468 index = index + 1
469 end
470
471 for i = 1, 11 do
472 table.insert(self.uiScaleTexts, string.format("%d%%", MathUtil.round(0.5 + (i - 1) * 0.1, 1) * 100))
473 end
474
475 for i = 0.5, 2.1, 0.1 do
476 table.insert(self.resolutionScaleTexts, string.format("%d%%", MathUtil.round(i * 100)))
477 end
478
479 for i = 0.5, 3, self.cameraSensitivityStep do
480 table.insert(self.cameraSensitivityStrings, string.format("%d%%", i * 100))
481 table.insert(self.cameraSensitivityValues, i)
482 end
483
484 for i = 0.5, 3, self.vehicleArmSensitivityStep do
485 table.insert(self.vehicleArmSensitivityStrings, string.format("%d%%", i * 100))
486 table.insert(self.vehicleArmSensitivityValues, i)
487 end
488
489 for i = 0, 10, self.steeringBackSpeedStep do
490 table.insert(self.steeringBackSpeedStrings, string.format("%d%%", i * 10))
491 table.insert(self.steeringBackSpeedValues, i)
492 end
493
494 for i = 0.5, 2, self.steeringSensitivityStep do
495 table.insert(self.steeringSensitivityStrings, string.format("%d%%", i * 100))
496 table.insert(self.steeringSensitivityValues, i)
497 end
498
499 self.moneyUnitTexts = {self.l10n:getText("unit_euro"), self.l10n:getText("unit_dollar"), self.l10n:getText("unit_pound")}
500 self.distanceUnitTexts = {self.l10n:getText("unit_km"), self.l10n:getText("unit_miles")}
501 self.temperatureUnitTexts = {self.l10n:getText("unit_celsius"), self.l10n:getText("unit_fahrenheit")}
502 self.areaUnitTexts = {self.l10n:getText("unit_ha"), self.l10n:getText("unit_acre")}
503 self.radioModeTexts = {self.l10n:getText("setting_radioAlways"), self.l10n:getText("setting_radioVehicleOnly")}
504 self.msaaTexts = {self.l10n:getText("ui_off"), "2x", "4x", "8x"}
505 self.shadowQualityTexts = {self.l10n:getText("setting_off"), self.l10n:getText("setting_medium"), self.l10n:getText("setting_high"), self.l10n:getText("setting_veryHigh")}
506 self.fourStateTexts = {self.l10n:getText("setting_low"), self.l10n:getText("setting_medium"), self.l10n:getText("setting_high"), self.l10n:getText("setting_veryHigh")}
507 self.lowHighTexts = {self.l10n:getText("setting_low"), self.l10n:getText("setting_high")}
508 self.textureFilteringTexts = {"Bilinear", "Trilinear", "Aniso 1x", "Aniso 2x", "Aniso 4x", "Aniso 8x", "Aniso 16x"}
509
510 self.hdrPeakBrightnessValues = {}
511 self.hdrPeakBrightnessTexts = {}
512 self.hdrPeakBrightnessStep = 10
513 for i=0, 50 do
514 local value = (100 + i * self.hdrPeakBrightnessStep)
515 table.insert(self.hdrPeakBrightnessTexts, string.format("%d", value))
516 table.insert(self.hdrPeakBrightnessValues, value)
517 end
518
519 self.shadowMapMaxLightsTexts = {}
520 for i=1,10 do
521 table.insert(self.shadowMapMaxLightsTexts, string.format("%d", i))
522 end
523
524 self.percentValues = {}
525 self.perentageTexts = {}
526 self.percentStep = 0.05
527 for i=0, 30 do
528 table.insert(self.perentageTexts, string.format("%.f%%", (0.5+i*self.percentStep)*100))
529 table.insert(self.percentValues, (0.5+i*self.percentStep))
530 end
531
532 self.tireTracksValues = {}
533 self.tireTracksTexts = {}
534 self.tireTracksStep = 0.5
535 for i=0, 4, self.tireTracksStep do
536 table.insert(self.tireTracksTexts, string.format("%d%%", i*100))
537 table.insert(self.tireTracksValues, i)
538 end
539
540 self.maxMirrorsTexts = {}
541 for i=0,7 do
542 table.insert(self.maxMirrorsTexts, string.format("%d", i))
543 end
544
545 self.resolutionTexts = {}
546 local numR = getNumOfScreenModes()
547 for i = 0, numR - 1 do
548 local x, y = getScreenModeInfo(i)
549 local aspect = x / y
550 local aspectStr = ""
551 if aspect == 1.25 then
552 aspectStr = "(5:4)"
553 elseif aspect > 1.3 and aspect < 1.4 then
554 aspectStr = "(4:3)"
555 elseif aspect > 1.7 and aspect < 1.8 then
556 aspectStr = "(16:9)"
557 elseif aspect > 2.3 and aspect < 2.4 then
558 aspectStr = "(21:9)";
559 else
560 aspectStr = string.format("(%1.0f:10)", aspect * 10)
561 end
562
563 table.insert(self.resolutionTexts, string.format("%dx%d %s", x, y, aspectStr))
564 end
565
566 self.mpLanguageTexts = {}
567 local numL = getNumOfLanguages()
568 for i=0, numL-1 do
569 table.insert(self.mpLanguageTexts, getLanguageName(i))
570 end
571
572 self.inputHelpModeTexts = {self.l10n:getText("ui_auto"), self.l10n:getText("ui_keyboard"), self.l10n:getText("ui_gamepad")}
573
574 --self.consoleResolutionTexts = { self.l10n:getText("ui_fullhd_desc"), self.l10n:getText("ui_quadhd_desc"), self.l10n:getText("ui_ultrahd_desc") }
575 self.consoleResolutionTexts = { self.l10n:getText("ui_fullhd_desc"), self.l10n:getText("ui_quadhd_desc") }
576 self.consoleRenderQualityTexts = { self.l10n:getText("button_normal"), self.l10n:getText("button_enhanced") }
577
578 self.deadzoneValues = {}
579 self.deadzoneTexts = {}
580 self.deadzoneStep = 0.01
581 for i = 0, 0.3+0.001, self.deadzoneStep do
582 table.insert(self.deadzoneTexts, string.format("%d%%", math.floor(i * 100+0.001)))
583 table.insert(self.deadzoneValues, i)
584 end
585
586 self.sensitivityValues = {}
587 self.sensitivityTexts = {}
588 self.sensitivityStep = 0.25
589 for i = 1, 2, self.sensitivityStep do
590 table.insert(self.sensitivityTexts, string.format("%d%%", i * 100))
591 table.insert(self.sensitivityValues, i)
592 end
593end

getConsoleIsRenderQualityDisabled

Description
Definition
getConsoleIsRenderQualityDisabled()
Code
852function SettingsModel:getConsoleIsRenderQualityDisabled()
853 local displayResolution = self:getValue(SettingsModel.SETTING.CONSOLE_RESOLUTION)
854 return not getNeoMode() or displayResolution ~= 1
855end

getConsoleIsRenderQualityVisible

Description
Definition
getConsoleIsRenderQualityVisible()
Code
865function SettingsModel:getConsoleIsRenderQualityVisible()
866 return getNeoMode()
867end

getConsoleIsResolutionVisible

Description
Definition
getConsoleIsResolutionVisible()
Code
859function SettingsModel:getConsoleIsResolutionVisible()
860 return getNeoMode() and get4kAvailable()
861end

getConsoleRenderQualityTexts

Description
Definition
getConsoleRenderQualityTexts()
Code
877function SettingsModel:getConsoleRenderQualityTexts()
878 return self.consoleRenderQualityTexts
879end

getConsoleResolutionTexts

Description
Definition
getConsoleResolutionTexts()
Code
871function SettingsModel:getConsoleResolutionTexts()
872 return self.consoleResolutionTexts
873end

getCurrentDeviceName

Description
Definition
getCurrentDeviceName()
Code
638function SettingsModel:getCurrentDeviceName()
639 local setting = self.deviceSettings[self.currentDevice]
640 if setting ~= nil then
641 return setting.device.deviceName
642 end
643
644 return ""
645end

getDeadzoneTexts

Description
Definition
getDeadzoneTexts()
Code
597function SettingsModel:getDeadzoneTexts()
598 return self.deadzoneTexts
599end

getDeviceAxisDeadzoneValue

Description
Definition
getDeviceAxisDeadzoneValue()
Code
789function SettingsModel:getDeviceAxisDeadzoneValue(axisIndex)
790 local settings = self.deviceSettings[self.currentDevice]
791 return settings.deadzones[axisIndex].current
792end

getDeviceAxisSensitivityValue

Description
Definition
getDeviceAxisSensitivityValue()
Code
796function SettingsModel:getDeviceAxisSensitivityValue(axisIndex)
797 local settings = self.deviceSettings[self.currentDevice]
798 return settings.sensitivities[axisIndex].current
799end

getDeviceHasAxisDeadzone

Description
Definition
getDeviceHasAxisDeadzone()
Code
609function SettingsModel:getDeviceHasAxisDeadzone(axisIndex)
610 local settings = self.deviceSettings[self.currentDevice]
611 return settings ~= nil and settings.deadzones[axisIndex] ~= nil
612end

getDeviceHasAxisSensitivity

Description
Definition
getDeviceHasAxisSensitivity()
Code
616function SettingsModel:getDeviceHasAxisSensitivity(axisIndex)
617 local settings = self.deviceSettings[self.currentDevice]
618 return settings ~= nil and settings.sensitivities[axisIndex] ~= nil
619end

getFoliageDrawDistanceTexts

Description
Definition
getFoliageDrawDistanceTexts()
Code
1002function SettingsModel:getFoliageDrawDistanceTexts()
1003 return self.perentageTexts
1004end

getInputHelpModeTexts

Description
Definition
getInputHelpModeTexts()
Code
895function SettingsModel:getInputHelpModeTexts()
896 return self.inputHelpModeTexts
897end

getIsDeviceMouse

Description
Definition
getIsDeviceMouse()
Code
810function SettingsModel:getIsDeviceMouse()
811 local settings = self.deviceSettings[self.currentDevice]
812 return settings ~= nil and settings.device.category == InputDevice.CATEGORY.KEYBOARD_MOUSE
813end

getIsLanguageDisabled

Description
Definition
getIsLanguageDisabled()
Code
907function SettingsModel:getIsLanguageDisabled()
908 return #g_availableLanguagesTable <= 1 or GS_IS_STEAM_VERSION
909end

getLanguageTexts

Description
Definition
getLanguageTexts()
Code
901function SettingsModel:getLanguageTexts()
902 return g_availableLanguageNamesTable
903end

getLightsProfileTexts

Description
Definition
getLightsProfileTexts()
Code
984function SettingsModel:getLightsProfileTexts()
985 return self.fourStateTexts
986end

getLODDistanceTexts

Description
Definition
getLODDistanceTexts()
Code
1008function SettingsModel:getLODDistanceTexts()
1009 return self.perentageTexts
1010end

getMaxMirrorsTexts

Description
Definition
getMaxMirrorsTexts()
Code
1032function SettingsModel:getMaxMirrorsTexts()
1033 return self.maxMirrorsTexts
1034end

getMaxTireTracksTexts

Description
Definition
getMaxTireTracksTexts()
Code
1026function SettingsModel:getMaxTireTracksTexts()
1027 return self.tireTracksTexts
1028end

getMouseSensitivityValue

Description
Definition
getMouseSensitivityValue()
Code
803function SettingsModel:getMouseSensitivityValue(axisIndex)
804 local settings = self.deviceSettings[self.currentDevice]
805 return settings.mouseSensitivity.current
806end

getMPLanguageTexts

Description
Definition
getMPLanguageTexts()
Code
889function SettingsModel:getMPLanguageTexts()
890 return self.mpLanguageTexts
891end

getMSAATexts

Description
Definition
getMSAATexts()
Code
942function SettingsModel:getMSAATexts()
943 return self.msaaTexts
944end

getNumDevices

Description
Definition
getNumDevices()
Code
623function SettingsModel:getNumDevices()
624 return #self.deviceSettings
625end

getObjectDrawDistanceTexts

Description
Definition
getObjectDrawDistanceTexts()
Code
996function SettingsModel:getObjectDrawDistanceTexts()
997 return self.perentageTexts
998end

getPerformanceClassTexts

Description
Definition
getPerformanceClassTexts()
Code
913function SettingsModel:getPerformanceClassTexts()
914 local class, isCustom = getPerformanceClass()
915
916 local texts = {}
917 table.insert(texts, self.l10n:getText("setting_low"))
918 table.insert(texts, self.l10n:getText("setting_medium"))
919 table.insert(texts, self.l10n:getText("setting_high"))
920 table.insert(texts, self.l10n:getText("setting_veryHigh"))
921
922 local settings = GS_PERFORMANCE_CLASS_PRESETS[Utils.getPerformanceClassId()]
923 isCustom = isCustom or (settings[SettingsModel.SETTING.LIGHTS_PROFILE] ~= g_gameSettings:getValue(SettingsModel.SETTING.LIGHTS_PROFILE))
924 isCustom = isCustom or (settings[SettingsModel.SETTING.MAX_MIRRORS] ~= g_gameSettings:getValue(SettingsModel.SETTING.MAX_MIRRORS))
925 isCustom = isCustom or (settings[SettingsModel.SETTING.REAL_BEACON_LIGHTS] ~= g_gameSettings:getValue(SettingsModel.SETTING.REAL_BEACON_LIGHTS))
926
927 if isCustom then
928 local index = Utils.getPerformanceClassIndex(class)
929 texts[index] = texts[index] .. " (Custom)"
930 end
931
932 return texts, class, isCustom
933end

getResolutionScaleTexts

Description
Definition
getResolutionScaleTexts()
Code
1103function SettingsModel:getResolutionScaleTexts()
1104 return self.resolutionScaleTexts
1105end

getResolutionTexts

Description
Definition
getResolutionTexts()
Code
883function SettingsModel:getResolutionTexts()
884 return self.resolutionTexts
885end

getSensitivityTexts

Description
Definition
getSensitivityTexts()
Code
603function SettingsModel:getSensitivityTexts()
604 return self.sensitivityTexts
605end

getShaderQualityTexts

Description
Definition
getShaderQualityTexts()
Code
954function SettingsModel:getShaderQualityTexts()
955 return self.fourStateTexts
956end

getShadowMapFilteringTexts

Description
Definition
getShadowMapFilteringTexts()
Code
972function SettingsModel:getShadowMapFilteringTexts()
973 return self.lowHighTexts
974end

getShadowMapLightsTexts

Description
Definition
getShadowMapLightsTexts()
Code
990function SettingsModel:getShadowMapLightsTexts()
991 return self.shadowMapMaxLightsTexts
992end

getShadowQualityTexts

Description
Definition
getShadowQualityTexts()
Code
948function SettingsModel:getShadowQualityTexts()
949 return self.shadowQualityTexts
950end

getTerraingQualityTexts

Description
Definition
getTerraingQualityTexts()
Code
978function SettingsModel:getTerraingQualityTexts()
979 return self.lowHighTexts
980end

getTerrainLODDistanceTexts

Description
Definition
getTerrainLODDistanceTexts()
Code
1014function SettingsModel:getTerrainLODDistanceTexts()
1015 return self.perentageTexts
1016end

getTextureFilteringTexts

Description
Definition
getTextureFilteringTexts()
Code
966function SettingsModel:getTextureFilteringTexts()
967 return self.textureFilteringTexts
968end

getTextureResolutionTexts

Description
Definition
getTextureResolutionTexts()
Code
960function SettingsModel:getTextureResolutionTexts()
961 return self.lowHighTexts
962end

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
302function SettingsModel:getValue(settingKey, trueValue)
303 if trueValue then
304 return self.settingReaders[settingKey](settingKey)
305 end
306 if self.settings[settingKey] == nil then -- resolution can be missing on consoles
307 return 0
308 end
309 return self.settings[settingKey].changed
310end

getVolumeMeshTessalationTexts

Description
Definition
getVolumeMeshTessalationTexts()
Code
1020function SettingsModel:getVolumeMeshTessalationTexts()
1021 return self.perentageTexts
1022end

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
354function SettingsModel:hasChanges()
355 for _, setting in pairs(self.settings) do
356 if setting.saved ~= setting.changed then
357 return true
358 end
359 end
360
361 return self:hasDeviceChanges()
362end

hasDeviceChanges

Description
Definition
hasDeviceChanges()
Code
684function SettingsModel:hasDeviceChanges()
685 for _, settings in ipairs(self.deviceSettings) do
686 for axisIndex, _ in pairs(settings.deadzones) do
687 local deadzone = settings.deadzones[axisIndex]
688 if deadzone.current ~= deadzone.saved then
689 return true
690 end
691
692 local sensitivity = settings.sensitivities[axisIndex]
693 if sensitivity.current ~= sensitivity.saved then
694 return true
695 end
696 end
697
698 if settings.device.category == InputDevice.CATEGORY.KEYBOARD_MOUSE then
699 local mouseSensitivity = settings.mouseSensitivity
700 if mouseSensitivity.current ~= mouseSensitivity.saved then
701 return true
702 end
703 end
704 end
705
706 return false
707end

initDeviceSettings

Description
Definition
initDeviceSettings()
Code
649function SettingsModel:initDeviceSettings()
650 self.deviceSettings = {}
651 self.currentDevice = 0
652
653 for _, device in pairs(g_inputBinding.devicesByInternalId) do
654 local deadzones = {}
655 local sensitivities = {}
656 local mouseSensitivity = {}
657 table.insert(self.deviceSettings, {device=device, deadzones=deadzones, sensitivities=sensitivities, mouseSensitivity=mouseSensitivity})
658
659 for axisIndex = 0, Input.MAX_NUM_AXES - 1 do
660 if getHasGamepadAxis(axisIndex, device.internalId) then
661 local deadzone = device:getDeadzone(axisIndex)
662 local value = Utils.getValueIndex(deadzone, self.deadzoneValues)
663 deadzones[axisIndex] = {current = value, saved = value}
664
665 local sensitivity = device:getSensitivity(axisIndex)
666 local value = Utils.getValueIndex(sensitivity, self.sensitivityValues)
667 sensitivities[axisIndex] = {current = value, saved = value}
668 end
669 end
670
671 if device.category == InputDevice.CATEGORY.KEYBOARD_MOUSE then
672 local scale, _ = g_inputBinding:getMouseMotionScale()
673 local value = Utils.getValueIndex(scale, self.sensitivityValues)
674 mouseSensitivity.current = value
675 mouseSensitivity.saved = value
676 end
677
678 self.currentDevice = 1
679 end
680end

initialize

Description
Initialize model. Read current configuration settings and populate valid display and configuration option values.
Definition
initialize()
Code
186function SettingsModel:initialize()
187 self:createControlDisplayValues()
188 self:addManagedSettings()
189end

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
367function SettingsModel:needsRestartToApplyChanges()
368 for _, setting in pairs(self.settings) do
369 if setting.saved ~= setting.changed and not setting.noRestartRequired then
370 return true
371 end
372 end
373
374 return self:hasDeviceChanges()
375end

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
102function SettingsModel.new(gameSettings, settingsFileHandle, l10n, soundMixer, isConsoleVersion)
103 local self = setmetatable({}, SettingsModel_mt)
104
105 self.gameSettings = gameSettings
106 self.settingsFileHandle = settingsFileHandle
107 self.l10n = l10n
108 self.soundMixer = soundMixer
109 self.isConsoleVersion = isConsoleVersion
110
111 self.settings = {} -- previous and current settings, {[setting] -> {saved=value, changed=value}}
112 self.sortedSettings = {} -- settings
113 self.settingReaders = {} -- [settingKey] -> function
114 self.settingWriters = {} -- [settingKey] -> function
115
116 self.defaultReaderFunction = self:makeDefaultReaderFunction()
117 self.defaultWriterFunction = self:makeDefaultWriterFunction()
118
119 self.volumeTexts = {}
120 self.brightnessTexts = {}
121 self.fovYTexts = {}
122 self.indexToFovYMapping = {}
123 self.fovYToIndexMapping = {}
124 self.uiScaleValues = {}
125 self.uiScaleTexts = {}
126 self.cameraSensitivityValues = {}
127 self.cameraSensitivityStrings = {}
128 self.cameraSensitivityStep = 0.25
129 self.vehicleArmSensitivityValues = {}
130 self.vehicleArmSensitivityStrings = {}
131 self.vehicleArmSensitivityStep = 0.25
132 self.steeringBackSpeedValues = {}
133 self.steeringBackSpeedStrings = {}
134 self.steeringBackSpeedStep = 1
135 self.steeringSensitivityValues = {}
136 self.steeringSensitivityStrings = {}
137 self.steeringSensitivityStep = 0.25
138 self.moneyUnitTexts = {}
139 self.distanceUnitTexts = {}
140 self.temperatureUnitTexts = {}
141 self.areaUnitTexts = {}
142 self.radioModeTexts = {}
143 self.resolutionScaleTexts = {}
144
145 self.msaaTexts = {}
146 self.shadowQualityTexts = {}
147 self.fourStateTexts = {}
148 self.lowHighTexts = {}
149 self.textureFilteringTexts = {}
150 self.shadowMapMaxLightsTexts = {}
151 self.hdrPeakBrightnessValues = {}
152 self.hdrPeakBrightnessTexts = {}
153 self.hdrPeakBrightnessStep = 0.05
154 self.percentValues = {}
155 self.perentageTexts = {}
156 self.percentStep = 0.05
157 self.tireTracksValues = {}
158 self.tireTracksTexts = {}
159 self.tireTracksStep = 0.5
160 self.maxMirrorsTexts = {}
161
162 self.resolutionTexts = {}
163 self.mpLanguageTexts = {}
164 self.inputHelpModeTexts = {}
165
166 self.intialValues = {}
167
168 self.deviceSettings = {}
169 self.currentDevice = {}
170
171 self.minBrightness = 0.5
172 self.maxBrightness = 2.0
173 self.brightnessStep = 0.1
174
175 self.minFovY = 45
176 self.maxFovY = 90
177
178 self:initialize()
179
180 return self
181end

nextDevice

Description
Definition
nextDevice()
Code
629function SettingsModel:nextDevice()
630 self.currentDevice = self.currentDevice + 1
631 if self.currentDevice > #self.deviceSettings then
632 self.currentDevice = 1
633 end
634end

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
322function SettingsModel:refresh()
323 for settingsKey, setting in pairs(self.settings) do
324 setting.saved = self.settingReaders[settingsKey](settingsKey)
325 setting.changed = setting.saved
326 end
327end

refreshChangedValue

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
refreshChangedValue()
Code
333function SettingsModel:refreshChangedValue()
334 for settingsKey, setting in pairs(self.settings) do
335 setting.changed = self.settingReaders[settingsKey](settingsKey)
336 end
337end

reset

Description
Definition
reset()
Code
341function SettingsModel:reset()
342 for _, setting in pairs(self.sortedSettings) do
343 setting.changed = setting.saved
344 local writeFunction = self.settingWriters[setting.key]
345 writeFunction(setting.changed, setting.key)
346 end
347
348 self:resetDeviceChanges()
349end

resetDeviceChanges

Description
Definition
resetDeviceChanges()
Code
746function SettingsModel:resetDeviceChanges()
747 for _, settings in ipairs(self.deviceSettings) do
748 for axisIndex, _ in pairs(settings.deadzones) do
749 local deadzone = settings.deadzones[axisIndex]
750 deadzone.current = deadzone.saved
751
752 local sensitivity = settings.sensitivities[axisIndex]
753 sensitivity.current = deadzone.saved
754 end
755
756 settings.mouseSensitivity.current = settings.mouseSensitivity.saved
757 end
758end

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
402function SettingsModel:saveChanges(settingClassesToSave)
403 if bitAND(settingClassesToSave, SettingsModel.SETTING_CLASS.SAVE_GAMEPLAY_SETTINGS) ~= 0 then
404 self.gameSettings:saveToXMLFile(self.settingsFileHandle)
405 end
406
407 self:saveDeviceChanges()
408
409 if bitAND(settingClassesToSave, SettingsModel.SETTING_CLASS.SAVE_ENGINE_QUALITY_SETTINGS) ~= 0 then
410 saveHardwareScalability()
411 if self.isConsoleVersion or GS_PLATFORM_TYPE == GS_PLATFORM_TYPE_GGP then
412 executeSettingsChange()
413 end
414 end
415end

saveDeviceChanges

Description
Definition
saveDeviceChanges()
Code
711function SettingsModel:saveDeviceChanges()
712 local changedSettings = false
713 for _, settings in ipairs(self.deviceSettings) do
714 local device = settings.device
715 for axisIndex, _ in pairs(settings.deadzones) do
716 local deadzones = settings.deadzones[axisIndex]
717 local deadzone = self.deadzoneValues[deadzones.current]
718 deadzones.saved = deadzones.current
719 device:setDeadzone(axisIndex, deadzone)
720
721 local sensitivities = settings.sensitivities[axisIndex]
722 local sensitivity = self.sensitivityValues[sensitivities.current]
723 sensitivities.saved = sensitivities.current
724
725 device:setSensitivity(axisIndex, sensitivity)
726 changedSettings = true
727 end
728 if settings.device.category == InputDevice.CATEGORY.KEYBOARD_MOUSE then
729 local mouseSensitivity = settings.mouseSensitivity
730 if mouseSensitivity.current ~= mouseSensitivity.saved then
731 g_inputBinding:setMouseMotionScale(self.sensitivityValues[mouseSensitivity.current])
732 mouseSensitivity.saved = mouseSensitivity.current
733 changedSettings = true
734 end
735 end
736 end
737
738 if changedSettings then
739 g_inputBinding:applyGamepadDeadzones()
740 g_inputBinding:saveToXMLFile()
741 end
742end

setConsolePerformanceSetting

Description
Definition
setConsolePerformanceSetting()
Code
1165function SettingsModel:setConsolePerformanceSetting()
1166 local renderQuality = self:getValue(SettingsModel.SETTING.CONSOLE_RENDER_QUALITY)
1167 local resolution = self:getValue(SettingsModel.SETTING.CONSOLE_RESOLUTION)
1168 local discreteSetting = SettingsModel.getModeFromResolutionState(resolution, renderQuality)
1169 setDiscretePerformanceSetting(discreteSetting)
1170end

setConsoleResolution

Description
Definition
setConsoleResolution()
Code
840function SettingsModel:setConsoleResolution(value)
841 local displayResolution = self:getValue(SettingsModel.SETTING.CONSOLE_RESOLUTION)
842 if not getNeoMode() or displayResolution then
843 self:setValue(SettingsModel.SETTING.CONSOLE_RENDER_QUALITY, 1)
844 else
845 self:setValue(SettingsModel.SETTING.CONSOLE_RENDER_QUALITY, self.settings[SettingsModel.SETTING.CONSOLE_RENDER_QUALITY].saved)
846 end
847 self:setValue(SettingsModel.SETTING.CONSOLE_RESOLUTION, value)
848end

setDeviceDeadzoneValue

Description
Definition
setDeviceDeadzoneValue()
Code
762function SettingsModel:setDeviceDeadzoneValue(axisIndex, value)
763 local settings = self.deviceSettings[self.currentDevice]
764 if settings ~= nil then
765 settings.deadzones[axisIndex].current = value
766 end
767end

setDeviceSensitivityValue

Description
Definition
setDeviceSensitivityValue()
Code
771function SettingsModel:setDeviceSensitivityValue(axisIndex, value)
772 local settings = self.deviceSettings[self.currentDevice]
773 if settings ~= nil then
774 settings.sensitivities[axisIndex].current = value
775 end
776end

setMouseSensitivity

Description
Definition
setMouseSensitivity()
Code
780function SettingsModel:setMouseSensitivity(value)
781 local settings = self.deviceSettings[self.currentDevice]
782 if settings ~= nil then
783 settings.mouseSensitivity.current = value
784 end
785end

setSettingsFileHandle

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

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
294function SettingsModel:setValue(settingKey, value)
295 self.settings[settingKey].changed = value
296end