Script v1.7.1.0
- AI
- Animals
- Contracts
- Debug
- Economy
- Effects
- Events
- Farms
- GUI
- AnimalScreen
- AnimationElement
- BitmapElement
- BoxLayoutElement
- BreadcrumbsElement
- ButtonElement
- ButtonOverlay
- ChatWindow
- CheckedOptionElement
- ClearElement
- ContextActionDisplay
- DialogElement
- FieldInfoDisplay
- FillLevelsDisplay
- FlowLayoutElement
- FocusManager
- FrameElement
- FrameReferenceElement
- GameInfoDisplay
- GamePausedDisplay
- Gui
- GuiDataSource
- GuiElement
- GuiMixin
- GuiOverlay
- GuiProfile
- GuiSoundPlayer
- GuiTopDownCamera
- GuiUtils
- HUDDisplayElement
- HUDElement
- HUDFrameElement
- HUDPopupMessage
- HUDTextDisplay
- IndexChangeSubjectMixin
- IndexStateElement
- InGameIcon
- IngameMap
- IngameMapElement
- InputGlyphElement
- InputHelpDisplay
- ListElement
- ListItemElement
- MapHotspot
- MapOverlayGenerator
- MixerWagonHUDExtension
- MultiTextOptionElement
- MultiValueTween
- Overlay
- PagingElement
- PlaySampleMixin
- RenderElement
- RoundStatusBar
- ScreenElement
- SettingsModel
- SideNotification
- SliderElement
- SpeakerDisplay
- SpeedMeterDisplay
- StableListElement
- StatusBar
- TabbedMenu
- TabbedMenuFrameElement
- TabbedMenuWithDetails
- TableElement
- TableHeaderElement
- TextElement
- TextInputElement
- TimerElement
- ToggleButtonElement
- TopNotification
- Tween
- TweenSequence
- VehicleHUDExtension
- VehicleSchemaDisplay
- VideoElement
- Handtools
- I3d
- Materials
- Misc
- Objects
- Placeables
- Player
- Shop
- Sounds
- Specializations
- Triggers
- Utils
- Vehicles
- Weather
Engine v1.7.1.0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- XML
- general
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
- addConsoleRenderQualitySetting
- addConsoleResolutionSetting
- addFoliageDrawDistanceSetting
- addLODDistanceSetting
- addManagedSettings
- addMaxTireTracksSetting
- addMSAASetting
- addObjectDrawDistanceSetting
- addSetting
- addShaderQualitySetting
- addShadowMapFilteringSetting
- addShadowMaxLightsSetting
- addShadowQualitySetting
- addTerrainLODDistanceSetting
- addTerrainQualitySetting
- addTextureFilteringSetting
- addTextureResolutionSetting
- addVolumeMeshTessellationSetting
- applyChanges
- applyCustomSettings
- applyPerformanceClass
- createControlDisplayValues
- getConsoleIsRenderQualityDisabled
- getConsoleIsRenderQualityVisible
- getConsoleIsResolutionVisible
- getConsoleRenderQualityTexts
- getConsoleResolutionTexts
- getCurrentDeviceName
- getDeadzoneTexts
- getDeviceAxisDeadzoneValue
- getDeviceAxisSensitivityValue
- getDeviceHasAxisDeadzone
- getDeviceHasAxisSensitivity
- getFoliageDrawDistanceTexts
- getInputHelpModeTexts
- getIsDeviceMouse
- getIsLanguageDisabled
- getLanguageTexts
- getLightsProfileTexts
- getLODDistanceTexts
- getMaxMirrorsTexts
- getMaxTireTracksTexts
- getMouseSensitivityValue
- getMPLanguageTexts
- getMSAATexts
- getNumDevices
- getObjectDrawDistanceTexts
- getPerformanceClassTexts
- getResolutionScaleTexts
- getResolutionTexts
- getSensitivityTexts
- getShaderQualityTexts
- getShadowMapFilteringTexts
- getShadowMapLightsTexts
- getShadowQualityTexts
- getTerraingQualityTexts
- getTerrainLODDistanceTexts
- getTextureFilteringTexts
- getTextureResolutionTexts
- getValue
- getVolumeMeshTessalationTexts
- hasChanges
- hasDeviceChanges
- initDeviceSettings
- initialize
- needsRestartToApplyChanges
- new
- nextDevice
- refresh
- refreshChangedValue
- reset
- resetDeviceChanges
- saveChanges
- saveDeviceChanges
- setConsolePerformanceSetting
- setConsoleResolution
- setDeviceDeadzoneValue
- setDeviceSensitivityValue
- setMouseSensitivity
- setSettingsFileHandle
- setValue
addConsoleRenderQualitySetting
DescriptionDefinitionaddConsoleRenderQualitySetting()Code
1150 | function 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) |
1161 | end |
addConsoleResolutionSetting
DescriptionDefinitionaddConsoleResolutionSetting()Code
1134 | function 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) |
1146 | end |
addFoliageDrawDistanceSetting
DescriptionDefinitionaddFoliageDrawDistanceSetting()Code
1337 | function 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) |
1347 | end |
addLODDistanceSetting
DescriptionDefinitionaddLODDistanceSetting()Code
1351 | function 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) |
1361 | end |
addManagedSettings
DescriptionAdd managed valid settings which receive their initial value from the loaded game settings or the engine.Definition
addManagedSettings()Code
193 | function 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 |
269 | end |
addMaxTireTracksSetting
DescriptionDefinitionaddMaxTireTracksSetting()Code
1393 | function 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) |
1403 | end |
addMSAASetting
DescriptionDefinitionaddMSAASetting()Code
1208 | function 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) |
1218 | end |
addObjectDrawDistanceSetting
DescriptionDefinitionaddObjectDrawDistanceSetting()Code
1323 | function 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) |
1333 | 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 |
280 | function 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]) |
288 | end |
addShaderQualitySetting
DescriptionDefinitionaddShaderQualitySetting()Code
1267 | function 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) |
1277 | end |
addShadowMapFilteringSetting
DescriptionDefinitionaddShadowMapFilteringSetting()Code
1281 | function 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) |
1291 | end |
addShadowMaxLightsSetting
DescriptionDefinitionaddShadowMaxLightsSetting()Code
1295 | function 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) |
1305 | end |
addShadowQualitySetting
DescriptionDefinitionaddShadowQualitySetting()Code
1252 | function 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) |
1263 | end |
addTerrainLODDistanceSetting
DescriptionDefinitionaddTerrainLODDistanceSetting()Code
1365 | function 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) |
1375 | end |
addTerrainQualitySetting
DescriptionDefinitionaddTerrainQualitySetting()Code
1309 | function 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) |
1319 | end |
addTextureFilteringSetting
DescriptionDefinitionaddTextureFilteringSetting()Code
1222 | function 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) |
1234 | end |
addTextureResolutionSetting
DescriptionDefinitionaddTextureResolutionSetting()Code
1238 | function 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) |
1248 | end |
addVolumeMeshTessellationSetting
DescriptionDefinitionaddVolumeMeshTessellationSetting()Code
1379 | function 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) |
1389 | 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. |
380 | function 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 |
397 | end |
applyCustomSettings
DescriptionDefinitionapplyCustomSettings()Code
439 | function 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 |
447 | end |
applyPerformanceClass
DescriptionDefinitionapplyPerformanceClass()Code
428 | function 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() |
435 | end |
createControlDisplayValues
DescriptionPopulate value and string lists for control elements display.Definition
createControlDisplayValues()Code
455 | function 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 |
593 | end |
getConsoleIsRenderQualityDisabled
DescriptionDefinitiongetConsoleIsRenderQualityDisabled()Code
852 | function SettingsModel:getConsoleIsRenderQualityDisabled() |
853 | local displayResolution = self:getValue(SettingsModel.SETTING.CONSOLE_RESOLUTION) |
854 | return not getNeoMode() or displayResolution ~= 1 |
855 | end |
getConsoleIsRenderQualityVisible
DescriptionDefinitiongetConsoleIsRenderQualityVisible()Code
865 | function SettingsModel:getConsoleIsRenderQualityVisible() |
866 | return getNeoMode() |
867 | end |
getConsoleIsResolutionVisible
DescriptionDefinitiongetConsoleIsResolutionVisible()Code
859 | function SettingsModel:getConsoleIsResolutionVisible() |
860 | return getNeoMode() and get4kAvailable() |
861 | end |
getConsoleRenderQualityTexts
DescriptionDefinitiongetConsoleRenderQualityTexts()Code
877 | function SettingsModel:getConsoleRenderQualityTexts() |
878 | return self.consoleRenderQualityTexts |
879 | end |
getConsoleResolutionTexts
DescriptionDefinitiongetConsoleResolutionTexts()Code
871 | function SettingsModel:getConsoleResolutionTexts() |
872 | return self.consoleResolutionTexts |
873 | end |
getCurrentDeviceName
DescriptionDefinitiongetCurrentDeviceName()Code
638 | function SettingsModel:getCurrentDeviceName() |
639 | local setting = self.deviceSettings[self.currentDevice] |
640 | if setting ~= nil then |
641 | return setting.device.deviceName |
642 | end |
643 | |
644 | return "" |
645 | end |
getDeadzoneTexts
DescriptionDefinitiongetDeadzoneTexts()Code
597 | function SettingsModel:getDeadzoneTexts() |
598 | return self.deadzoneTexts |
599 | end |
getDeviceAxisDeadzoneValue
DescriptionDefinitiongetDeviceAxisDeadzoneValue()Code
789 | function SettingsModel:getDeviceAxisDeadzoneValue(axisIndex) |
790 | local settings = self.deviceSettings[self.currentDevice] |
791 | return settings.deadzones[axisIndex].current |
792 | end |
getDeviceAxisSensitivityValue
DescriptionDefinitiongetDeviceAxisSensitivityValue()Code
796 | function SettingsModel:getDeviceAxisSensitivityValue(axisIndex) |
797 | local settings = self.deviceSettings[self.currentDevice] |
798 | return settings.sensitivities[axisIndex].current |
799 | end |
getDeviceHasAxisDeadzone
DescriptionDefinitiongetDeviceHasAxisDeadzone()Code
609 | function SettingsModel:getDeviceHasAxisDeadzone(axisIndex) |
610 | local settings = self.deviceSettings[self.currentDevice] |
611 | return settings ~= nil and settings.deadzones[axisIndex] ~= nil |
612 | end |
getDeviceHasAxisSensitivity
DescriptionDefinitiongetDeviceHasAxisSensitivity()Code
616 | function SettingsModel:getDeviceHasAxisSensitivity(axisIndex) |
617 | local settings = self.deviceSettings[self.currentDevice] |
618 | return settings ~= nil and settings.sensitivities[axisIndex] ~= nil |
619 | end |
getFoliageDrawDistanceTexts
DescriptionDefinitiongetFoliageDrawDistanceTexts()Code
1002 | function SettingsModel:getFoliageDrawDistanceTexts() |
1003 | return self.perentageTexts |
1004 | end |
getInputHelpModeTexts
DescriptionDefinitiongetInputHelpModeTexts()Code
895 | function SettingsModel:getInputHelpModeTexts() |
896 | return self.inputHelpModeTexts |
897 | end |
getIsDeviceMouse
DescriptionDefinitiongetIsDeviceMouse()Code
810 | function SettingsModel:getIsDeviceMouse() |
811 | local settings = self.deviceSettings[self.currentDevice] |
812 | return settings ~= nil and settings.device.category == InputDevice.CATEGORY.KEYBOARD_MOUSE |
813 | end |
getIsLanguageDisabled
DescriptionDefinitiongetIsLanguageDisabled()Code
907 | function SettingsModel:getIsLanguageDisabled() |
908 | return #g_availableLanguagesTable <= 1 or GS_IS_STEAM_VERSION |
909 | end |
getLanguageTexts
DescriptionDefinitiongetLanguageTexts()Code
901 | function SettingsModel:getLanguageTexts() |
902 | return g_availableLanguageNamesTable |
903 | end |
getLightsProfileTexts
DescriptionDefinitiongetLightsProfileTexts()Code
984 | function SettingsModel:getLightsProfileTexts() |
985 | return self.fourStateTexts |
986 | end |
getLODDistanceTexts
DescriptionDefinitiongetLODDistanceTexts()Code
1008 | function SettingsModel:getLODDistanceTexts() |
1009 | return self.perentageTexts |
1010 | end |
getMaxMirrorsTexts
DescriptionDefinitiongetMaxMirrorsTexts()Code
1032 | function SettingsModel:getMaxMirrorsTexts() |
1033 | return self.maxMirrorsTexts |
1034 | end |
getMaxTireTracksTexts
DescriptionDefinitiongetMaxTireTracksTexts()Code
1026 | function SettingsModel:getMaxTireTracksTexts() |
1027 | return self.tireTracksTexts |
1028 | end |
getMouseSensitivityValue
DescriptionDefinitiongetMouseSensitivityValue()Code
803 | function SettingsModel:getMouseSensitivityValue(axisIndex) |
804 | local settings = self.deviceSettings[self.currentDevice] |
805 | return settings.mouseSensitivity.current |
806 | end |
getMPLanguageTexts
DescriptionDefinitiongetMPLanguageTexts()Code
889 | function SettingsModel:getMPLanguageTexts() |
890 | return self.mpLanguageTexts |
891 | end |
getMSAATexts
DescriptionDefinitiongetMSAATexts()Code
942 | function SettingsModel:getMSAATexts() |
943 | return self.msaaTexts |
944 | end |
getNumDevices
DescriptionDefinitiongetNumDevices()Code
623 | function SettingsModel:getNumDevices() |
624 | return #self.deviceSettings |
625 | end |
getObjectDrawDistanceTexts
DescriptionDefinitiongetObjectDrawDistanceTexts()Code
996 | function SettingsModel:getObjectDrawDistanceTexts() |
997 | return self.perentageTexts |
998 | end |
getPerformanceClassTexts
DescriptionDefinitiongetPerformanceClassTexts()Code
913 | function 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 |
933 | end |
getResolutionScaleTexts
DescriptionDefinitiongetResolutionScaleTexts()Code
1103 | function SettingsModel:getResolutionScaleTexts() |
1104 | return self.resolutionScaleTexts |
1105 | end |
getResolutionTexts
DescriptionDefinitiongetResolutionTexts()Code
883 | function SettingsModel:getResolutionTexts() |
884 | return self.resolutionTexts |
885 | end |
getSensitivityTexts
DescriptionDefinitiongetSensitivityTexts()Code
603 | function SettingsModel:getSensitivityTexts() |
604 | return self.sensitivityTexts |
605 | end |
getShaderQualityTexts
DescriptionDefinitiongetShaderQualityTexts()Code
954 | function SettingsModel:getShaderQualityTexts() |
955 | return self.fourStateTexts |
956 | end |
getShadowMapFilteringTexts
DescriptionDefinitiongetShadowMapFilteringTexts()Code
972 | function SettingsModel:getShadowMapFilteringTexts() |
973 | return self.lowHighTexts |
974 | end |
getShadowMapLightsTexts
DescriptionDefinitiongetShadowMapLightsTexts()Code
990 | function SettingsModel:getShadowMapLightsTexts() |
991 | return self.shadowMapMaxLightsTexts |
992 | end |
getShadowQualityTexts
DescriptionDefinitiongetShadowQualityTexts()Code
948 | function SettingsModel:getShadowQualityTexts() |
949 | return self.shadowQualityTexts |
950 | end |
getTerraingQualityTexts
DescriptionDefinitiongetTerraingQualityTexts()Code
978 | function SettingsModel:getTerraingQualityTexts() |
979 | return self.lowHighTexts |
980 | end |
getTerrainLODDistanceTexts
DescriptionDefinitiongetTerrainLODDistanceTexts()Code
1014 | function SettingsModel:getTerrainLODDistanceTexts() |
1015 | return self.perentageTexts |
1016 | end |
getTextureFilteringTexts
DescriptionDefinitiongetTextureFilteringTexts()Code
966 | function SettingsModel:getTextureFilteringTexts() |
967 | return self.textureFilteringTexts |
968 | end |
getTextureResolutionTexts
DescriptionDefinitiongetTextureResolutionTexts()Code
960 | function SettingsModel:getTextureResolutionTexts() |
961 | return self.lowHighTexts |
962 | 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 |
302 | function 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 |
310 | end |
getVolumeMeshTessalationTexts
DescriptionDefinitiongetVolumeMeshTessalationTexts()Code
1020 | function SettingsModel:getVolumeMeshTessalationTexts() |
1021 | return self.perentageTexts |
1022 | 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 |
354 | function 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() |
362 | end |
hasDeviceChanges
DescriptionDefinitionhasDeviceChanges()Code
684 | function 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 |
707 | end |
initDeviceSettings
DescriptionDefinitioninitDeviceSettings()Code
649 | function 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 |
680 | end |
initialize
DescriptionInitialize model. Read current configuration settings and populate valid display and configuration option values.Definition
initialize()Code
186 | function SettingsModel:initialize() |
187 | self:createControlDisplayValues() |
188 | self:addManagedSettings() |
189 | 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 |
367 | function 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() |
375 | 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 |
102 | function 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 |
181 | end |
nextDevice
DescriptionDefinitionnextDevice()Code
629 | function SettingsModel:nextDevice() |
630 | self.currentDevice = self.currentDevice + 1 |
631 | if self.currentDevice > #self.deviceSettings then |
632 | self.currentDevice = 1 |
633 | end |
634 | 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
322 | function 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 |
327 | end |
refreshChangedValue
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
refreshChangedValue()Code
333 | function SettingsModel:refreshChangedValue() |
334 | for settingsKey, setting in pairs(self.settings) do |
335 | setting.changed = self.settingReaders[settingsKey](settingsKey) |
336 | end |
337 | end |
reset
DescriptionDefinitionreset()Code
341 | function 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() |
349 | end |
resetDeviceChanges
DescriptionDefinitionresetDeviceChanges()Code
746 | function 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 |
758 | 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
402 | function 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 |
415 | end |
saveDeviceChanges
DescriptionDefinitionsaveDeviceChanges()Code
711 | function 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 |
742 | end |
setConsolePerformanceSetting
DescriptionDefinitionsetConsolePerformanceSetting()Code
1165 | function 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) |
1170 | end |
setConsoleResolution
DescriptionDefinitionsetConsoleResolution()Code
840 | function 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) |
848 | end |
setDeviceDeadzoneValue
DescriptionDefinitionsetDeviceDeadzoneValue()Code
762 | function SettingsModel:setDeviceDeadzoneValue(axisIndex, value) |
763 | local settings = self.deviceSettings[self.currentDevice] |
764 | if settings ~= nil then |
765 | settings.deadzones[axisIndex].current = value |
766 | end |
767 | end |
setDeviceSensitivityValue
DescriptionDefinitionsetDeviceSensitivityValue()Code
771 | function SettingsModel:setDeviceSensitivityValue(axisIndex, value) |
772 | local settings = self.deviceSettings[self.currentDevice] |
773 | if settings ~= nil then |
774 | settings.sensitivities[axisIndex].current = value |
775 | end |
776 | end |
setMouseSensitivity
DescriptionDefinitionsetMouseSensitivity()Code
780 | function SettingsModel:setMouseSensitivity(value) |
781 | local settings = self.deviceSettings[self.currentDevice] |
782 | if settings ~= nil then |
783 | settings.mouseSensitivity.current = value |
784 | end |
785 | end |
setSettingsFileHandle
DescriptionSet the settings file handle when it changes (e.g. possible in the gamepad sign-in process).Definition
setSettingsFileHandle()Code
314 | function SettingsModel:setSettingsFileHandle(settingsFileHandle) |
315 | self.settingsFileHandle = settingsFileHandle |
316 | 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 |
294 | function SettingsModel:setValue(settingKey, value) |
295 | self.settings[settingKey].changed = value |
296 | end |