summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/global.gd64
-rw-r--r--client/settings.gd114
2 files changed, 56 insertions, 122 deletions
diff --git a/client/global.gd b/client/global.gd
index e85bf697..6d41dc31 100644
--- a/client/global.gd
+++ b/client/global.gd
@@ -38,7 +38,7 @@ var default_profile := {
"has_seen_join_while_running": false
}
}
-var languages := language_array()
+
var using_joypad := false
var using_touch := false
@@ -136,20 +136,21 @@ func on_vulkan() -> bool:
return ProjectSettings.get_setting("rendering/rendering_device/driver") == "vulkan"
func get_setting(key: String):
- if !Global.settings.has(key):
+ if !settings.has(key):
push_error("Tried to access setting \"%s\", which does not exist (missing key)" % key)
return null
- return Global.settings[key]
+ return settings[key]
func set_setting_unchecked(key: String, value):
- if value is Array:
- Global.settings[key] = value.duplicate(true)
- else:
- Global.settings[key] = value
- Global.save_settings()
+ value = value.duplicate(true) if value is Array else value
+ if key in settings and settings[key] == value: return
+ settings[key] = value
+ if Settings.change_hooks_display.get(key) != null: Settings.change_hooks_display.get(key).call(value)
+ if Settings.change_hooks_apply.get(key) != null: Settings.change_hooks_apply.get(key).call(value)
+ save_settings()
func set_setting(key: String, value):
- if !Global.settings.has(key):
+ if !settings.has(key):
push_error("Tried to set setting \"%s\", which does not yet exist (missing key)" % key)
return
else: set_setting_unchecked(key, value)
@@ -208,43 +209,8 @@ func find_menu(node: Node) -> Menu:
if node is Menu: return node
else: return find_menu(node.get_parent())
-const NATIVE_LANGUAGE_NAMES = {
- "en": "English",
- "de": "Deutsch",
- "fr": "Français",
- "es": "Español",
- "eu": "euskara",
- "ja": "日本語",
- "he": "עִברִית",
- "tr": "Türkçe",
- "fi": "suomen",
- "ar": "العربية",
- "zh_Hans": "中文 (简化字)",
- "zh_Hant": "中文 (繁體字)",
- "pl": "Polski",
- "pt": "Português",
-}
-
-func language_display(l: String): return "%s (%s)" % [NATIVE_LANGUAGE_NAMES[l], l]
-func language_array() -> Array:
- var lang: Array = [["system", tr("System default")]]
- var to_order: Array = []
- for l in TranslationServer.get_loaded_locales():
- to_order.append([l, language_display(l)])
- to_order.append(["en", language_display("en")])
- to_order = sort_language_array(to_order)
- for i in to_order:
- lang.append(i)
- return lang
-
-func sort_language_array(lang: Array) -> Array:
- var sorting_array: Array = []
- var sorted_lang: Array = []
- for i in lang.size():
- sorting_array.append(lang[i][0])
- sorting_array.sort()
- for shorthand in sorting_array:
- for arr in lang:
- if arr[0] == shorthand:
- sorted_lang.append(arr)
- return sorted_lang
+func language_list():
+ var a = TranslationServer.get_loaded_locales()
+ a.sort()
+ a.insert(0, "system")
+ return a
diff --git a/client/settings.gd b/client/settings.gd
index cb8f9cf0..ade51262 100644
--- a/client/settings.gd
+++ b/client/settings.gd
@@ -30,36 +30,9 @@ static func get_root():
]),
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
- }
+ "low": {"ui_blur": true, "aa": "disabled", "ssao": false, "taa": false, "shadows": false, "glow": false, "grass_amount": 0, "lq_trees": true},
+ "medium": {"ui_blur": true, "aa": "fx", "ssao": false, "taa": false, "shadows": true, "glow": false, "grass_amount": 0, "lq_trees": false},
+ "high": {"ui_blur": true, "aa": "ms2x", "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"]),
@@ -80,7 +53,7 @@ static func get_root():
]),
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("language", "system", Global.language_list()),
DropdownSetting.new("scale_mode", "resize", ["resize", "disabled"]),
RangeSetting.new("scale_factor", 1. if not Global.on_mobile() else 1.5, 0.5, 1.5, 3),
]),
@@ -94,16 +67,23 @@ static func get_root():
])
static func hook_changed(key: String, callable: Callable):
- change_hooks[key] = callable
+ change_hooks_display[key] = callable
static func hook_changed_init(key: String, callable: Callable):
hook_changed(key, callable)
callable.call(Global.get_setting(key))
-static var change_hooks = {
+static var change_hooks_display = {}
+static var change_hooks_apply = {
"graphics.aa": h_aa,
"graphics.taa": h_taa,
+ "graphics.fullscreen": h_fullscreen,
"ui.scale_mode": h_scale_mode,
+ "ui.scale_factor": h_scale_factor,
+ "ui.language": h_language,
+ "audio.master_volume": h_volume_master,
+ "audio.music_volume": h_volume_music,
+ "audio.sfx_volume": h_volume_sfx,
}
static func h_aa(mode):
@@ -128,52 +108,40 @@ static func h_aa(mode):
static func h_taa(enabled):
Global.get_viewport().use_taa = enabled
-static func h_scale_mode(mode: int):
+static func h_scale_mode(mode: String):
match mode:
- 0:
- Global.get_tree().root.content_scale_mode = Window.CONTENT_SCALE_MODE_CANVAS_ITEMS
- 1:
- Global.get_tree().root.content_scale_mode = Window.CONTENT_SCALE_MODE_DISABLED
+ "scale": Global.get_tree().root.content_scale_mode = Window.CONTENT_SCALE_MODE_CANVAS_ITEMS
+ "disabled": Global.get_tree().root.content_scale_mode = Window.CONTENT_SCALE_MODE_DISABLED
-# func apply_settings():
-# update_fullscreen()
-# update_language()
+static func h_scale_factor(value: float):
+ Global.get_tree().root.content_scale_factor = value
-# # UI scale factor
-# get_tree().root.content_scale_factor = get_setting("ui_scale_factor")
+static func h_volume_master(value: float): Sound.set_volume(0, value)
+static func h_volume_music(value: float): Sound.set_volume(1, value)
+static func h_volume_sfx(value: float): Sound.set_volume(2, value)
-# # Hints
+static func h_touch(mode: String):
+ match mode:
+ "enabled": Global.using_touch = true
+ "disabled": Global.using_touch = false
+ Global.using_touch_change.emit()
+
+static func h_language(language: String):
+ print("STELANG ", language)
+ if language == "system": language = OS.get_locale_language()
+ TranslationServer.set_locale(language)
+
+static func h_fullscreen(mode: String):
+ match mode:
+ "keep": pass
+ "always": DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
+ "never": if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN:
+ DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
+
+# TODO whatever this does
# 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
+# TODO update input map for *all* input with a single hook
# 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)