aboutsummaryrefslogtreecommitdiff
path: root/client/global.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/global.gd')
-rw-r--r--client/global.gd142
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)