diff options
Diffstat (limited to 'client/global.gd')
-rw-r--r-- | client/global.gd | 81 |
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 |