diff options
Diffstat (limited to 'client/settings.gd')
-rw-r--r-- | client/settings.gd | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/client/settings.gd b/client/settings.gd new file mode 100644 index 00000000..1c03ca5a --- /dev/null +++ b/client/settings.gd @@ -0,0 +1,176 @@ +# Hurry Curry! - a game about cooking +# Copyright 2024 metamuffin +# Copyright 2024 tpart +# Copyright 2024 nokoe +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, version 3 of the License only. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. +# +extends Node +class_name Settings + +static func get_root(): + return SettingsRoot.new([ + SettingsCategory.new("gameplay", [ + ToggleSetting.new("interpolate_camera_rotation", false), + ToggleSetting.new("invert_camera", false), + ToggleSetting.new("usernames", true), + ToggleSetting.new("setup_complete", false), + ToggleSetting.new("tutorial_started", false), + ToggleSetting.new("latch_boost", true), + ]), + SettingsCategory.new("graphics", [ + PresetRow.new("preset", { + "low": { + "ui_blur": true, + "aa": 0, + "ssao": false, + "taa": false, + "shadows": false, + "glow": false, + "grass_amount": 0, + "lq_trees": true + }, + "medium": { + "ui_blur": true, + "aa": 1, + "ssao": false, + "taa": false, + "shadows": true, + "glow": false, + "grass_amount": 0, + "lq_trees": false + }, + "high": { + "ui_blur": true, + "aa": 2, + "ssao": true, + "taa": false, + "shadows": true, + "glow": true, + "grass_amount": 16, + "lq_trees": false + } + }), + DropdownSetting.new("fullscreen", "keep", ["keep", "always", "never"]), + DropdownSetting.new("aa", "ms2x" if Global.on_high_end() else "disabled", ["disabled", "fx", "ms2x", "ms4x"]), + ToggleSetting.new("ssao", true if Global.on_high_end() else false), + ToggleSetting.new("taa", false), + DropdownSetting.new("gi", "disabled", ["disabled", "sdfgi", "voxelgi"]), + ToggleSetting.new("shadows", true if Global.on_high_end() else false), + ToggleSetting.new("glow", true if Global.on_high_end() else false), + RangeSetting.new("grass_amount", 16 if Global.on_high_end() else 0, 0, 32, false), + ToggleSetting.new("lq_trees", false if Global.on_high_end() else true), + ToggleSetting.new("debug_info", false), + ToggleSetting.new("ui_blur", true) + ]), + SettingsCategory.new("audio", [ + RangeSetting.new("master_volume", 0, -30, 0), + RangeSetting.new("music_volume", 0, -30, 0), + RangeSetting.new("sfx_volume", 0, -30, 0), + ]), + SettingsCategory.new("ui", [ + DropdownSetting.new("touch_controls", 0, ["automatic", "enabled", "disabled"]), + DropdownSetting.new("language", "system", Global.languages.map(func(e): return e[1])), + DropdownSetting.new("ui_scale_mode", "resize", ["resize", "disabled"]), + RangeSetting.new("ui_scale_factor", 1. if not Global.on_mobile() else 1.5, 0.5, 1.5, 3), + ]), + SettingsCategory.new("input", + InputManager.input_map_to_settings(InputManager.default_input_map) + ), + SettingsCategory.new("other", [ + TextSetting.new("server_binary", ""), + TextSetting.new("server_data", ""), + ]) + ]) + +static func hook_changed(key: String, callable): + change_hooks[key] = callable + +static var change_hooks = { + "graphics.aa": h_aa, + "graphics.taa": h_taa, +} + +static func h_aa(mode): + match mode: + "disabled": + Global.get_viewport().msaa_2d = Viewport.MSAA_DISABLED + Global.get_viewport().msaa_3d = Viewport.MSAA_DISABLED + Global.get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED + "fx": + Global.get_viewport().msaa_2d = Viewport.MSAA_DISABLED + Global.get_viewport().msaa_3d = Viewport.MSAA_DISABLED + Global.get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_FXAA + "ms2x": + Global.get_viewport().msaa_2d = Viewport.MSAA_2X + Global.get_viewport().msaa_3d = Viewport.MSAA_2X + Global.get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED + "ms4x": + Global.get_viewport().msaa_2d = Viewport.MSAA_4X + Global.get_viewport().msaa_3d = Viewport.MSAA_4X + Global.get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED + +static func h_taa(enabled): + Global.get_viewport().use_taa = enabled + +# func apply_settings(): +# update_fullscreen() +# update_language() + +# # Temporal Anti-aliasing + +# # UI scale mode +# match get_setting("ui_scale_mode"): +# 0: +# get_tree().root.content_scale_mode = Window.CONTENT_SCALE_MODE_CANVAS_ITEMS +# 1: +# get_tree().root.content_scale_mode = Window.CONTENT_SCALE_MODE_DISABLED + +# # UI scale factor +# get_tree().root.content_scale_factor = get_setting("ui_scale_factor") + +# # Hints +# if not get_setting("tutorial_started"): +# for k in profile["hints"].keys(): +# set_hint(k, false) + +# # Sets all volumes +# Sound.set_volume(0, get_setting("master_volume")) +# Sound.set_volume(1, get_setting("music_volume")) +# Sound.set_volume(2, get_setting("sfx_volume")) + +# # Touch controls +# match get_setting("touch_controls"): +# # 0: Automatically adjusted +# 1: # Enabled +# using_touch = true +# 2: # Disabled +# using_touch = false +# using_touch_change.emit() + +# # Input settings +# InputManager.apply_input_map(InputManager.settings_dictionary_to_input_map(get_category_settings("input"))) + +# settings_changed.emit() + +# func update_language(): +# var language = languages[get_setting("language")][0] +# if language == "system": language = OS.get_locale_language() +# TranslationServer.set_locale(language) + +# func update_fullscreen(): +# match get_setting("fullscreen"): +# 0: pass +# 1: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) +# 2: if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN: +# DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) |