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