diff options
author | metamuffin <metamuffin@disroot.org> | 2024-09-06 23:43:42 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-09-06 23:43:42 +0200 |
commit | 06baf4555dc1c7a64bed7d059fbe34c99e9638fb (patch) | |
tree | 923d343033a8c1aa28a8d6c834c0332ddd2201ab | |
parent | d7fefc69c0a8a4b70d3553125af5f5cabdba6b3b (diff) | |
download | hurrycurry-06baf4555dc1c7a64bed7d059fbe34c99e9638fb.tar hurrycurry-06baf4555dc1c7a64bed7d059fbe34c99e9638fb.tar.bz2 hurrycurry-06baf4555dc1c7a64bed7d059fbe34c99e9638fb.tar.zst |
refactor settings again (part 1)
47 files changed, 644 insertions, 671 deletions
diff --git a/client/global.gd b/client/global.gd index d62f5413..e5ae0ed6 100644 --- a/client/global.gd +++ b/client/global.gd @@ -19,7 +19,6 @@ class_name G extends Node -signal settings_changed() signal using_joypad_change(using: bool) signal using_touch_change(using: bool) @@ -43,86 +42,12 @@ var languages := language_array() var using_joypad := false var using_touch := false -@onready 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"), false), - "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("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) - }, [ - Preset.new(tr("Graphics"), { - tr("Low"): { - "ui_blur": true, - "aa": 0, - "ssao": false, - "taa": false, - "shadows": false, - "glow": false, - "grass_amount": 0, - "lq_trees": true - }, - tr("Medium"): { - "ui_blur": true, - "aa": 1, - "ssao": false, - "taa": false, - "shadows": true, - "glow": false, - "grass_amount": 0, - "lq_trees": false - }, - tr("High"): { - "ui_blur": true, - "aa": 2, - "ssao": true, - "taa": false, - "shadows": true, - "glow": true, - "grass_amount": 16, - "lq_trees": false - } - }) - ]), - 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("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("Controls"), "input", - InputManager.input_map_to_settings_dictionary(InputManager.default_input_map) - ), - 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. +# profile and settings are stored in a Dictionary[String, Any] var profile: Dictionary var settings: Dictionary +var settings_tree: GameSetting + var server_url = "" var error_message = "" @@ -130,29 +55,22 @@ var focused_node: Control func _ready(): profile = load_dict("user://profile", default_profile) + settings_tree = Settings.get_root() load_settings("user://settings") - apply_settings() get_viewport().gui_focus_changed.connect(Sound.play_hover_maybe) get_viewport().gui_focus_changed.connect(func(node): focused_node = node) func _input(event): if Input.is_action_just_pressed("fullscreen"): - match Global.get_setting("fullscreen"): - 0: - # Keep setting + match Global.get_setting("graphics.fullscreen"): + "keep": if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) else: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) - 1: - # Always - set_setting("fullscreen", 2) # Set to never - update_fullscreen() - 2: - # Never - set_setting("fullscreen", 1) # Set to always - update_fullscreen() + "always": set_setting("graphics.fullscreen", "never") + "never": set_setting("graphics.fullscreen", "always") # Update using_joypad variable if event is InputEventMouseButton or event is InputEventKey: @@ -165,7 +83,7 @@ func _input(event): using_joypad_change.emit(using_joypad) # Update using_touch variable - if get_setting("touch_controls") == 0: # Only if set to automatic + if get_setting("ui.touch_controls") == 0: # Only if set to automatic if event is InputEventScreenTouch or event is InputEventScreenDrag: if not using_touch: using_touch = true @@ -175,89 +93,11 @@ func _input(event): using_touch = false using_touch_change.emit(using_touch) -func apply_settings(): - update_fullscreen() - update_language() - - # Anti-aliasing - match get_setting("aa"): - 0: - get_viewport().msaa_2d = Viewport.MSAA_DISABLED - get_viewport().msaa_3d = Viewport.MSAA_DISABLED - get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED - 1: - get_viewport().msaa_2d = Viewport.MSAA_DISABLED - get_viewport().msaa_3d = Viewport.MSAA_DISABLED - get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_FXAA - 2: - get_viewport().msaa_2d = Viewport.MSAA_2X - get_viewport().msaa_3d = Viewport.MSAA_2X - get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED - 3: - get_viewport().msaa_2d = Viewport.MSAA_4X - get_viewport().msaa_3d = Viewport.MSAA_4X - get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED - - # Temporal Anti-aliasing - get_viewport().use_taa = get_setting("taa") - - # 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) - func save_profile(): save_dict("user://profile", profile) func save_settings(): - for v in settings.values(): - v.fetch_setting() - var dict := {} - for k in settings.keys(): - var setting: GameSetting = settings[k] - dict[k] = setting.get_value() - save_dict("user://settings", dict) + save_dict("user://settings", settings) func save_dict(path: String, dict: Dictionary): var f = FileAccess.open(path, FileAccess.WRITE) @@ -271,29 +111,17 @@ func load_dict(path: String, default: Dictionary) -> Dictionary: return default var f = FileAccess.open(path, FileAccess.READ) var saved_dict = f.get_var(true) - - if saved_dict != null and saved_dict is Dictionary: - add_missing_keys(saved_dict, default) - return saved_dict func load_settings(path: String): - for category: SettingsCategory in default_settings.duplicate(true): - for k: String in category.settings.keys(): - settings[k] = category.settings[k] - - if not FileAccess.file_exists(path): - print("Skip settings load") - return - var f = FileAccess.open(path, FileAccess.READ) - var saved_dict = f.get_var(true) - - if saved_dict != null and saved_dict is Dictionary: - 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 + if FileAccess.file_exists(path): + var f = FileAccess.open(path, FileAccess.READ) + settings = f.get_var(true) + else: + print("No settings file found.") + settings = {} + settings_tree.check() + save_settings() func on_mobile() -> bool: var os_name := OS.get_name() @@ -307,36 +135,25 @@ func on_high_end() -> bool: func on_vulkan() -> bool: return ProjectSettings.get_setting("rendering/rendering_device/driver") == "vulkan" -func add_missing_keys(dict: Dictionary, reference: Dictionary): - for k in reference.keys(): - if !dict.has(k): - dict[k] = reference[k] - else: - if dict[k] is Dictionary: - add_missing_keys(dict[k], reference[k]) - func get_setting(key: String): - if settings.has(key): - return settings[key].get_value() - else: + if !Global.settings.has(key): push_error("Tried to access setting \"%s\", which does not exist (missing key)" % key) return null + return Global.settings[key] -func get_category_settings(category_id: String): - for c: SettingsCategory in default_settings: - if c.id == category_id: - return c.settings - push_error("Category %s not found" % category_id) - return null +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() func set_setting(key: String, value): - if !settings.has(key): + if !Global.settings.has(key): push_error("Tried to set setting \"%s\", which does not yet exist (missing key)" % key) return - if get_setting(key) != value: - settings[key].set_value(value) - save_settings() - + else: set_setting_unchecked(key, value) + func get_profile(key: String): if profile.has(key): return profile[key] @@ -411,7 +228,7 @@ const NATIVE_LANGUAGE_NAMES = { 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 = [] + 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")]) @@ -420,9 +237,9 @@ func language_array() -> Array: lang.append(i) return lang -func sort_language_array(lang : Array) -> Array: - var sorting_array : Array = [] - var sorted_lang : Array = [] +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() diff --git a/client/makefile b/client/makefile index 2f17bee1..71a4fb38 100644 --- a/client/makefile +++ b/client/makefile @@ -37,4 +37,4 @@ po/locales.csv: $(LT) po/%.po: ../locale/%.ini $(LT) @mkdir -p po - $(LT) export-po $< $@ --remap-ids ../locale/en.ini + $(LT) export-po $< $@ diff --git a/client/map/auto_setup/environment_setup.gd b/client/map/auto_setup/environment_setup.gd index 3ce8add3..49f93ccb 100644 --- a/client/map/auto_setup/environment_setup.gd +++ b/client/map/auto_setup/environment_setup.gd @@ -22,12 +22,13 @@ func set_sky(sky_name: String): environment.sky.sky_material = load("res://map/environment/presets/%s_sky.tres" % sky_name) func _ready(): - apply_settings() - Global.settings_changed.connect(apply_settings) + pass + #Global.settings_changed.connect(apply_settings) -func apply_settings(): - environment.ssao_enabled = Global.get_setting("ssao") - environment.sdfgi_enabled = Global.get_setting("gi") == 1 and allow_sdfgi - environment.glow_enabled = Global.get_setting("glow") - if !Global.on_vulkan(): - environment.environment.tonemap_exposure = 0.5 +# TODO +#func apply_settings(): + #environment.ssao_enabled = Global.get_setting("graphics.ssao") + #environment.sdfgi_enabled = Global.get_setting("graphics.gi") == "sdfgi" and allow_sdfgi + #environment.glow_enabled = Global.get_setting("graphics.glow") + #if !Global.on_vulkan(): + #environment.environment.tonemap_exposure = 0.5 diff --git a/client/map/auto_setup/light_setup.gd b/client/map/auto_setup/light_setup.gd index 1e256dae..b42b3662 100644 --- a/client/map/auto_setup/light_setup.gd +++ b/client/map/auto_setup/light_setup.gd @@ -24,8 +24,8 @@ func _ready(): func apply_settings(): if completely_disable_light_if_shadows_disabled: - visible = Global.get_setting("shadows") - shadow_enabled = Global.get_setting("shadows") + visible = Global.get_setting("graphics.shadows") + shadow_enabled = Global.get_setting("graphics.shadows") func set_sky(sky_name: String): match sky_name: diff --git a/client/map/map.gd b/client/map/map.gd index 208665bf..fc3bd1bb 100644 --- a/client/map/map.gd +++ b/client/map/map.gd @@ -52,17 +52,18 @@ func clear_tile(pos: Vector2i): func _ready(): voxelgi_timer.connect("timeout", gi_bake) - Global.settings_changed.connect(func(): - # is not baked yet but setting is true - if Global.get_setting("gi") == 2 and not currently_baked: - gi_bake() - else: - currently_baked = false - voxelgi.data = null - ) + Settings.hook_changed("graphics.gi", apply_gi_setting) + +func apply_gi_setting(state): + if state == "voxelgi" and not currently_baked: + gi_bake() + else: + currently_baked = false + voxelgi.data = null + func gi_bake(): - if not Global.get_setting("gi") == 2: return + if not Global.get_setting("graphics.gi") == 2: return print("Map: Rebaking VoxelGI") currently_baked = true gi_bake_blocking() diff --git a/client/map/tiles/exterior_tree.gd b/client/map/tiles/exterior_tree.gd index edc08df3..9054cbaa 100644 --- a/client/map/tiles/exterior_tree.gd +++ b/client/map/tiles/exterior_tree.gd @@ -27,7 +27,7 @@ func _init(rename: String, _neighbors: Array): var trunk: Mesh = load("res://map/tiles/tree/trunk_%d.res" % tree) var leaves: Mesh = load("res://map/tiles/tree/leaves_%d_%s.res" % [ tree, - "lq" if Global.get_setting("lq_trees") else "hq" + "lq" if Global.get_setting("graphics.lq_trees") else "hq" ]) var trunk_instance: MeshInstance3D = MeshInstance3D.new() trunk_instance.mesh = trunk diff --git a/client/map/tiles/grass.gd b/client/map/tiles/grass.gd index b33642a3..4bd3587c 100644 --- a/client/map/tiles/grass.gd +++ b/client/map/tiles/grass.gd @@ -25,7 +25,7 @@ func _init(rename: String, _neighbors: Array): var random = RandomNumberGenerator.new() random.seed = rename.hash() - for _i in Global.get_setting("grass_amount"): + for _i in Global.get_setting("graphics.grass_amount"): var g: Node3D = GRASS_SIDE.instantiate() base_mesh.add_child(g) g.position = Vector3(random.randf_range(-.5, .5), 0, random.randf_range(-.5, .5)) diff --git a/client/map/tiles/light_tile.gd b/client/map/tiles/light_tile.gd index fac3ee39..947c8c8b 100644 --- a/client/map/tiles/light_tile.gd +++ b/client/map/tiles/light_tile.gd @@ -26,4 +26,4 @@ func _ready(): func update_shadows(): for l in lights: - l.shadow_enabled = Global.get_setting("shadows") + l.shadow_enabled = Global.get_setting("graphics.shadows") diff --git a/client/menu/blur_setup.gd b/client/menu/blur_setup.gd index 97729074..b5b5dde9 100644 --- a/client/menu/blur_setup.gd +++ b/client/menu/blur_setup.gd @@ -16,8 +16,8 @@ extends Control func _ready(): - update() - Global.settings_changed.connect(update) + update(Global.get_setting("ui.blur")) + Settings.hook_changed("ui.blur", update) -func update(): - material.set_shader_parameter("enable_blur", Global.get_setting("ui_blur")) +func update(state): + material.set_shader_parameter("enable_blur", state) diff --git a/client/menu/entry.gd b/client/menu/entry.gd index 5ca6dacb..456709ed 100644 --- a/client/menu/entry.gd +++ b/client/menu/entry.gd @@ -18,7 +18,7 @@ extends Menu func _ready(): super() - if not Global.get_setting("setup_complete"): + if not Global.get_setting("gameplay.setup_complete"): await submenu("res://menu/setup.tscn") else: await submenu("res://menu/main.tscn") diff --git a/client/menu/game.gd b/client/menu/game.gd index f50a43a6..a2eb858c 100644 --- a/client/menu/game.gd +++ b/client/menu/game.gd @@ -43,7 +43,7 @@ func _menu_cover(state): game.camera.update_disable_input() func _process(_delta): - if Global.get_setting("debug_info"): + if Global.get_setting("graphics.debug_info"): debug_label.show() debug_label.text = "%d FPS\nDriver: %s" % [Engine.get_frames_per_second(), ProjectSettings.get_setting("rendering/rendering_device/driver")] else: debug_label.hide() diff --git a/client/menu/main.tscn b/client/menu/main.tscn index 94726109..26decd2b 100644 --- a/client/menu/main.tscn +++ b/client/menu/main.tscn @@ -63,27 +63,27 @@ layout_mode = 2 [node name="play" type="Button" parent="side/margin/options/first"] layout_mode = 2 -text = "Play" +text = "c.menu.play" alignment = 0 [node name="change_character" type="Button" parent="side/margin/options/first"] layout_mode = 2 -text = "My Chef" +text = "c.menu.my_chef" alignment = 0 [node name="settings" type="Button" parent="side/margin/options/first"] layout_mode = 2 -text = "Settings" +text = "c.menu.settings" alignment = 0 [node name="credits" type="Button" parent="side/margin/options/first"] layout_mode = 2 -text = "Credits" +text = "c.menu.credits" alignment = 0 [node name="quit" type="Button" parent="side/margin/options/first"] layout_mode = 2 -text = "Quit" +text = "c.menu.quit" alignment = 0 [connection signal="pressed" from="side/margin/options/first/play" to="." method="_on_play_pressed"] diff --git a/client/menu/popup_message.gd b/client/menu/popup_message.gd index 90e86faa..1464e20c 100644 --- a/client/menu/popup_message.gd +++ b/client/menu/popup_message.gd @@ -109,24 +109,24 @@ func _input(_event): Global.set_hint("has_reset", true) func _on_boost_timeout(): - if not Global.get_hint("has_boosted") and not Global.get_setting("touch_controls"): + if not Global.get_hint("has_boosted") and not Global.get_setting("ui.touch_controls"): display_hint_msg(tr("Press %s to boost") % display_keybind(tr("SHIFT"), "B")) func _on_move_timeout(): - if not Global.get_hint("has_moved") and not Global.get_setting("touch_controls"): + if not Global.get_hint("has_moved") and not Global.get_setting("ui.touch_controls"): display_hint_msg(tr("Use %s to move") % display_keybind("WASD", tr("left stick"))) func _on_interact_timeout(): - if not Global.get_hint("has_interacted") and not Global.get_setting("touch_controls"): + if not Global.get_hint("has_interacted") and not Global.get_setting("ui.touch_controls"): var keybind = display_keybind(tr("SPACE"), "A") display_hint_msg(tr("Press %s to pick up items and hold %s to interact with tools") % [keybind, keybind]) func _on_reset_timeout(): - if not Global.get_hint("has_reset") and not Global.get_setting("touch_controls"): + if not Global.get_hint("has_reset") and not Global.get_setting("ui.touch_controls"): display_hint_msg(tr("Press %s to reset the camera view") % display_keybind("R", "Y")) func _on_zoom_timeout(): - if not Global.get_hint("has_zoomed") and not Global.get_setting("touch_controls"): + if not Global.get_hint("has_zoomed") and not Global.get_setting("ui.touch_controls"): display_hint_msg(tr("Use %s to zoom in/out") % display_keybind(tr("PageUp/PageDown"), "LT/RT")) func display_keybind(keyboard: String, joypad: String, touch = null) -> String: @@ -143,11 +143,11 @@ func any_action_just_pressed(actions: Array) -> bool: return false func _on_rotate_camera_timeout(): - if not Global.get_hint("has_rotated") and not Global.get_setting("touch_controls"): + if not Global.get_hint("has_rotated") and not Global.get_setting("ui.touch_controls"): display_hint_msg(tr("Use %s to rotate the camera view") % display_keybind(tr("arrow keys"), tr("right stick"))) func _on_nametags_timeout(): - if not Global.get_hint("has_seen_nametags") and not Global.get_setting("usernames"): + if not Global.get_hint("has_seen_nametags") and not Global.get_setting("graphics.usernames"): Global.set_hint("has_seen_nametags", true) display_hint_msg(tr("Username tags can be enabled/disabled in the settings")) diff --git a/client/menu/settings.gd b/client/menu/settings.gd index eb143900..b47331c6 100644 --- a/client/menu/settings.gd +++ b/client/menu/settings.gd @@ -16,52 +16,17 @@ # extends Menu -const SETTINGS_ROW_SCENE = preload("res://menu/settings/settings_row.tscn") - -@onready var settings_tabs: TabContainer = $OuterGap/Panel/InnerGap/VBoxContainer/TabContainer +@onready var container = $OuterGap/Panel/InnerGap/VBoxContainer func _ready(): super() - update_rows() + Global.settings_tree._update_row() + container.add_child(Global.settings_tree.row) + container.move_child(Global.settings_tree.row, 1) func _on_back_pressed(): exit() func exit(): Global.save_settings() - Global.apply_settings() super() - -func update_rows(fix_focus = false): - for c in settings_tabs.get_children(): - c.queue_free() - - for category: SettingsCategory in Global.default_settings: - var category_settings = category.settings - var scroll := ScrollContainerCustom.new() - var options := VBoxContainer.new() - scroll.name = category.name - scroll.size_flags_horizontal = Control.SIZE_EXPAND_FILL - settings_tabs.add_child(scroll) - options.size_flags_horizontal = Control.SIZE_EXPAND_FILL - scroll.add_child(options) - - var category_presets = category.presets - if category_presets != null: - for i: Preset in category_presets: - var row: SettingsRow = SETTINGS_ROW_SCENE.instantiate() - options.add_child(row) - row.label.text = i.label - row.reset_button.visible = false - for b in i.buttons(): - row.value_parent.add_child(b) - - for k: String in category_settings.keys(): - var row: SettingsRow = Global.settings[k].get_row() - options.add_child(row) - - if fix_focus: - pass - # TODO: Not implemented! - # await get_tree().process_frame - # Global.focus_first(self) diff --git a/client/menu/settings.tscn b/client/menu/settings.tscn index 9f523f7c..0a55e222 100644 --- a/client/menu/settings.tscn +++ b/client/menu/settings.tscn @@ -1,12 +1,10 @@ -[gd_scene load_steps=6 format=3 uid="uid://8ic77jmadadj"] +[gd_scene load_steps=5 format=3 uid="uid://8ic77jmadadj"] [ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_foq3a"] [ext_resource type="Script" path="res://menu/settings.gd" id="2_3hgm8"] [ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/dark_blur_material.tres" id="3_8nykw"] [ext_resource type="Script" path="res://menu/blur_setup.gd" id="4_v6q3y"] -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_85urc"] - [node name="SettingsMenu" type="Control"] layout_mode = 3 anchors_preset = 15 @@ -52,11 +50,6 @@ size_flags_horizontal = 0 theme_override_font_sizes/font_size = 36 text = "Settings" -[node name="TabContainer" type="TabContainer" parent="OuterGap/Panel/InnerGap/VBoxContainer"] -layout_mode = 2 -size_flags_vertical = 3 -theme_override_styles/panel = SubResource("StyleBoxEmpty_85urc") - [node name="Back" type="Button" parent="OuterGap/Panel/InnerGap/VBoxContainer"] layout_mode = 2 size_flags_vertical = 8 diff --git a/client/menu/settings/dropdown_setting.gd b/client/menu/settings/dropdown_setting.gd index e57fc40f..62162320 100644 --- a/client/menu/settings/dropdown_setting.gd +++ b/client/menu/settings/dropdown_setting.gd @@ -18,23 +18,18 @@ extends GameSetting var options: Array -func _init(new_description: String, new_preset: int, new_options: Array): - assert(new_preset < new_options.size()) - super(new_description, new_preset) +func _init(new_id: String, new_default, new_options: Array): + super(new_id, new_default) options = new_options func _update_row(): super() row.value_node = OptionButton.new() for i in options: - row.value_node.add_item(i) - row.value_node.select(_value) + row.value_node.add_item(tr(nskey + "." + i)) + row.value_node.select(options.find(Global.get_setting(key))) + if not row.value_node.item_selected.is_connected(from_ui): + row.value_node.item_selected.connect(from_ui) -func fetch_setting(): - if row != null: - _value = row.value_node.selected - -func set_value(v): - super(v) - if row != null: - row.value_node.selected = _value +func from_ui(index): + Global.set_setting(key, options[index]) diff --git a/client/menu/settings/game_setting.gd b/client/menu/settings/game_setting.gd index afe1fe65..2846cbe3 100644 --- a/client/menu/settings/game_setting.gd +++ b/client/menu/settings/game_setting.gd @@ -16,39 +16,31 @@ class_name GameSetting extends Object -var preset -var _value -var description: String +var default +var key: String +var nskey: String -var row: SettingsRow +var row: Node -func _init(new_description: String, new_preset): - preset = new_preset - set_value(new_preset) - description = new_description +func _init(new_id: String, new_default = null): + default = new_default + key = new_id -func reset(): - set_value(preset) - -func get_row() -> SettingsRow: - _update_row() - return row +func set_parent(parent: GameSetting): + if parent != null: key = parent.key + "." + key + nskey = "c.settings." + key func _update_row(): - if row != null: - row.queue_free() - row = preload("res://menu/settings/settings_row.tscn").instantiate() - row.description = description - row.reset.connect(reset) + if row == null: row = preload("res://menu/settings/settings_row.tscn").instantiate() + row.description = tr(nskey) + if not row.reset.is_connected(reset): row.reset.connect(reset) -func fetch_setting(): - pass - -func get_value(): - return _value +func reset(): + Global.set_setting(key, default) -func set_value(v): - if v is Array: - _value = v.duplicate(true) - else: - _value = v +func check(): + if default != null: + if not key in Global.settings: + Global.set_setting_unchecked(key, default) + if typeof(default) != typeof(Global.settings[key]): + Global.set_setting_unchecked(key, default) diff --git a/client/menu/settings/input/input_manager.gd b/client/menu/settings/input/input_manager.gd index 96cdca09..784b4974 100644 --- a/client/menu/settings/input/input_manager.gd +++ b/client/menu/settings/input/input_manager.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 tpart +# Copyright 2024 metamuffin # # 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 @@ -15,32 +16,6 @@ # extends Node -var action_descriptions = { - "forwards": tr("Move forwards"), - "backwards": tr("Move backwards"), - "left": tr("Move left"), - "right": tr("Move right"), - "rotate_left": tr("Rotate camera to the left"), - "rotate_right": tr("Rotate camera to the right"), - "rotate_up": tr("Rotate camera upwards"), - "rotate_down": tr("Rotate camera downwards"), - "interact": tr("Interact", "Interacting with items, etc."), - "boost": tr("Boost movement"), - "zoom_in": tr("Zoom in"), - "zoom_out": tr("Zoom out"), - "chat": tr("Toggle chat", "Toggle chat on or off"), - "reset": tr("Reset camera view"), - "fullscreen": tr("Toggle fullscreen"), - "previous": tr("Previous"), - "next": tr("Next"), - "start_game": tr("Start game"), - "join_spectate": tr("Join / Spectate"), - "zoom_in_discrete": tr("Zoom in (discrete)"), - "zoom_out_discrete": tr("Zoom out (discrete)"), - "scroll_down": tr("Scroll down"), - "scroll_up": tr("Scroll up"), -} - var default_input_map = {} var input_map @@ -56,12 +31,12 @@ func get_input_map() -> Dictionary: kb[a] = input_events return kb -func input_map_to_settings_dictionary(map: Dictionary) -> Dictionary: - var settings_dict := {} +func input_map_to_settings(map: Dictionary) -> Array: + var entries := [] for k in map.keys(): var events = map[k] - settings_dict[k] = InputSetting.new(action_descriptions[k] if action_descriptions.has(k) else k, events) - return settings_dict + entries.append(InputSetting.new(k, events)) + return entries func settings_dictionary_to_input_map(settings: Dictionary) -> Dictionary: var map := {} diff --git a/client/menu/settings/input/input_setting.gd b/client/menu/settings/input/input_setting.gd index eec68bdc..e32e800c 100644 --- a/client/menu/settings/input/input_setting.gd +++ b/client/menu/settings/input/input_setting.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 tpart +# Copyright 2024 metamuffin # # 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 @@ -21,14 +22,9 @@ const INPUT_VALUE_NODE_SCENE = preload("res://menu/settings/input/input_value_no func _update_row(): super() row.value_node = INPUT_VALUE_NODE_SCENE.instantiate() - row.value_node.value = _value + row.value_node.value = Global.get_setting(key) + if not row.value_node.changed.is_connected(from_ui): + row.value_node.changed.connect(from_ui) -func fetch_setting(): - if row != null: - _value = row.value_node.value - -func set_value(v): - super(v) - if row != null: - row.value_node.value = _value - row.value_node.update() +func from_ui(): + Global.set_setting(key, row.value_node.value) diff --git a/client/menu/settings/input/input_value_node.gd b/client/menu/settings/input/input_value_node.gd index 125a946b..9f89416b 100644 --- a/client/menu/settings/input/input_value_node.gd +++ b/client/menu/settings/input/input_value_node.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 tpart +# Copyright 2024 metamuffin # # 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 @@ -19,6 +20,8 @@ class_name InputValueNode var value: Array[InputEvent] = [] var listening := false +signal changed() + @onready var actions_container: VBoxContainer = $ActionsContainer @onready var add_button: Button = $Add @onready var add_text = add_button.text @@ -55,6 +58,7 @@ func update(fix_focus: bool = false): func erase_event(e: InputEvent): value.erase(e) update(true) + changed.emit() func _input(e: InputEvent): if listening: @@ -66,6 +70,7 @@ func _input(e: InputEvent): value.append(e) _on_add_pressed() update() + changed.emit() func events_equal(e1: InputEvent, e2: InputEvent) -> bool: if e1 is InputEventKey and e2 is InputEventKey: diff --git a/client/menu/settings/preset.gd b/client/menu/settings/preset_row.gd index bb13b570..808f6381 100644 --- a/client/menu/settings/preset.gd +++ b/client/menu/settings/preset_row.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 nokoe +# Copyright 2024 metamuffin # # 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 @@ -14,13 +15,13 @@ # along with this program. If not, see <https://www.gnu.org/licenses/>. # class_name Preset -extends Object +extends GameSetting -var label: String var options: Dictionary +var arr: Array[Button] -func _init(name_: String, options_: Dictionary): - label = name_ +func _init(id: String, options_: Dictionary): + super(id) options = options_ func apply(preset_name: String): @@ -29,11 +30,9 @@ func apply(preset_name: String): var setting_name: String = i Global.set_setting(setting_name, preset[setting_name]) -func buttons() -> Array[Button]: - var arr: Array[Button] = [] +func _update_row(): for i in options.keys(): var button := Button.new() button.pressed.connect(apply.bind(i)) button.text = i arr.push_back(button) - return arr diff --git a/client/menu/settings/range_setting.gd b/client/menu/settings/range_setting.gd index d13e2262..d8616d54 100644 --- a/client/menu/settings/range_setting.gd +++ b/client/menu/settings/range_setting.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 nokoe +# Copyright 2024 metamuffin # # 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 @@ -21,8 +22,8 @@ var max_value: float var tick_count var smooth: bool -func _init(new_description: String, new_preset: float, new_min_value: float, new_max_value: float, new_smooth: bool = true, new_tick_count = null): - super(new_description, new_preset) +func _init(new_id: String, new_default: float, new_min_value: float, new_max_value: float, new_smooth: bool = true, new_tick_count = null): + super(new_id, new_default) min_value = new_min_value max_value = new_max_value tick_count = new_tick_count @@ -35,13 +36,8 @@ func _update_row(): row.value_node.max_value = max_value row.value_node.tick_count = abs(max_value - min_value) if tick_count == null else tick_count row.value_node.step = 0 if smooth else (1 if tick_count == null else abs(max_value - min_value) / (tick_count - 1)) - row.value_node.value = _value + row.value_node.value = Global.get_setting(key) + if not row.value_node.value_changed.is_connected(from_ui): row.value_node.value_changed.connect(from_ui) -func fetch_setting(): - if row != null: - _value = row.value_node.value - -func set_value(v): - super(v) - if row != null: - row.value_node.value = _value +func from_ui(): + Global.set_setting(key, row.value_node.value) diff --git a/client/menu/settings/settings_category.gd b/client/menu/settings/settings_category.gd index c4601429..7425ea19 100644 --- a/client/menu/settings/settings_category.gd +++ b/client/menu/settings/settings_category.gd @@ -14,15 +14,48 @@ # along with this program. If not, see <https://www.gnu.org/licenses/>. # class_name SettingsCategory -extends Object +extends GameSetting -var name: String -var id: String -var settings: Dictionary # Dictionary[String, GameSetting] -var presets # Array[Preset] | null +var settings: Array # Dictionary[String, GameSetting] +var presets # Array[Preset] -func _init(new_name: String, new_id: String, new_settings: Dictionary, new_presets = null): - name = new_name - id = new_id +var options: VBoxContainer + +func _init(new_id: String, new_settings: Array, new_presets = []): + super(new_id) settings = new_settings - presets = new_presets + presets = new_presets + +func set_parent(parent: GameSetting): + super(parent) + for c in settings: + c.set_parent(self) + +func _update_row(): + if row == null: row = ScrollContainerCustom.new() + if options == null: options = VBoxContainer.new() + row.name = tr(nskey) + row.size_flags_horizontal = Control.SIZE_EXPAND_FILL + options.size_flags_horizontal = Control.SIZE_EXPAND_FILL + + if options.get_parent() != row: + row.add_child(options) + + if presets != null: + for i in presets: + var prow: SettingsRow = preload("res://menu/settings/settings_row.tscn").instantiate() + options.add_child(prow) + prow.label.text = i.label + prow.reset_button.visible = false + for b in i.buttons(): + prow.value_parent.add_child(b) + + for r in settings: + r._update_row() + if r.row.get_parent() != options: + print(r.row) + options.add_child(r.row) + +func check(): + for c in settings: + c.check() diff --git a/client/menu/settings/settings_root.gd b/client/menu/settings/settings_root.gd new file mode 100644 index 00000000..5acf7f11 --- /dev/null +++ b/client/menu/settings/settings_root.gd @@ -0,0 +1,36 @@ +# Hurry Curry! - a game about cooking +# Copyright 2024 metamuffin +# +# 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 GameSetting +class_name SettingsRoot + +var children: Array +func _init(new_children: Array): + super("root") + children = new_children + for c in children: + c.set_parent(null) + +func _update_row(): + if row == null: row = TabContainer.new() + row.size_flags_vertical = Control.SIZE_EXPAND_FILL + for r in children: + r._update_row() + if r.row.get_parent() != row: + row.add_child(r.row) + +func check(): + for c in children: + c.check() diff --git a/client/menu/settings/settings_row.gd b/client/menu/settings/settings_row.gd index f5621d78..68340918 100644 --- a/client/menu/settings/settings_row.gd +++ b/client/menu/settings/settings_row.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 nokoe +# Copyright 2024 metamuffin # # 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 diff --git a/client/menu/settings/text_setting.gd b/client/menu/settings/text_setting.gd index faafa610..6fa6b1ef 100644 --- a/client/menu/settings/text_setting.gd +++ b/client/menu/settings/text_setting.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 nokoe +# Copyright 2024 metamuffin # # 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 @@ -18,21 +19,17 @@ extends GameSetting var placeholder: String -func _init(new_description: String, new_preset: String, new_placeholder: String = ""): - super(new_description, new_preset) +func _init(new_id: String, new_default: String, new_placeholder: String = ""): + super(new_id, new_default) placeholder = new_placeholder func _update_row(): super() row.value_node = LineEdit.new() - row.value_node.text = _value + row.value_node.text = Global.get_setting(key) row.value_node.placeholder_text = placeholder + if not row.value_node.text_changed.is_connected(from_ui): + row.value_node.text_changed.connect(from_ui) -func fetch_setting(): - if row != null: - _value = row.value_node.text - -func set_value(v): - super(v) - if row != null: - row.value_node.text = _value +func from_ui(text): + Global.set_setting(key, text) diff --git a/client/menu/settings/toggle_setting.gd b/client/menu/settings/toggle_setting.gd index 6d4150d4..45f08d9f 100644 --- a/client/menu/settings/toggle_setting.gd +++ b/client/menu/settings/toggle_setting.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 nokoe +# Copyright 2024 metamuffin # # 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 @@ -16,19 +17,15 @@ class_name ToggleSetting extends GameSetting -func _init(new_description: String, new_preset: bool): - super(new_description, new_preset) - -func fetch_setting(): - if row != null: - _value = row.value_node.button_pressed +func _init(new_id: String, new_default: bool): + super(new_id, new_default) func _update_row(): super() row.value_node = CheckButton.new() - row.value_node.button_pressed = _value + row.value_node.button_pressed = Global.get_setting(key) + if not row.value_node.pressed.is_connected(from_ui): + row.value_node.pressed.connect(from_ui) -func set_value(v): - super(v) - if row != null: - row.value_node.button_pressed = _value +func from_ui(): + Global.set_setting(key, row.value_node.button_pressed) diff --git a/client/menu/setup.gd b/client/menu/setup.gd index 6c3c90cd..16944c7c 100644 --- a/client/menu/setup.gd +++ b/client/menu/setup.gd @@ -73,5 +73,5 @@ func _on_sign_pressed(): Global.set_profile("username", username.text) Global.set_profile("character", character) - Global.set_setting("setup_complete", true) + Global.set_setting("gameplay.setup_complete", true) replace_menu("res://menu/main.tscn") diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd index 81315630..142d5f47 100644 --- a/client/player/controllable_player.gd +++ b/client/player/controllable_player.gd @@ -60,7 +60,7 @@ func _process(delta): func _process_movement(delta): var input = Input.get_vector("left", "right", "forwards", "backwards") if is_input_enabled() else Vector2.ZERO - var boost = Input.is_action_pressed("boost") or (Global.get_setting("latch_boost") and boosting) + var boost = Input.is_action_pressed("boost") or (Global.get_setting("gameplay.latch_boost") and boosting) input = input.rotated( - game.camera.angle_target) if Input.is_action_pressed("interact") or Input.is_action_just_released("interact"): input *= 0 diff --git a/client/player/follow_camera.gd b/client/player/follow_camera.gd index 516b1ba1..88b6cad4 100644 --- a/client/player/follow_camera.gd +++ b/client/player/follow_camera.gd @@ -71,12 +71,12 @@ func reset(): func follow(delta): if not _disable_input: angle_target += Input.get_axis("rotate_left", "rotate_right") * ( - ROTATE_SPEED * delta * (-1 if Global.get_setting("invert_camera") else 1) + ROTATE_SPEED * delta * (-1 if Global.get_setting("gameplay.invert_camera") else 1) ) angle = G.interpolate_angle(angle, angle_target, delta * ROTATE_WEIGHT) if not _disable_input: angle_up_target += Input.get_axis("rotate_down", "rotate_up") * ( - ROTATE_UP_SPEED * delta * (-1 if Global.get_setting("invert_camera") else 1) + ROTATE_UP_SPEED * delta * (-1 if Global.get_setting("gameplay.invert_camera") else 1) ) angle_up_target = clamp(angle_up_target, ANGLE_UP_MIN, ANGLE_UP_MAX) angle_up = G.interpolate_angle(angle_up, angle_up_target, delta * ROTATE_UP_WEIGHT) @@ -87,7 +87,7 @@ func follow(delta): new_transform.origin = target.position + offset new_transform = new_transform.looking_at(target.position) - if Global.get_setting("interpolate_camera_rotation"): + if Global.get_setting("gameplay.interpolate_camera_rotation"): transform.basis = Basis.from_euler(Vector3( G.interpolate_angle(transform.basis.get_euler().x, new_transform.basis.get_euler().x, delta * LOOK_WEIGHT), G.interpolate_angle(transform.basis.get_euler().y, new_transform.basis.get_euler().y, delta * LOOK_WEIGHT), diff --git a/client/player/player.gd b/client/player/player.gd index d5837d47..bc978209 100644 --- a/client/player/player.gd +++ b/client/player/player.gd @@ -88,7 +88,7 @@ func update_position(new_position: Vector2, new_rotation: float, new_boosting: b func update_username_tag(): var tag: Label3D = character.username_tag tag.text = username - tag.visible = Global.get_setting("usernames") + tag.visible = Global.get_setting("graphics.usernames") func set_item(i: Item): i.owned_by = hand_base diff --git a/client/server.gd b/client/server.gd index 3529e7e4..40d87672 100644 --- a/client/server.gd +++ b/client/server.gd @@ -85,18 +85,16 @@ func _server_exec(): sem.post() func get_server_path() -> String: - var path: String = Global.get_setting("server_binary") + var path: String = Global.get_setting("other.server_binary") if path != "": return path else: return "hurrycurry-server" func get_server_data(): - var path: String = Global.get_setting("server_data") - if path != "": - return path - else: - return null + var path: String = Global.get_setting("other.server_data") + if path != "": return path + else: return null func _process(_delta): match state: 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) diff --git a/locale/ar.ini b/locale/ar.ini index 20fdfbba..701df5b9 100644 --- a/locale/ar.ini +++ b/locale/ar.ini @@ -72,24 +72,24 @@ c.settings.audio= c.settings.audio.master_volume=صوت البرنامج c.settings.audio.music_volume=صوت الموسيقى c.settings.audio.sfx_volume=صوت المؤثرات -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button=زر القائمة/الهمبرغر/Menu -c.settings.controls.other_event= -c.settings.controls.press_any_key= +c.settings.input= +c.settings.input.add= +c.settings.input.joypad= +c.settings.input.joypad_axis= +c.settings.input.keyboard= +c.settings.input.mouse_button=زر القائمة/الهمبرغر/Menu +c.settings.input.other_event= +c.settings.input.press_any_key= c.settings.debug_info=عرض معلومات التصحيح (fps، إلخ) -c.settings.fullscreen=إملأ الشاشة -c.settings.fullscreen.always=دائماً -c.settings.fullscreen.keep=كما هو -c.settings.fullscreen.never=أبداً +c.settings.graphics.fullscreen=إملأ الشاشة +c.settings.graphics.fullscreen.always=دائماً +c.settings.graphics.fullscreen.keep=كما هو +c.settings.graphics.fullscreen.never=أبداً c.settings.gameplay= c.settings.gameplay.extend_boost=قم دائمًا بتمديد الجري إلى أقصى مدة -c.settings.gi=إضاءة عالمية -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi=Voxel GI +c.settings.graphics.gi=إضاءة عالمية +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi=Voxel GI c.settings.glow=توهج c.settings.graphics=رسوميات c.settings.graphics.aa=تقنية التنعيم @@ -98,7 +98,7 @@ c.settings.graphics.taa=تقنية التنعيم الزمني c.settings.grass_amount=كمية العشب الـ3D للخانة c.settings.language=اللغة c.settings.language.system=الوضع الافتراضي للجهاز -c.settings.low_poly_trees=أشجار Low-poly +c.settings.graphics.lq_trees=أشجار Low-poly c.settings.other= c.settings.preset_high=عالي c.settings.preset_low=ضعيف diff --git a/locale/de.ini b/locale/de.ini index f887201e..e76c0aac 100644 --- a/locale/de.ini +++ b/locale/de.ini @@ -72,24 +72,24 @@ c.settings.audio=Audio c.settings.audio.master_volume=Gesamtlautstärke c.settings.audio.music_volume=Musiklautstärke c.settings.audio.sfx_volume=Effektlautstärke -c.settings.controls=Steuerung -c.settings.controls.add=Hinzufügen -c.settings.controls.joypad=%s (Joypad) -c.settings.controls.joypad_axis=Joypad-Achse %s -c.settings.controls.keyboard=%s (Tastatur) -c.settings.controls.mouse_button=Maustaste %s -c.settings.controls.other_event=Anderes Ereignis -c.settings.controls.press_any_key=Drücke eine Taste... +c.settings.input=Steuerung +c.settings.input.add=Hinzufügen +c.settings.input.joypad=%s (Joypad) +c.settings.input.joypad_axis=Joypad-Achse %s +c.settings.input.keyboard=%s (Tastatur) +c.settings.input.mouse_button=Maustaste %s +c.settings.input.other_event=Anderes Ereignis +c.settings.input.press_any_key=Drücke eine Taste... c.settings.debug_info=Diagnosedaten anzeigen (Bildrate, etc.) -c.settings.fullscreen=Vollbild -c.settings.fullscreen.always=Immer -c.settings.fullscreen.keep=Beibehalten -c.settings.fullscreen.never=Nie +c.settings.graphics.fullscreen=Vollbild +c.settings.graphics.fullscreen.always=Immer +c.settings.graphics.fullscreen.keep=Beibehalten +c.settings.graphics.fullscreen.never=Nie c.settings.gameplay=Spiel c.settings.gameplay.extend_boost=Schub immer bis zum Anschlag verlängern -c.settings.gi=Globale Beleuchtung -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi=Voxel GlobaleBeleuchtung +c.settings.graphics.gi=Globale Beleuchtung +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi=Voxel GlobaleBeleuchtung c.settings.glow=Glow aktivieren c.settings.graphics=Grafikvoreinstellung c.settings.graphics.aa=Kantenglättung @@ -98,7 +98,7 @@ c.settings.graphics.taa=Zeitliche Kantenglättung c.settings.grass_amount=3D-Grasmenge pro Tile c.settings.language=Sprache c.settings.language.system=Systemstandard -c.settings.low_poly_trees=Low-poly-Bäume +c.settings.graphics.lq_trees=Low-poly-Bäume c.settings.other=Sonstiges c.settings.preset_high=Hoch c.settings.preset_low=Niedrig diff --git a/locale/en.ini b/locale/en.ini index 3903c574..472c88db 100644 --- a/locale/en.ini +++ b/locale/en.ini @@ -75,24 +75,24 @@ c.settings.audio.master_volume=Master Volume c.settings.audio.music_volume=Music Volume c.settings.audio.sfx_volume=SFX Volume c.settings.audio=Audio -c.settings.controls.add=Add new -c.settings.controls.joypad_axis=Joypad axis %s -c.settings.controls.joypad=%s (Joypad) -c.settings.controls.keyboard=%s (Keyboard) -c.settings.controls.mouse_button=Mouse button %s -c.settings.controls.other_event=Other event -c.settings.controls.press_any_key=Press any key... -c.settings.controls=Controls +c.settings.input.add=Add new +c.settings.input.joypad_axis=Joypad axis %s +c.settings.input.joypad=%s (Joypad) +c.settings.input.keyboard=%s (Keyboard) +c.settings.input.mouse_button=Mouse button %s +c.settings.input.other_event=Other event +c.settings.input.press_any_key=Press any key... +c.settings.input=Controls c.settings.debug_info=Display debug info (Framerate, etc.) -c.settings.fullscreen.always=Always -c.settings.fullscreen.keep=Keep -c.settings.fullscreen.never=Never -c.settings.fullscreen=Fullscreen +c.settings.graphics.fullscreen.always=Always +c.settings.graphics.fullscreen.keep=Keep +c.settings.graphics.fullscreen.never=Never +c.settings.graphics.fullscreen=Fullscreen c.settings.gameplay.extend_boost=Always extend boost to maximum duration c.settings.gameplay=Gameplay -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi=Voxel GI -c.settings.gi=Global illumination +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi=Voxel GI +c.settings.graphics.gi=Global illumination c.settings.glow=Enable glow c.settings.graphics.aa=Anti-aliasing c.settings.graphics.ao=Ambient occlusion @@ -101,7 +101,7 @@ c.settings.graphics=Graphics c.settings.grass_amount=3D grass amount per grass tile c.settings.language.system=System default c.settings.language=Language -c.settings.low_poly_trees=Low-poly trees +c.settings.graphics.lq_trees=Low-poly trees c.settings.other=Other c.settings.preset_high=High c.settings.preset_low=Low diff --git a/locale/es.ini b/locale/es.ini index d6a0a371..14951de4 100644 --- a/locale/es.ini +++ b/locale/es.ini @@ -72,24 +72,24 @@ c.settings.audio= c.settings.audio.master_volume=Volumen principal c.settings.audio.music_volume=Volumen de la música c.settings.audio.sfx_volume=Volumen de efectos especiales -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button=Botón de menú -c.settings.controls.other_event= -c.settings.controls.press_any_key= +c.settings.input= +c.settings.input.add= +c.settings.input.joypad= +c.settings.input.joypad_axis= +c.settings.input.keyboard= +c.settings.input.mouse_button=Botón de menú +c.settings.input.other_event= +c.settings.input.press_any_key= c.settings.debug_info=Mostrar información de depuración (Cuadros por segundo, etc.) -c.settings.fullscreen=Pantalla completa -c.settings.fullscreen.always=Siempre -c.settings.fullscreen.keep=Mantener -c.settings.fullscreen.never=Jamás +c.settings.graphics.fullscreen=Pantalla completa +c.settings.graphics.fullscreen.always=Siempre +c.settings.graphics.fullscreen.keep=Mantener +c.settings.graphics.fullscreen.never=Jamás c.settings.gameplay= c.settings.gameplay.extend_boost=Siempre extienda el impulso a la duración máxima -c.settings.gi=Iluminación global -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi=Voxel GI +c.settings.graphics.gi=Iluminación global +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi=Voxel GI c.settings.glow=Activar brillo c.settings.graphics=Gráficos c.settings.graphics.aa=Antialiasing @@ -98,7 +98,7 @@ c.settings.graphics.taa=Antialiasing temporal c.settings.grass_amount=cantidad de hierba 3D por loseta de césped c.settings.language=Lengua c.settings.language.system=Sistema por defecto -c.settings.low_poly_trees=Árboles con pocos polígonos +c.settings.graphics.lq_trees=Árboles con pocos polígonos c.settings.other= c.settings.preset_high=Alto c.settings.preset_low=Bajo diff --git a/locale/eu.ini b/locale/eu.ini index 359e9760..97005a4d 100644 --- a/locale/eu.ini +++ b/locale/eu.ini @@ -72,24 +72,24 @@ c.settings.audio=Audioa c.settings.audio.master_volume=Bolumen Orokorra c.settings.audio.music_volume=Musikaren Bolumena c.settings.audio.sfx_volume=Efektuen Bolumena -c.settings.controls=Kontrolak -c.settings.controls.add=Gehitu berria -c.settings.controls.joypad=%s (Agintea) -c.settings.controls.joypad_axis=Agintearen %s ardatza -c.settings.controls.keyboard=%s (Teklatua) -c.settings.controls.mouse_button=Saguaren %s botoia -c.settings.controls.other_event=Beste gertaerak -c.settings.controls.press_any_key=Sakatu edozein tekla... +c.settings.input=Kontrolak +c.settings.input.add=Gehitu berria +c.settings.input.joypad=%s (Agintea) +c.settings.input.joypad_axis=Agintearen %s ardatza +c.settings.input.keyboard=%s (Teklatua) +c.settings.input.mouse_button=Saguaren %s botoia +c.settings.input.other_event=Beste gertaerak +c.settings.input.press_any_key=Sakatu edozein tekla... c.settings.debug_info=Erakutsi arazte informazioa (FPS, etab.) -c.settings.fullscreen=Pantaila osoa -c.settings.fullscreen.always=Beti -c.settings.fullscreen.keep=Mantendu -c.settings.fullscreen.never=Inoiz ez +c.settings.graphics.fullscreen=Pantaila osoa +c.settings.graphics.fullscreen.always=Beti +c.settings.graphics.fullscreen.keep=Mantendu +c.settings.graphics.fullscreen.never=Inoiz ez c.settings.gameplay=Jokoa c.settings.gameplay.extend_boost=Beti luzatu bultzada iraupen luzeenera -c.settings.gi=Argiztapen orokorra -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi=Voxel GI +c.settings.graphics.gi=Argiztapen orokorra +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi=Voxel GI c.settings.glow=Gaitu distira c.settings.graphics=Grafikoak c.settings.graphics.aa=Anti-aliasinga @@ -98,7 +98,7 @@ c.settings.graphics.taa=Anti-aliasing tenporala c.settings.grass_amount=3D belar kopurua belar lauza bakoitzeko c.settings.language=Hizkuntza c.settings.language.system=Sistemaren berezkoak -c.settings.low_poly_trees=Low-poly zuhaitzak +c.settings.graphics.lq_trees=Low-poly zuhaitzak c.settings.other=Besteak c.settings.preset_high=Altua c.settings.preset_low=Baxua diff --git a/locale/fi.ini b/locale/fi.ini index 8b8996a8..f89bdb78 100644 --- a/locale/fi.ini +++ b/locale/fi.ini @@ -72,24 +72,24 @@ c.settings.audio= c.settings.audio.master_volume= c.settings.audio.music_volume= c.settings.audio.sfx_volume= -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button= -c.settings.controls.other_event= -c.settings.controls.press_any_key= +c.settings.input= +c.settings.input.add= +c.settings.input.joypad= +c.settings.input.joypad_axis= +c.settings.input.keyboard= +c.settings.input.mouse_button= +c.settings.input.other_event= +c.settings.input.press_any_key= c.settings.debug_info= -c.settings.fullscreen= -c.settings.fullscreen.always= -c.settings.fullscreen.keep= -c.settings.fullscreen.never= +c.settings.graphics.fullscreen= +c.settings.graphics.fullscreen.always= +c.settings.graphics.fullscreen.keep= +c.settings.graphics.fullscreen.never= c.settings.gameplay= c.settings.gameplay.extend_boost= -c.settings.gi= -c.settings.gi.sdfgi= -c.settings.gi.voxelgi= +c.settings.graphics.gi= +c.settings.graphics.gi.sdfgi= +c.settings.graphics.gi.voxelgi= c.settings.glow= c.settings.graphics= c.settings.graphics.aa= @@ -98,7 +98,7 @@ c.settings.graphics.taa= c.settings.grass_amount= c.settings.language= c.settings.language.system= -c.settings.low_poly_trees= +c.settings.graphics.lq_trees= c.settings.other= c.settings.preset_high= c.settings.preset_low= diff --git a/locale/fr.ini b/locale/fr.ini index 157c56fa..2934fb14 100644 --- a/locale/fr.ini +++ b/locale/fr.ini @@ -72,24 +72,24 @@ c.settings.audio= c.settings.audio.master_volume=Volume principal c.settings.audio.music_volume=Volume de la musique c.settings.audio.sfx_volume=Volume des effets sonores -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button=Bouton de menu -c.settings.controls.other_event= -c.settings.controls.press_any_key= +c.settings.input= +c.settings.input.add= +c.settings.input.joypad= +c.settings.input.joypad_axis= +c.settings.input.keyboard= +c.settings.input.mouse_button=Bouton de menu +c.settings.input.other_event= +c.settings.input.press_any_key= c.settings.debug_info=Montrer les informations de débogage (Fréquence d’images, etc.) -c.settings.fullscreen=Plein écran -c.settings.fullscreen.always=Toujours -c.settings.fullscreen.keep=Garder -c.settings.fullscreen.never=Jamais +c.settings.graphics.fullscreen=Plein écran +c.settings.graphics.fullscreen.always=Toujours +c.settings.graphics.fullscreen.keep=Garder +c.settings.graphics.fullscreen.never=Jamais c.settings.gameplay= c.settings.gameplay.extend_boost=Toujours prolonger le boost jusqu’à la durée maximale -c.settings.gi=Luminosité générale -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi=IG Voxel +c.settings.graphics.gi=Luminosité générale +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi=IG Voxel c.settings.glow=Activer la lueur c.settings.graphics=Graphismes c.settings.graphics.aa=Anti crénelage @@ -98,7 +98,7 @@ c.settings.graphics.taa=Anti crénelage temporel c.settings.grass_amount=Quantité d’herbe 3D par tuile d’herbe c.settings.language=Langue c.settings.language.system=Défaut du système -c.settings.low_poly_trees=Arbres de quelques polygones +c.settings.graphics.lq_trees=Arbres de quelques polygones c.settings.other= c.settings.preset_high=Élevé c.settings.preset_low=Faible diff --git a/locale/he.ini b/locale/he.ini index 24141707..0feafee9 100644 --- a/locale/he.ini +++ b/locale/he.ini @@ -72,24 +72,24 @@ c.settings.audio= c.settings.audio.master_volume= c.settings.audio.music_volume= c.settings.audio.sfx_volume= -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button=כפתור התפריט -c.settings.controls.other_event= -c.settings.controls.press_any_key= +c.settings.input= +c.settings.input.add= +c.settings.input.joypad= +c.settings.input.joypad_axis= +c.settings.input.keyboard= +c.settings.input.mouse_button=כפתור התפריט +c.settings.input.other_event= +c.settings.input.press_any_key= c.settings.debug_info= -c.settings.fullscreen=מסך מלא -c.settings.fullscreen.always=תמיד -c.settings.fullscreen.keep=שמור -c.settings.fullscreen.never=אף פעם +c.settings.graphics.fullscreen=מסך מלא +c.settings.graphics.fullscreen.always=תמיד +c.settings.graphics.fullscreen.keep=שמור +c.settings.graphics.fullscreen.never=אף פעם c.settings.gameplay= c.settings.gameplay.extend_boost=תמיד הארך דחיפה לזמן המירבי -c.settings.gi=תאורה גלובאלית -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi= +c.settings.graphics.gi=תאורה גלובאלית +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi= c.settings.glow=אפשר זוהר c.settings.graphics=גרפיקה c.settings.graphics.aa=אנטי אליאסינג @@ -98,7 +98,7 @@ c.settings.graphics.taa= c.settings.grass_amount=כמות דשא תלת מימדית לכל אריח דשא c.settings.language=שפה c.settings.language.system=ברירת מחדל -c.settings.low_poly_trees= +c.settings.graphics.lq_trees= c.settings.other= c.settings.preset_high=גבוה c.settings.preset_low=נמוך diff --git a/locale/ja.ini b/locale/ja.ini index 90f4a187..03ad283b 100644 --- a/locale/ja.ini +++ b/locale/ja.ini @@ -72,24 +72,24 @@ c.settings.audio= c.settings.audio.master_volume=音量 c.settings.audio.music_volume=音量 c.settings.audio.sfx_volume=音量 -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button=メニューボタン -c.settings.controls.other_event= -c.settings.controls.press_any_key= +c.settings.input= +c.settings.input.add= +c.settings.input.joypad= +c.settings.input.joypad_axis= +c.settings.input.keyboard= +c.settings.input.mouse_button=メニューボタン +c.settings.input.other_event= +c.settings.input.press_any_key= c.settings.debug_info=デバッグ情報を表示(フレームレートなど) -c.settings.fullscreen=全画面 -c.settings.fullscreen.always=いつも -c.settings.fullscreen.keep=保つ -c.settings.fullscreen.never=決して +c.settings.graphics.fullscreen=全画面 +c.settings.graphics.fullscreen.always=いつも +c.settings.graphics.fullscreen.keep=保つ +c.settings.graphics.fullscreen.never=決して c.settings.gameplay= c.settings.gameplay.extend_boost=ブーストを常に最大限に拡張する -c.settings.gi=グローバルイルミネーション -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi=Voxel GI +c.settings.graphics.gi=グローバルイルミネーション +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi=Voxel GI c.settings.glow=グローを有効に c.settings.graphics=グラフィックス c.settings.graphics.aa=アンチエイリアシング @@ -98,7 +98,7 @@ c.settings.graphics.taa=テンポラルアンチエイリアシング c.settings.grass_amount=芝生タイルあたりの3D芝生 c.settings.language=言語 c.settings.language.system=システムのデフォルト -c.settings.low_poly_trees=ローポリ木 +c.settings.graphics.lq_trees=ローポリ木 c.settings.other= c.settings.preset_high=高 c.settings.preset_low=悪い diff --git a/locale/pl.ini b/locale/pl.ini index a51b29b5..036c595b 100644 --- a/locale/pl.ini +++ b/locale/pl.ini @@ -72,24 +72,24 @@ c.settings.audio= c.settings.audio.master_volume=Głośność główna c.settings.audio.music_volume=Głośność muzyki c.settings.audio.sfx_volume=Głośność efektów dźwiękowych -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button=przycisk menu -c.settings.controls.other_event= -c.settings.controls.press_any_key= +c.settings.input= +c.settings.input.add= +c.settings.input.joypad= +c.settings.input.joypad_axis= +c.settings.input.keyboard= +c.settings.input.mouse_button=przycisk menu +c.settings.input.other_event= +c.settings.input.press_any_key= c.settings.debug_info=Wyświetlaj informacje debugowania (częstość klatek itp.) -c.settings.fullscreen=Pełny ekran -c.settings.fullscreen.always=Zawsze -c.settings.fullscreen.keep=Zachowaj -c.settings.fullscreen.never=Nigdy +c.settings.graphics.fullscreen=Pełny ekran +c.settings.graphics.fullscreen.always=Zawsze +c.settings.graphics.fullscreen.keep=Zachowaj +c.settings.graphics.fullscreen.never=Nigdy c.settings.gameplay= c.settings.gameplay.extend_boost=Zawsze wydłużaj przyspieszenie do maksymalnego czasu trwania -c.settings.gi=Globalne oświetlenie -c.settings.gi.sdfgi=SDF -c.settings.gi.voxelgi=Oświetlenie wokselowe +c.settings.graphics.gi=Globalne oświetlenie +c.settings.graphics.gi.sdfgi=SDF +c.settings.graphics.gi.voxelgi=Oświetlenie wokselowe c.settings.glow=Połysk c.settings.graphics=Ustawienia grafiki c.settings.graphics.aa=Antyaliasing @@ -98,7 +98,7 @@ c.settings.graphics.taa=Antyaliasing temporalny c.settings.grass_amount=Gęstość trawy 3D c.settings.language=Język c.settings.language.system=Domyślny systemowy -c.settings.low_poly_trees=Drzewa low-poly +c.settings.graphics.lq_trees=Drzewa low-poly c.settings.other= c.settings.preset_high=Wysokie c.settings.preset_low=Niskie diff --git a/locale/pt.ini b/locale/pt.ini index 8b8996a8..f89bdb78 100644 --- a/locale/pt.ini +++ b/locale/pt.ini @@ -72,24 +72,24 @@ c.settings.audio= c.settings.audio.master_volume= c.settings.audio.music_volume= c.settings.audio.sfx_volume= -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button= -c.settings.controls.other_event= -c.settings.controls.press_any_key= +c.settings.input= +c.settings.input.add= +c.settings.input.joypad= +c.settings.input.joypad_axis= +c.settings.input.keyboard= +c.settings.input.mouse_button= +c.settings.input.other_event= +c.settings.input.press_any_key= c.settings.debug_info= -c.settings.fullscreen= -c.settings.fullscreen.always= -c.settings.fullscreen.keep= -c.settings.fullscreen.never= +c.settings.graphics.fullscreen= +c.settings.graphics.fullscreen.always= +c.settings.graphics.fullscreen.keep= +c.settings.graphics.fullscreen.never= c.settings.gameplay= c.settings.gameplay.extend_boost= -c.settings.gi= -c.settings.gi.sdfgi= -c.settings.gi.voxelgi= +c.settings.graphics.gi= +c.settings.graphics.gi.sdfgi= +c.settings.graphics.gi.voxelgi= c.settings.glow= c.settings.graphics= c.settings.graphics.aa= @@ -98,7 +98,7 @@ c.settings.graphics.taa= c.settings.grass_amount= c.settings.language= c.settings.language.system= -c.settings.low_poly_trees= +c.settings.graphics.lq_trees= c.settings.other= c.settings.preset_high= c.settings.preset_low= diff --git a/locale/tr.ini b/locale/tr.ini index 8b8996a8..f89bdb78 100644 --- a/locale/tr.ini +++ b/locale/tr.ini @@ -72,24 +72,24 @@ c.settings.audio= c.settings.audio.master_volume= c.settings.audio.music_volume= c.settings.audio.sfx_volume= -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button= -c.settings.controls.other_event= -c.settings.controls.press_any_key= +c.settings.input= +c.settings.input.add= +c.settings.input.joypad= +c.settings.input.joypad_axis= +c.settings.input.keyboard= +c.settings.input.mouse_button= +c.settings.input.other_event= +c.settings.input.press_any_key= c.settings.debug_info= -c.settings.fullscreen= -c.settings.fullscreen.always= -c.settings.fullscreen.keep= -c.settings.fullscreen.never= +c.settings.graphics.fullscreen= +c.settings.graphics.fullscreen.always= +c.settings.graphics.fullscreen.keep= +c.settings.graphics.fullscreen.never= c.settings.gameplay= c.settings.gameplay.extend_boost= -c.settings.gi= -c.settings.gi.sdfgi= -c.settings.gi.voxelgi= +c.settings.graphics.gi= +c.settings.graphics.gi.sdfgi= +c.settings.graphics.gi.voxelgi= c.settings.glow= c.settings.graphics= c.settings.graphics.aa= @@ -98,7 +98,7 @@ c.settings.graphics.taa= c.settings.grass_amount= c.settings.language= c.settings.language.system= -c.settings.low_poly_trees= +c.settings.graphics.lq_trees= c.settings.other= c.settings.preset_high= c.settings.preset_low= diff --git a/locale/zh_Hans.ini b/locale/zh_Hans.ini index 3042b7ec..8ff41d7d 100644 --- a/locale/zh_Hans.ini +++ b/locale/zh_Hans.ini @@ -72,24 +72,24 @@ c.settings.audio=音频 c.settings.audio.master_volume=主音量 c.settings.audio.music_volume=音乐音量 c.settings.audio.sfx_volume=音效音量 -c.settings.controls=限定 -c.settings.controls.add=添加新的 -c.settings.controls.joypad=%s(游戏手柄) -c.settings.controls.joypad_axis=游戏手柄轴 %s -c.settings.controls.keyboard=%s(键盘) -c.settings.controls.mouse_button=鼠标按钮 %s -c.settings.controls.other_event=其他活动 -c.settings.controls.press_any_key=按任意键… +c.settings.input=限定 +c.settings.input.add=添加新的 +c.settings.input.joypad=%s(游戏手柄) +c.settings.input.joypad_axis=游戏手柄轴 %s +c.settings.input.keyboard=%s(键盘) +c.settings.input.mouse_button=鼠标按钮 %s +c.settings.input.other_event=其他活动 +c.settings.input.press_any_key=按任意键… c.settings.debug_info=显示调试信息(帧率等) -c.settings.fullscreen=全屏 -c.settings.fullscreen.always=始终 -c.settings.fullscreen.keep=保持 -c.settings.fullscreen.never=从不 +c.settings.graphics.fullscreen=全屏 +c.settings.graphics.fullscreen.always=始终 +c.settings.graphics.fullscreen.keep=保持 +c.settings.graphics.fullscreen.never=从不 c.settings.gameplay=游戏玩法 c.settings.gameplay.extend_boost=始终将加速延长至最大持续时间 -c.settings.gi=全局照明 -c.settings.gi.sdfgi=有符号距离场全局照明 -c.settings.gi.voxelgi=体素全局照明 +c.settings.graphics.gi=全局照明 +c.settings.graphics.gi.sdfgi=有符号距离场全局照明 +c.settings.graphics.gi.voxelgi=体素全局照明 c.settings.glow=启用辉光 c.settings.graphics=图形 c.settings.graphics.aa=抗锯齿 @@ -98,7 +98,7 @@ c.settings.graphics.taa=随机采样抗锯齿 c.settings.grass_amount=每块草砖的 3D 草量 c.settings.language=语言 c.settings.language.system=系统默认 -c.settings.low_poly_trees=低多边形树 +c.settings.graphics.lq_trees=低多边形树 c.settings.other=其他 c.settings.preset_high=高 c.settings.preset_low=低 diff --git a/locale/zh_Hant.ini b/locale/zh_Hant.ini index 167f1bd9..1d6a498b 100644 --- a/locale/zh_Hant.ini +++ b/locale/zh_Hant.ini @@ -72,24 +72,24 @@ c.settings.audio= c.settings.audio.master_volume=主音量 c.settings.audio.music_volume=音樂音量 c.settings.audio.sfx_volume=音效音量 -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button=選單按鈕 -c.settings.controls.other_event= -c.settings.controls.press_any_key= +c.settings.input= +c.settings.input.add= +c.settings.input.joypad= +c.settings.input.joypad_axis= +c.settings.input.keyboard= +c.settings.input.mouse_button=選單按鈕 +c.settings.input.other_event= +c.settings.input.press_any_key= c.settings.debug_info=顯示偵錯資訊(幀率等) -c.settings.fullscreen=全螢幕 -c.settings.fullscreen.always=總是 -c.settings.fullscreen.keep=保留 -c.settings.fullscreen.never=永不 +c.settings.graphics.fullscreen=全螢幕 +c.settings.graphics.fullscreen.always=總是 +c.settings.graphics.fullscreen.keep=保留 +c.settings.graphics.fullscreen.never=永不 c.settings.gameplay= c.settings.gameplay.extend_boost=總是將加速延長至最長持續時間 -c.settings.gi=全域照明 -c.settings.gi.sdfgi=有符號距離場全域照明(SDFGI) -c.settings.gi.voxelgi=Voxel 全域照明 +c.settings.graphics.gi=全域照明 +c.settings.graphics.gi.sdfgi=有符號距離場全域照明(SDFGI) +c.settings.graphics.gi.voxelgi=Voxel 全域照明 c.settings.glow=啟用發光 c.settings.graphics=圖形 c.settings.graphics.aa=抗鋸齒 @@ -98,7 +98,7 @@ c.settings.graphics.taa=時間抗鋸齒 c.settings.grass_amount=每個草塊的 3D 草量 c.settings.language=語言 c.settings.language.system=系統預設 -c.settings.low_poly_trees=低多邊形樹 +c.settings.graphics.lq_trees=低多邊形樹 c.settings.other= c.settings.preset_high=高 c.settings.preset_low=低 |