diff --git a/autoloads/game_settings_manager.gd b/autoloads/game_settings_manager.gd new file mode 100644 index 0000000..c6d4eba --- /dev/null +++ b/autoloads/game_settings_manager.gd @@ -0,0 +1,109 @@ +extends Node + + +#region Game Options Signals +signal game_options_block_highlight_changed(block_highlight_enabled: bool) +signal game_options_waila_changed(waila_enabled: bool) +#endregion + +#region Graphics Settings Signals +signal apply_graphics_settings +signal graphics_resolution_changed(resolution: Vector2i, id: int) +signal graphics_fullscreen_changed(fullscreen_enabled: bool) +signal graphics_vsync_changed(vsync_enabled: bool) +signal graphics_fov_changed(fov: int) +#endregion + +signal load_settings +signal save_settings + + +## See documentation to where this path is: https://docs.godotengine.org/en/stable/tutorials/io/data_paths.html#accessing-persistent-user-data-user[br][br] +## Default Paths:[br] +## * Windows: %APPDATA%\Godot\app_userdata\[project_name][br] +## * macOS: ~/Library/Application Support/Godot/app_userdata/[project_name][br] +## * Linux: ~/.local/share/godot/app_userdata/[project_name][br] +var save_data_path: String = "user://game_data/" +var settings_file_name: String = "game_settings.tres" + +var settings_file_path: String = save_data_path + settings_file_name +var settings: GameSettingsResource = GameSettingsResource.new() + + +func _init() -> void: + game_options_block_highlight_changed.connect(_on_game_options_block_highlight_changed) + game_options_waila_changed.connect(_on_game_options_waila_changed) + + graphics_fov_changed.connect(_on_graphics_fov_changed) + graphics_fullscreen_changed.connect(_on_graphics_fullscreen_changed) + graphics_resolution_changed.connect(_on_graphics_resolution_changed) + graphics_vsync_changed.connect(_on_graphics_vsync_changed) + apply_graphics_settings.connect(_on_apply_graphics_settings) + + load_settings.connect(_on_load_settings) + save_settings.connect(_on_save_settings) + + +#region Game Option Settings +func _on_game_options_block_highlight_changed(highlight_enabled: bool) -> void: + settings.game_options.enable_block_highlight = highlight_enabled + _on_save_settings() + +func _on_game_options_waila_changed(waila_enabled: bool) -> void: + settings.game_options.enable_waila = waila_enabled + _on_save_settings() +#endregion + +#region Graphics Settings +func _on_apply_graphics_settings() -> void: + if settings.graphics.fullscreen: + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) + else: + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) + + get_window().size = settings.graphics.resolution + + if settings.graphics.vsync: + DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_ENABLED) + else: + DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED) + + _on_save_settings() + +func _on_graphics_fov_changed(fov: int) -> void: + settings.graphics.fov = fov + +func _on_graphics_fullscreen_changed(fullscreen_enabled: bool) -> void: + settings.graphics.fullscreen = fullscreen_enabled + +func _on_graphics_resolution_changed(resolution: Vector2i, id: int) -> void: + settings.graphics.resolution = resolution + settings.graphics.resolution_id = id + +func _on_graphics_vsync_changed(vsync_enabled: bool) -> void: + settings.graphics.vsync = vsync_enabled +#endregion + + +#region Saving and Loading Settings +func _on_load_settings(apply_after_load: bool = true) -> void: + if !FileAccess.file_exists(settings_file_path): + printerr("Failed to load game settings. File does not exist: ", settings_file_path) + return + + settings = ResourceLoader.load(settings_file_path) + if settings == null: + printerr("Failed to load game settings. Unknown format? ", settings_file_path) + return + + if apply_after_load: + apply_graphics_settings.emit() + +func _on_save_settings() -> void: + if !DirAccess.dir_exists_absolute(save_data_path): + DirAccess.make_dir_absolute(save_data_path) + + var result: int = ResourceSaver.save(settings, settings_file_path) + if result != OK: + printerr("Failed to save game settings: ", result) +#endregion diff --git a/autoloads/game_settings_manager.gd.uid b/autoloads/game_settings_manager.gd.uid new file mode 100644 index 0000000..bc62d5b --- /dev/null +++ b/autoloads/game_settings_manager.gd.uid @@ -0,0 +1 @@ +uid://dxe2y12f412lp diff --git a/autoloads/globals.gd b/autoloads/globals.gd index d3c374a..32f5524 100644 --- a/autoloads/globals.gd +++ b/autoloads/globals.gd @@ -4,8 +4,6 @@ extends Node const BLOCK_PREFAB: PackedScene = preload("res://scenes/blocks/block.tscn") const DROPPED_BLOCK_PREFAB: PackedScene = preload("res://scenes/blocks/dropped_block.tscn") - +# TODO: Move the following into the GameSettingsManager var enable_waila: bool = true ## Enable `What Am I Looking At` UI var enable_block_highlight: bool = true - -var is_options_menu_active: bool = false diff --git a/project.godot b/project.godot index 398611d..a8bb277 100644 --- a/project.godot +++ b/project.godot @@ -24,6 +24,7 @@ InventoryManager="*res://autoloads/inventory_manager.gd" DBItems="*res://autoloads/db_items.gd" SaveGameManager="*res://save_load/autoloads/save_game_manager.gd" SignalManager="*res://autoloads/signal_manager.gd" +GameSettingsManager="*res://autoloads/game_settings_manager.gd" [debug] @@ -32,6 +33,11 @@ gdscript/warnings/untyped_declaration=1 gdscript/warnings/inferred_declaration=1 gdscript/warnings/unsafe_method_access=1 +[display] + +window/size/viewport_width=1280 +window/size/viewport_height=720 + [file_customization] folder_colors={ diff --git a/resources/game_settings/game_options_settings_resource.gd b/resources/game_settings/game_options_settings_resource.gd new file mode 100644 index 0000000..5b06441 --- /dev/null +++ b/resources/game_settings/game_options_settings_resource.gd @@ -0,0 +1,6 @@ +class_name GameOptionsSettingsResource +extends Resource + + +@export var enable_waila: bool = true ## Enable `What Am I Looking At` UI +@export var enable_block_highlight: bool = true diff --git a/resources/game_settings/game_options_settings_resource.gd.uid b/resources/game_settings/game_options_settings_resource.gd.uid new file mode 100644 index 0000000..d8bbb33 --- /dev/null +++ b/resources/game_settings/game_options_settings_resource.gd.uid @@ -0,0 +1 @@ +uid://7yv740somgqf diff --git a/resources/game_settings/game_options_settings_resource.tres b/resources/game_settings/game_options_settings_resource.tres new file mode 100644 index 0000000..24c323d --- /dev/null +++ b/resources/game_settings/game_options_settings_resource.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="GameOptionsSettingsResource" load_steps=2 format=3 uid="uid://cnpou521v2v8p"] + +[ext_resource type="Script" uid="uid://7yv740somgqf" path="res://resources/game_settings/game_options_settings_resource.gd" id="1_wnf6r"] + +[resource] +script = ExtResource("1_wnf6r") +enable_waila = true +enable_block_highlight = true +metadata/_custom_type_script = "uid://7yv740somgqf" diff --git a/resources/game_settings/game_settings_resource.gd b/resources/game_settings/game_settings_resource.gd new file mode 100644 index 0000000..9ce9b62 --- /dev/null +++ b/resources/game_settings/game_settings_resource.gd @@ -0,0 +1,10 @@ +## The resource for saving game settings. +## This should be not be saved with saves (for game syncing reasons) +class_name GameSettingsResource +extends Resource + + +@export var game_version: String = ProjectSettings.get_setting("application/config/version") + +@export var game_options: GameOptionsSettingsResource = GameOptionsSettingsResource.new() +@export var graphics: GraphicsSettingsResource = GraphicsSettingsResource.new() diff --git a/resources/game_settings/game_settings_resource.gd.uid b/resources/game_settings/game_settings_resource.gd.uid new file mode 100644 index 0000000..1a87000 --- /dev/null +++ b/resources/game_settings/game_settings_resource.gd.uid @@ -0,0 +1 @@ +uid://cffw77d120p56 diff --git a/resources/game_settings/game_settings_resource.tres b/resources/game_settings/game_settings_resource.tres new file mode 100644 index 0000000..a100b47 --- /dev/null +++ b/resources/game_settings/game_settings_resource.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="GameSettingsResource" load_steps=2 format=3 uid="uid://b3kkeyyos7a7"] + +[ext_resource type="Script" uid="uid://cffw77d120p56" path="res://resources/game_settings/game_settings_resource.gd" id="1_fe7s4"] + +[resource] +script = ExtResource("1_fe7s4") +game_version = null +graphics = [] +metadata/_custom_type_script = "uid://cffw77d120p56" diff --git a/resources/game_settings/graphics_settings_resource.gd b/resources/game_settings/graphics_settings_resource.gd new file mode 100644 index 0000000..3152aac --- /dev/null +++ b/resources/game_settings/graphics_settings_resource.gd @@ -0,0 +1,10 @@ +## The resource for saving game settings. +## This should be not be saved with saves (for game syncing reasons) +class_name GraphicsSettingsResource +extends Resource + +@export var resolution: Vector2i = Vector2i(1280, 720) ## Width, Height +@export var resolution_id: int = 0 ## The ID of the item in the OptionsButton list element +@export var fullscreen: bool = false +@export var vsync: bool = false +@export var fov: int = 75 diff --git a/resources/game_settings/graphics_settings_resource.gd.uid b/resources/game_settings/graphics_settings_resource.gd.uid new file mode 100644 index 0000000..0e96168 --- /dev/null +++ b/resources/game_settings/graphics_settings_resource.gd.uid @@ -0,0 +1 @@ +uid://mfghfem8im6o diff --git a/resources/game_settings/graphics_settings_resource.tres b/resources/game_settings/graphics_settings_resource.tres new file mode 100644 index 0000000..18de223 --- /dev/null +++ b/resources/game_settings/graphics_settings_resource.tres @@ -0,0 +1,11 @@ +[gd_resource type="Resource" script_class="GraphicsSettingsResource" load_steps=2 format=3 uid="uid://b07gyfa776057"] + +[ext_resource type="Script" uid="uid://mfghfem8im6o" path="res://resources/game_settings/graphics_settings_resource.gd" id="1_3m2to"] + +[resource] +script = ExtResource("1_3m2to") +resolution = Vector2i(1280, 720) +fullscreen = false +vsync = false +fov = 75 +metadata/_custom_type_script = "uid://mfghfem8im6o" diff --git a/scenes/blocks/block.gd b/scenes/blocks/block.gd index ef98bc7..2af5087 100644 --- a/scenes/blocks/block.gd +++ b/scenes/blocks/block.gd @@ -22,7 +22,7 @@ func get_id() -> String: return id func hook() -> void: - if not Globals.enable_block_highlight: return + if not GameSettingsManager.settings.game_options.enable_block_highlight: return highlight_mesh.visible = true diff --git a/scenes/player/player.gd b/scenes/player/player.gd index cbc7c9d..bd9e58a 100644 --- a/scenes/player/player.gd +++ b/scenes/player/player.gd @@ -17,6 +17,7 @@ extends CharacterBody3D @export var sprint_toggle: bool = false ## Enables toggle sprint instead of hold. When enabled, sprinting will also be disabled when velocity is zero @export var walk_speed: float = 5.0 +@onready var camera: Camera3D = $Head/Camera3D @onready var head: Node3D = $Head @onready var collision_shape_standing: CollisionShape3D = $CollisionShapeStanding @onready var collision_shape_crouching: CollisionShape3D = $CollisionShapeCrouching @@ -47,6 +48,9 @@ func _physics_process(delta: float) -> void: move_and_slide() +func _ready() -> void: + GameSettingsManager.graphics_fov_changed.connect(_on_graphics_fov_changed) + func _apply_gravity(delta: float) -> void: if is_on_floor(): return @@ -115,3 +119,7 @@ func _set_is_sprinting() -> void: is_sprinting = false else: is_sprinting = Input.is_action_pressed("run") + + +func _on_graphics_fov_changed(fov: int) -> void: + camera.fov = fov diff --git a/scenes/player/ray_cast_look.gd b/scenes/player/ray_cast_look.gd index e90bb34..515c8a1 100644 --- a/scenes/player/ray_cast_look.gd +++ b/scenes/player/ray_cast_look.gd @@ -2,8 +2,6 @@ extends RayCast3D func _process(_delta: float) -> void: - if Globals.is_options_menu_active: return - if is_colliding(): var collider: Object = get_collider() diff --git a/scenes/root.gd b/scenes/root.gd new file mode 100644 index 0000000..2037d63 --- /dev/null +++ b/scenes/root.gd @@ -0,0 +1,5 @@ +extends Node + + +func _enter_tree() -> void: + GameSettingsManager.load_settings.emit() diff --git a/scenes/root.gd.uid b/scenes/root.gd.uid new file mode 100644 index 0000000..254b197 --- /dev/null +++ b/scenes/root.gd.uid @@ -0,0 +1 @@ +uid://cnnx3qtqvpwgg diff --git a/scenes/root.tscn b/scenes/root.tscn index 2909961..c2deef4 100644 --- a/scenes/root.tscn +++ b/scenes/root.tscn @@ -1,9 +1,11 @@ -[gd_scene load_steps=3 format=3 uid="uid://cgx0nawwjjj7g"] +[gd_scene load_steps=4 format=3 uid="uid://cgx0nawwjjj7g"] +[ext_resource type="Script" uid="uid://cnnx3qtqvpwgg" path="res://scenes/root.gd" id="1_lrqlo"] [ext_resource type="PackedScene" uid="uid://mkfitwqnerku" path="res://scenes/world/world.tscn" id="2_vvh5c"] [ext_resource type="PackedScene" uid="uid://c7fj7wla8bd70" path="res://scenes/ui/ui.tscn" id="3_vvh5c"] [node name="Root" type="Node"] +script = ExtResource("1_lrqlo") [node name="World" parent="." instance=ExtResource("2_vvh5c")] diff --git a/scenes/ui/menus/settings_menu.gd b/scenes/ui/menus/settings_menu.gd index 697b76e..3b69e40 100644 --- a/scenes/ui/menus/settings_menu.gd +++ b/scenes/ui/menus/settings_menu.gd @@ -2,11 +2,67 @@ class_name SettingsMenu extends Panel +@export_group("Game Option Nodes") +@export var block_highlight_input: CheckButton +@export var waila_input: CheckButton + +@export_group("Graphics Settings Nodes") +@export var resolution_input: OptionButton +@export var fullscreen_input: CheckBox +@export var vsync_input: CheckBox +@export var fov_slider: HSlider +@export var fov_value_label: Label + + +func _ready() -> void: + apply_default_values() + + +func apply_default_values() -> void: + #region Game Options + block_highlight_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_block_highlight) + waila_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_waila) + #endregion + + #region Graphics Settings + # Changing the FOV value should trigger the value_changed signal which should update the camera and label automatically + fov_slider.value = GameSettingsManager.settings.graphics.fov + fullscreen_input.set_pressed_no_signal(GameSettingsManager.settings.graphics.fullscreen) + vsync_input.set_pressed_no_signal(GameSettingsManager.settings.graphics.vsync) + + var current_resolution_index: int = resolution_input.get_item_index(GameSettingsManager.settings.graphics.resolution_id) + resolution_input.select(current_resolution_index) + #endregion + + +#region Game Settings func _on_block_highlighting_toggled(toggled_on: bool) -> void: - Globals.enable_block_highlight = toggled_on + GameSettingsManager.game_options_block_highlight_changed.emit(toggled_on) func _on_enable_waila_toggled(toggled_on: bool) -> void: - Globals.enable_waila = toggled_on + GameSettingsManager.game_options_waila_changed.emit(toggled_on) +#endregion + +#region Graphics Settings +func _on_fov_slider_changed(value: float) -> void: + fov_value_label.text = str(int(value)) + GameSettingsManager.graphics_fov_changed.emit(int(fov_slider.value)) + +func _on_graphics_apply_button_pressed() -> void: + var values: Array = resolution_input.text.split_floats("x") + var id: int = resolution_input.get_selected_id() + + GameSettingsManager.graphics_resolution_changed.emit(Vector2i(values[0], values[1]), id) + GameSettingsManager.graphics_fullscreen_changed.emit(fullscreen_input.button_pressed) + GameSettingsManager.graphics_vsync_changed.emit(vsync_input.button_pressed) + GameSettingsManager.apply_graphics_settings.emit() +#endregion + +#region Audio Settings +#endregion + +#region Input Settings +#endregion func _on_close_button_pressed() -> void: diff --git a/scenes/ui/menus/settings_menu.tscn b/scenes/ui/menus/settings_menu.tscn index 7ae6428..79bfc88 100644 --- a/scenes/ui/menus/settings_menu.tscn +++ b/scenes/ui/menus/settings_menu.tscn @@ -1,9 +1,20 @@ -[gd_scene load_steps=3 format=3 uid="uid://4bdgwwx27m71"] +[gd_scene load_steps=4 format=3 uid="uid://4bdgwwx27m71"] [ext_resource type="Script" uid="uid://37ftrpj14msn" path="res://scenes/ui/menus/settings_menu.gd" id="1_qwcqe"] [ext_resource type="Theme" uid="uid://b5q8b0l6qp1dt" path="res://resources/pause_menu_theme.tres" id="2_mhswj"] -[node name="SettingsMenu" type="Panel"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_80b2v"] +content_margin_left = 10.0 +content_margin_top = 10.0 +content_margin_right = 10.0 +content_margin_bottom = 10.0 +bg_color = Color(0, 0, 0, 0.27451) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 + +[node name="SettingsMenu" type="Panel" node_paths=PackedStringArray("block_highlight_input", "waila_input", "resolution_input", "fullscreen_input", "vsync_input", "fov_slider", "fov_value_label")] process_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -11,6 +22,14 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_qwcqe") +block_highlight_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Game/BlockHighlight/CheckButton") +waila_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Game/Waila/CheckButton") +resolution_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Resolution/OptionButton") +fullscreen_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Fullscreen/CheckBox") +vsync_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/VSync/CheckBox") +fov_slider = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV/HSlider") +fov_value_label = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV/Value") +metadata/_edit_vertical_guides_ = [349.0] [node name="Background" type="ColorRect" parent="."] custom_minimum_size = Vector2(400, 0) @@ -35,47 +54,142 @@ theme_override_constants/margin_top = 10 theme_override_constants/margin_right = 10 theme_override_constants/margin_bottom = 10 -[node name="CenterContainer" type="VBoxContainer" parent="Background/MarginContainer"] +[node name="VBoxContainer" type="VBoxContainer" parent="Background/MarginContainer"] layout_mode = 2 size_flags_horizontal = 4 theme_override_constants/separation = 20 -[node name="Title" type="Label" parent="Background/MarginContainer/CenterContainer"] +[node name="Title" type="Label" parent="Background/MarginContainer/VBoxContainer"] layout_mode = 2 theme_override_font_sizes/font_size = 40 text = "Settings" horizontal_alignment = 1 -[node name="TabContainer" type="TabContainer" parent="Background/MarginContainer/CenterContainer"] +[node name="TabContainer" type="TabContainer" parent="Background/MarginContainer/VBoxContainer"] layout_mode = 2 +theme_override_constants/side_margin = 0 +theme_override_styles/panel = SubResource("StyleBoxFlat_80b2v") current_tab = 0 clip_tabs = false -[node name="Game" type="VBoxContainer" parent="Background/MarginContainer/CenterContainer/TabContainer"] +[node name="Game" type="VBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer"] layout_mode = 2 metadata/_tab_index = 0 -[node name="BlockHighlighting" type="CheckButton" parent="Background/MarginContainer/CenterContainer/TabContainer/Game"] +[node name="BlockHighlight" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game"] layout_mode = 2 -button_pressed = true + +[node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/BlockHighlight"] +layout_mode = 2 +size_flags_horizontal = 3 text = "Enable Block Highlighting" -[node name="EnableWaila" type="CheckButton" parent="Background/MarginContainer/CenterContainer/TabContainer/Game"] +[node name="CheckButton" type="CheckButton" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/BlockHighlight"] layout_mode = 2 button_pressed = true + +[node name="Waila" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/Waila"] +layout_mode = 2 +size_flags_horizontal = 3 text = "Enable Waila" -[node name="Graphics" type="VBoxContainer" parent="Background/MarginContainer/CenterContainer/TabContainer"] +[node name="CheckButton" type="CheckButton" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/Waila"] +layout_mode = 2 +button_pressed = true + +[node name="Graphics" type="VBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer"] visible = false layout_mode = 2 metadata/_tab_index = 1 -[node name="Audio" type="VBoxContainer" parent="Background/MarginContainer/CenterContainer/TabContainer"] +[node name="Resolution" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Resolution"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Resolution" + +[node name="OptionButton" type="OptionButton" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Resolution"] +layout_mode = 2 +selected = 0 +item_count = 6 +popup/item_0/text = "1280x720" +popup/item_0/id = 0 +popup/item_1/text = "1280x800" +popup/item_1/id = 4 +popup/item_2/text = "1920x1080" +popup/item_2/id = 1 +popup/item_3/text = "2560x1440" +popup/item_3/id = 2 +popup/item_4/text = "3440x1440" +popup/item_4/id = 3 +popup/item_5/text = "3840 x 2160" +popup/item_5/id = 5 + +[node name="Fullscreen" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Fullscreen"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Fullscreen" + +[node name="CheckBox" type="CheckBox" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Fullscreen"] +layout_mode = 2 + +[node name="VSync" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/VSync"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "VSync" + +[node name="CheckBox" type="CheckBox" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/VSync"] +layout_mode = 2 + +[node name="FOV" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "FOV" + +[node name="HSlider" type="HSlider" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV"] +layout_mode = 2 +size_flags_horizontal = 3 +min_value = 60.0 +max_value = 120.0 +value = 75.0 +rounded = true +ticks_on_borders = true + +[node name="Value" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV"] +layout_mode = 2 +text = "75" + +[node name="HSeparator" type="HSeparator" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"] +layout_mode = 2 +theme_override_constants/separation = 20 + +[node name="CenterContainer" type="CenterContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"] +layout_mode = 2 + +[node name="ApplyButton" type="Button" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/CenterContainer"] +layout_mode = 2 +text = "Apply/Save" + +[node name="Audio" type="VBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer"] visible = false layout_mode = 2 metadata/_tab_index = 2 -[node name="Inputs" type="VBoxContainer" parent="Background/MarginContainer/CenterContainer/TabContainer"] +[node name="Inputs" type="VBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer"] visible = false layout_mode = 2 metadata/_tab_index = 3 @@ -100,6 +214,8 @@ layout_mode = 2 theme = ExtResource("2_mhswj") text = "Close Settings" -[connection signal="toggled" from="Background/MarginContainer/CenterContainer/TabContainer/Game/BlockHighlighting" to="." method="_on_block_highlighting_toggled"] -[connection signal="toggled" from="Background/MarginContainer/CenterContainer/TabContainer/Game/EnableWaila" to="." method="_on_enable_waila_toggled"] +[connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/BlockHighlight/CheckButton" to="." method="_on_block_highlighting_toggled"] +[connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/Waila/CheckButton" to="." method="_on_enable_waila_toggled"] +[connection signal="value_changed" from="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV/HSlider" to="." method="_on_fov_slider_changed"] +[connection signal="pressed" from="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/CenterContainer/ApplyButton" to="." method="_on_graphics_apply_button_pressed"] [connection signal="pressed" from="Background/BottomRow/CloseButton" to="." method="_on_close_button_pressed"] diff --git a/scenes/ui/waila.gd b/scenes/ui/waila.gd index d70c0aa..cb9b19b 100644 --- a/scenes/ui/waila.gd +++ b/scenes/ui/waila.gd @@ -29,7 +29,7 @@ func get_target() -> Block: return _target func hook_target(id: String) -> void: - if not Globals.enable_waila: return + if not GameSettingsManager.settings.game_options.enable_waila: return if not id: return var item: ItemResource = DBItems.data[id]