diff options
Diffstat (limited to 'client/global.gd')
-rw-r--r-- | client/global.gd | 142 |
1 files changed, 44 insertions, 98 deletions
diff --git a/client/global.gd b/client/global.gd index e756fcfe..e5ec91ee 100644 --- a/client/global.gd +++ b/client/global.gd @@ -33,96 +33,21 @@ var default_profile := { "last_server_url": "" } +var languages := [tr("System default"), "en", "de"] + var default_settings := { - "language": { - "type": "dropdown", - "options": [tr("System default"), "en", "de"], - "value": 0, - "description": tr("Language"), - }, - "fullscreen": { - "type": "toggle", - "value": false, - "description": tr("Fullscreen") - }, - "interpolate_camera_rotation": { - "type": "toggle", - "value": true, - "description": tr("Interpolate the camera rotation") - }, - "invert_camera": { - "type": "toggle", - "value": false, - "description": tr("Invert camera movement") - }, - "server_binary": { - "type": "line", - "value": "", - "description": tr("Server binary (leave empty to search PATH)") - }, - "server_data": { - "type": "line", - "value": "", - "description": tr("Server data directory (leave empty to auto-detect)") - }, - "graphics_preset": { - "type": "dropdown_preset", - "options": [tr("Low"), tr("Medium"), tr("High"), tr("Ultra")], - "value": 1, - "description": tr("Graphics preset"), - "apply": "GRAPHICS_PRESETS" - }, - "voxel_gi": { - "type": "toggle", - "value": false, - "description": tr("Use VoxelGI (Blocks the game on map update, looks good)") - }, - "sdfgi": { - "type": "toggle", - "value": false, - "description": tr("Use SDFGI (Doesn't block the game, looks worse)") - }, - "grass_amount": { - "type": "range", - "value": 16, - "min": 0, - "max": 32, - "description": tr("3D grass amount per grass tile") - }, - "setup_complete": { - "type": "toggle", - "value": false, - "description": tr("Initial setup complete. (Uncheck and restart to reenter)") - } + "language": DropdownSetting.new(tr("Language"), 0, languages), + "fullscreen": ToggleSetting.new(tr("Fullscreen"), false), + "interpolate_camera_rotation": ToggleSetting.new(tr("Interpolate the camera rotation"), true), + "invert_camera": ToggleSetting.new(tr("Invert camera movement"), false), + "server_binary": TextSetting.new(tr("Server binary (leave empty to search PATH)"), ""), + "server_data": TextSetting.new(tr("Server data directory (leave empty to auto-detect)"), ""), + "voxel_gi": ToggleSetting.new(tr("Use VoxelGI (Blocks the game on map update but is more accurate)"), false), + "sdfgi": ToggleSetting.new(tr("Use SDFGI (Doesn't block the game but produces more artifacts)"), false), + "grass_amount": RangeSetting.new(tr("3D grass amount per grass tile"), 16, 0, 32), + "setup_complete": ToggleSetting.new(tr("Initial setup complete. (Uncheck and restart to reenter)"), false) } -const GRAPHICS_PRESETS = [ - # Low: - { - "voxel_gi": false, - "sdfgi": false, - "grass_amount": 0 - }, - # Medium: - { - "voxel_gi": false, - "sdfgi": false, - "grass_amount": 16 - }, - # High: - { - "voxel_gi": false, - "sdfgi": true, - "grass_amount": 16 - }, - # Ultra: - { - "voxel_gi": true, - "sdfgi": false, - "grass_amount": 16 - } -] - var profile: Dictionary var settings: Dictionary @@ -135,20 +60,20 @@ var fade_next := false # Set true when transitioning from another scene (fade in func _init(): profile = load_dict("user://profile", default_profile) - settings = load_dict("user://settings", default_settings) + load_settings("user://settings") update_fullscreen() update_language() -func _input(event): +func _input(_event): if Input.is_action_just_pressed("fullscreen"): Global.set_setting("fullscreen", not Global.get_setting("fullscreen")) save_settings() update_fullscreen() func update_language(): - var lang_idx = get_setting("language") - var lang = settings["language"]["options"][lang_idx] - + var lang_idx: int = get_setting("language") + var lang = languages[lang_idx] + if lang_idx != 0: # 0 is system language TranslationServer.set_locale(lang) else: @@ -164,7 +89,13 @@ func save_profile(): save_dict("user://profile", profile) func save_settings(): - save_dict("user://settings", settings) + for v in settings.values(): + v.fetch_setting() + var dict := {} + for k in settings.keys(): + var setting: GameSetting = settings[k] + dict[k] = setting.get_value() + save_dict("user://settings", dict) func save_dict(path: String, dict: Dictionary): var f = FileAccess.open(path, FileAccess.WRITE) @@ -177,19 +108,34 @@ func load_dict(path: String, default: Dictionary) -> Dictionary: return default var f = FileAccess.open(path, FileAccess.READ) var saved_dict = f.get_var() - + if saved_dict != null and saved_dict is Dictionary: add_missing_keys(saved_dict, default) print("Loaded dict: ", saved_dict) return saved_dict +func load_settings(path: String): + settings = default_settings + if not FileAccess.file_exists(path): + print("Skip settings load") + return + var f = FileAccess.open(path, FileAccess.READ) + var saved_dict = f.get_var() + + if saved_dict != null and saved_dict is Dictionary: + for k in default_settings.keys(): + var setting: GameSetting = default_settings[k] + if saved_dict.has(k): + setting.set_value(saved_dict[k]) + settings[k] = setting + func on_vulkan() -> bool: return ProjectSettings.get_setting("rendering/rendering_device/driver") == "vulkan" func focus_first_button(node: Node) -> bool: focus_auto_changed = true - + if node is Button: node.grab_focus() print("Node %s (%s) was selected for focus" % [node.name, node]) @@ -217,7 +163,7 @@ func add_missing_keys(dict: Dictionary, reference: Dictionary): func get_setting(key: String): if settings.has(key): - return settings[key]["value"] + return settings[key].get_value() else: push_error("Tried to access setting \"%s\", which does not exist (missing key)" % key) return null @@ -225,5 +171,5 @@ func get_setting(key: String): func set_setting(key: String, value): if !settings.has(key): push_error("Tried to set setting \"%s\", which does not yet exist (missing key)" % key) - settings[key] = {} - settings[key]["value"] = value + return + settings[key].set_value(value) |