aboutsummaryrefslogtreecommitdiff
path: root/client/global.gd
diff options
context:
space:
mode:
authortpart <tpart120@proton.me>2024-08-31 13:20:11 +0200
committertpart <tpart120@proton.me>2024-08-31 13:20:11 +0200
commit260b29c9f5c010c67fbf0b38b0aac859effb46f1 (patch)
treeeaa9efdcf52ba59dab7742a78acb8a3c36bb1751 /client/global.gd
parentd765bd2fc2cc303bf14699f32d93be8f448c4bfd (diff)
downloadhurrycurry-260b29c9f5c010c67fbf0b38b0aac859effb46f1.tar
hurrycurry-260b29c9f5c010c67fbf0b38b0aac859effb46f1.tar.bz2
hurrycurry-260b29c9f5c010c67fbf0b38b0aac859effb46f1.tar.zst
Add settings categories
Diffstat (limited to 'client/global.gd')
-rw-r--r--client/global.gd81
1 files changed, 47 insertions, 34 deletions
diff --git a/client/global.gd b/client/global.gd
index 9521eed7..6d261814 100644
--- a/client/global.gd
+++ b/client/global.gd
@@ -43,35 +43,47 @@ var languages := language_array()
var using_joypad := false
var using_touch := false
-var default_settings := {
- "language": DropdownSetting.new(tr("Language"), 0, languages.map(func(e): return e[1])),
- "master_volume": RangeSetting.new(tr("Master Volume"), 0, -30, 0),
- "music_volume": RangeSetting.new(tr("Music Volume"), 0, -30, 0),
- "sfx_volume": RangeSetting.new(tr("SFX Volume"), 0, -30, 0),
- "fullscreen": DropdownSetting.new(tr("Fullscreen"), 0, [tr("Keep"), tr("Always"), tr("Never")]),
- "touch_controls": DropdownSetting.new(tr("Enable touch screen controls"), 0, [tr("Automatic"), tr("Enabled"), tr("Disabled")]),
- "interpolate_camera_rotation": ToggleSetting.new(tr("Smooth camera rotation"), true),
- "invert_camera": ToggleSetting.new(tr("Invert camera movement"), false),
- "usernames": ToggleSetting.new(tr("Show username tags"), true),
- "server_binary": TextSetting.new(tr("Server binary (leave empty to search PATH)"), "", tr("Enter path")),
- "server_data": TextSetting.new(tr("Server data directory (leave empty to auto-detect)"), "", tr("Enter path")),
- "ui_scale_mode": DropdownSetting.new(tr("UI scale mode"), 0, [tr("Resize"), tr("Disabled")]),
- "ui_scale_factor": RangeSetting.new(tr("UI scale factor"), 1. if not on_mobile() else 1.5, 0.5, 1.5, 3),
- "aa": DropdownSetting.new(tr("Anti-aliasing"), 2 if on_high_end() else 0, [tr("Disabled"), "FXAA", "MSAA 2x", "MSAA 4x"]),
- "ssao": ToggleSetting.new(tr("Ambient occlusion"), true if on_high_end() else false),
- "taa": ToggleSetting.new(tr("Temporal Anti-Aliasing"), false),
- "gi": DropdownSetting.new(tr("Global illumination"), 0, [tr("Disabled"), tr("SDFGI"), tr("Voxel GI")]),
- "shadows": ToggleSetting.new(tr("Enable shadows"), true if on_high_end() else false),
- "glow": ToggleSetting.new(tr("Enable glow"), true if on_high_end() else false),
- "debug_info": ToggleSetting.new(tr("Display debug info (Framerate, etc.)"), false),
- "grass_amount": RangeSetting.new(tr("3D grass amount per grass tile"), 16 if on_high_end() else 0, 0, 32, false),
- "lq_trees": ToggleSetting.new(tr("Low-poly trees"), false if on_high_end() else true),
- "setup_complete": ToggleSetting.new(tr("Initial setup complete. (Uncheck and restart to reenter)"), false),
- "tutorial_started": ToggleSetting.new(tr("Tutorial started"), false),
- "latch_boost": ToggleSetting.new(tr("Always extend boost to maximum duration"), true),
- "ui_blur": ToggleSetting.new(tr("Enable UI blur"), true)
-}
+var default_settings := [
+ SettingsCategory.new(tr("Gameplay"), "gameplay", {
+ "touch_controls": DropdownSetting.new(tr("Enable touch screen controls"), 0, [tr("Automatic"), tr("Enabled"), tr("Disabled")]),
+ "interpolate_camera_rotation": ToggleSetting.new(tr("Smooth camera rotation"), true),
+ "invert_camera": ToggleSetting.new(tr("Invert camera movement"), false),
+ "usernames": ToggleSetting.new(tr("Show username tags"), true),
+ "setup_complete": ToggleSetting.new(tr("Initial setup complete. (Uncheck and restart to reenter)"), false),
+ "tutorial_started": ToggleSetting.new(tr("Tutorial started"), false),
+ "latch_boost": ToggleSetting.new(tr("Always extend boost to maximum duration"), true),
+ }),
+ SettingsCategory.new(tr("User interface"), "ui", {
+ "language": DropdownSetting.new(tr("Language"), 0, languages.map(func(e): return e[1])),
+ "ui_scale_mode": DropdownSetting.new(tr("UI scale mode"), 0, [tr("Resize"), tr("Disabled")]),
+ "ui_scale_factor": RangeSetting.new(tr("UI scale factor"), 1. if not on_mobile() else 1.5, 0.5, 1.5, 3),
+ }),
+ SettingsCategory.new(tr("Graphics"), "graphics", {
+ "fullscreen": DropdownSetting.new(tr("Fullscreen"), 0, [tr("Keep"), tr("Always"), tr("Never")]),
+ "aa": DropdownSetting.new(tr("Anti-aliasing"), 2 if on_high_end() else 0, [tr("Disabled"), "FXAA", "MSAA 2x", "MSAA 4x"]),
+ "ssao": ToggleSetting.new(tr("Ambient occlusion"), true if on_high_end() else false),
+ "taa": ToggleSetting.new(tr("Temporal Anti-Aliasing"), false),
+ "gi": DropdownSetting.new(tr("Global illumination"), 0, [tr("Disabled"), tr("SDFGI"), tr("Voxel GI")]),
+ "shadows": ToggleSetting.new(tr("Enable shadows"), true if on_high_end() else false),
+ "glow": ToggleSetting.new(tr("Enable glow"), true if on_high_end() else false),
+ "grass_amount": RangeSetting.new(tr("3D grass amount per grass tile"), 16 if on_high_end() else 0, 0, 32, false),
+ "lq_trees": ToggleSetting.new(tr("Low-poly trees"), false if on_high_end() else true),
+ "ui_blur": ToggleSetting.new(tr("Enable UI blur"), true)
+ }),
+ SettingsCategory.new(tr("Audio"), "audio", {
+ "master_volume": RangeSetting.new(tr("Master Volume"), 0, -30, 0),
+ "music_volume": RangeSetting.new(tr("Music Volume"), 0, -30, 0),
+ "sfx_volume": RangeSetting.new(tr("SFX Volume"), 0, -30, 0),
+ }),
+ SettingsCategory.new(tr("Other"), "other", {
+ "server_binary": TextSetting.new(tr("Server binary (leave empty to search PATH)"), "", tr("Enter path")),
+ "server_data": TextSetting.new(tr("Server data directory (leave empty to auto-detect)"), "", tr("Enter path")),
+ "debug_info": ToggleSetting.new(tr("Display debug info (Framerate, etc.)"), false),
+ })
+ ]
+# Profile and settings are stored in a Dictionary[String, GameSetting]
+# Unlike the default settings, the settings dictionary is not split into categories.
var profile: Dictionary
var settings: Dictionary
@@ -262,7 +274,10 @@ func load_dict(path: String, default: Dictionary) -> Dictionary:
return saved_dict
func load_settings(path: String):
- settings = default_settings
+ for category: SettingsCategory in default_settings:
+ for k: String in category.settings.keys():
+ settings[k] = category.settings[k]
+
if not FileAccess.file_exists(path):
print("Skip settings load")
return
@@ -270,11 +285,9 @@ func load_settings(path: String):
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) and typeof(setting.get_value()) == typeof(saved_dict[k]):
- setting.set_value(saved_dict[k])
- settings[k] = setting
+ for k in settings.keys():
+ if saved_dict.has(k) and typeof(settings[k].get_value()) == typeof(saved_dict[k]):
+ settings[k].set_value(saved_dict[k])
save_settings() # Save updated keys