From 9825023feb00216c7fbc0aa74c0294310a7f0c20 Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Mon, 24 Mar 2025 15:20:33 -0400 Subject: [PATCH 1/6] Seperating BlockMesh scene and script --- scenes/blocks/block.gd | 32 +++++------------------ scenes/blocks/block.tscn | 20 ++++++-------- scenes/blocks/block_mesh.gd | 6 +++++ scenes/blocks/block_mesh.gd.uid | 1 + scenes/blocks/block_mesh.tscn | 15 +++++++++++ scenes/blocks/dropped_block.gd | 25 ++++-------------- scenes/blocks/dropped_block.tscn | 45 ++++++++++++-------------------- 7 files changed, 59 insertions(+), 85 deletions(-) create mode 100644 scenes/blocks/block_mesh.gd create mode 100644 scenes/blocks/block_mesh.gd.uid create mode 100644 scenes/blocks/block_mesh.tscn diff --git a/scenes/blocks/block.gd b/scenes/blocks/block.gd index 231cc0b..8ad8bdc 100644 --- a/scenes/blocks/block.gd +++ b/scenes/blocks/block.gd @@ -2,21 +2,17 @@ class_name Block extends StaticBody3D -@onready var collision_shape: CollisionShape3D = $CollisionShape3D -@onready var highlight_mesh: MeshInstance3D = $HighlightMesh -@onready var block_mesh: MeshInstance3D = $BlockMesh +@export var block_mesh: BlockMesh +@export var collision_shape: CollisionShape3D +@export var highlight_mesh: MeshInstance3D var id: String -var resource: BlockResource func _exit_tree() -> void: if Waila.ref.get_target() == self: Waila.ref.release_target() -func _ready() -> void: - _apply_material() - func get_id() -> String: return id @@ -36,21 +32,7 @@ func release() -> void: func set_id(block_id: String) -> void: id = block_id - _load_resource_data() - _apply_material() - - -func _apply_material() -> void: - if block_mesh == null: return - if resource == null: return - block_mesh.set_surface_override_material(0, resource.material_texture) - -func _load_resource_data() -> void: - if not id: - printerr("Could not load resource data. Block ID was empty.") - return - - if not id in DBItems.data: - printerr("Could not load resource data. Unknown Block ID: ", id) - return - resource = DBItems.data[id] + if id in DBItems.data: + block_mesh.apply_material(DBItems.data[id].material_texture) + else: + printerr("Unknown Block ID: ", id) diff --git a/scenes/blocks/block.tscn b/scenes/blocks/block.tscn index 68e4edc..f08fe97 100644 --- a/scenes/blocks/block.tscn +++ b/scenes/blocks/block.tscn @@ -1,8 +1,8 @@ -[gd_scene load_steps=10 format=3 uid="uid://b8evbp40gnomt"] +[gd_scene load_steps=8 format=3 uid="uid://b8evbp40gnomt"] [ext_resource type="Script" uid="uid://buvqmrrtmxs2h" path="res://scenes/blocks/block.gd" id="1_7fut1"] [ext_resource type="Material" uid="uid://bgc6efqf8aiqo" path="res://assets/materials/block_highlight.tres" id="2_524ei"] -[ext_resource type="Texture2D" uid="uid://dsvk3faenewrl" path="res://assets/textures/grass-block.png" id="3_qi7hx"] +[ext_resource type="PackedScene" uid="uid://c8dch55d3txns" path="res://scenes/blocks/block_mesh.tscn" id="3_60een"] [ext_resource type="PackedScene" uid="uid://baki8rbf1ti0r" path="res://save_load/components/save_data_component.tscn" id="4_60een"] [ext_resource type="Resource" uid="uid://dfos8np8agysk" path="res://save_load/resources/node_types/block_data_resource.tres" id="5_60een"] @@ -12,14 +12,11 @@ material = ExtResource("2_524ei") size = Vector3(1.01, 1.01, 1.01) -[sub_resource type="BoxMesh" id="BoxMesh_e15ke"] - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4e127"] -albedo_texture = ExtResource("3_qi7hx") -texture_filter = 0 - -[node name="Block" type="StaticBody3D"] +[node name="Block" type="StaticBody3D" node_paths=PackedStringArray("block_mesh", "collision_shape", "highlight_mesh")] script = ExtResource("1_7fut1") +block_mesh = NodePath("BlockMesh") +collision_shape = NodePath("CollisionShape3D") +highlight_mesh = NodePath("HighlightMesh") [node name="CollisionShape3D" type="CollisionShape3D" parent="."] visible = false @@ -29,9 +26,8 @@ shape = SubResource("BoxShape3D_n5naa") visible = false mesh = SubResource("BoxMesh_7fut1") -[node name="BlockMesh" type="MeshInstance3D" parent="."] -mesh = SubResource("BoxMesh_e15ke") -surface_material_override/0 = SubResource("StandardMaterial3D_4e127") +[node name="BlockMesh" parent="." instance=ExtResource("3_60een")] +skeleton = NodePath("") [node name="SaveDataComponent" parent="." instance=ExtResource("4_60een")] save_data_resource = ExtResource("5_60een") diff --git a/scenes/blocks/block_mesh.gd b/scenes/blocks/block_mesh.gd new file mode 100644 index 0000000..3bc0551 --- /dev/null +++ b/scenes/blocks/block_mesh.gd @@ -0,0 +1,6 @@ +class_name BlockMesh +extends MeshInstance3D + + +func apply_material(material_texture: StandardMaterial3D) -> void: + set_surface_override_material(0, material_texture) diff --git a/scenes/blocks/block_mesh.gd.uid b/scenes/blocks/block_mesh.gd.uid new file mode 100644 index 0000000..32ec587 --- /dev/null +++ b/scenes/blocks/block_mesh.gd.uid @@ -0,0 +1 @@ +uid://c2rjyhwln6bmh diff --git a/scenes/blocks/block_mesh.tscn b/scenes/blocks/block_mesh.tscn new file mode 100644 index 0000000..6f7f469 --- /dev/null +++ b/scenes/blocks/block_mesh.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=5 format=3 uid="uid://c8dch55d3txns"] + +[ext_resource type="Texture2D" uid="uid://dsvk3faenewrl" path="res://assets/textures/grass-block.png" id="1_idwey"] +[ext_resource type="Script" uid="uid://c2rjyhwln6bmh" path="res://scenes/blocks/block_mesh.gd" id="2_06oav"] + +[sub_resource type="BoxMesh" id="BoxMesh_idwey"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_bqoxu"] +albedo_texture = ExtResource("1_idwey") +texture_filter = 0 + +[node name="BlockMesh" type="MeshInstance3D"] +mesh = SubResource("BoxMesh_idwey") +surface_material_override/0 = SubResource("StandardMaterial3D_bqoxu") +script = ExtResource("2_06oav") diff --git a/scenes/blocks/dropped_block.gd b/scenes/blocks/dropped_block.gd index 5212e95..6a622bb 100644 --- a/scenes/blocks/dropped_block.gd +++ b/scenes/blocks/dropped_block.gd @@ -6,11 +6,10 @@ extends RigidBody3D ## This is to ensure that the item isn't picked up immediately after throwing @export var pickup_timeout: int = 1 @export var animation_player: AnimationPlayer -@export var block_mesh: MeshInstance3D +@export var block_mesh: BlockMesh @export var pickup_area: Area3D var id: String -var resource: BlockResource var impulse: Vector3 = Vector3.ZERO @@ -41,24 +40,10 @@ func initialize(block_id: String, start_position: Vector3, drop_direction: Vecto func set_id(block_id: String) -> void: id = block_id - _load_resource_data() - _apply_material() - - -func _apply_material() -> void: - if block_mesh == null: return - if resource == null: return - block_mesh.set_surface_override_material(0, resource.material_texture) - -func _load_resource_data() -> void: - if not id: - printerr("Could not load resource data. Block ID was empty.") - return - - if not id in DBItems.data: - printerr("Could not load resource data. Unknown Block ID: ", id) - return - resource = DBItems.data[id] + if id in DBItems.data: + block_mesh.apply_material(DBItems.data[id].material_texture) + else: + printerr("Unknown Block ID: ", id) func _on_pickup_area_body_entered(body: Node3D) -> void: diff --git a/scenes/blocks/dropped_block.tscn b/scenes/blocks/dropped_block.tscn index 01beab1..0473dae 100644 --- a/scenes/blocks/dropped_block.tscn +++ b/scenes/blocks/dropped_block.tscn @@ -1,21 +1,21 @@ -[gd_scene load_steps=10 format=3 uid="uid://dq6alec7d35gc"] +[gd_scene load_steps=8 format=3 uid="uid://dq6alec7d35gc"] [ext_resource type="Script" uid="uid://d2uws50yjvp6w" path="res://scenes/blocks/dropped_block.gd" id="1_y8usf"] -[ext_resource type="Texture2D" uid="uid://dsvk3faenewrl" path="res://assets/textures/grass-block.png" id="4_jhjal"] +[ext_resource type="PackedScene" uid="uid://c8dch55d3txns" path="res://scenes/blocks/block_mesh.tscn" id="2_5kft2"] [sub_resource type="Animation" id="Animation_kym7p"] length = 0.001 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("BlockMesh:position") +tracks/0/path = NodePath("BlockMesh:scale") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, -"values": [Vector3(0, -0.2, 0)] +"values": [Vector3(1, 1, 1)] } tracks/1/type = "value" tracks/1/imported = false @@ -27,19 +27,19 @@ tracks/1/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, -"values": [Vector3(0, 0, 0.261799)] +"values": [Vector3(0, 0, 0)] } tracks/2/type = "value" tracks/2/imported = false tracks/2/enabled = true -tracks/2/path = NodePath("BlockMesh:scale") +tracks/2/path = NodePath("BlockMesh:position") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, -"values": [Vector3(0.25, 0.25, 0.25)] +"values": [Vector3(0, 0, 0)] } [sub_resource type="Animation" id="Animation_50ggx"] @@ -50,14 +50,14 @@ step = 0.1 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("BlockMesh:position") +tracks/0/path = NodePath("BlockMesh:scale") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { -"times": PackedFloat32Array(0, 0.5, 1, 1.5, 2), -"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), "update": 0, -"values": [Vector3(0, -0.2, 0), Vector3(0, -0.3, 0), Vector3(0, -0.2, 0), Vector3(0, -0.1, 0), Vector3(0, -0.2, 0)] +"values": [Vector3(0.25, 0.25, 0.25)] } tracks/1/type = "value" tracks/1/imported = false @@ -74,14 +74,14 @@ tracks/1/keys = { tracks/2/type = "value" tracks/2/imported = false tracks/2/enabled = true -tracks/2/path = NodePath("BlockMesh:scale") +tracks/2/path = NodePath("BlockMesh:position") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), +"times": PackedFloat32Array(0, 0.5, 1, 1.5, 2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), "update": 0, -"values": [Vector3(0.25, 0.25, 0.25)] +"values": [Vector3(0, -0.2, 0), Vector3(0, -0.3, 0), Vector3(0, -0.2, 0), Vector3(0, -0.1, 0), Vector3(0, -0.2, 0)] } [sub_resource type="AnimationLibrary" id="AnimationLibrary_kym7p"] @@ -92,14 +92,7 @@ _data = { [sub_resource type="BoxShape3D" id="BoxShape3D_kkyxx"] -[sub_resource type="BoxMesh" id="BoxMesh_e15ke"] - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4e127"] -albedo_texture = ExtResource("4_jhjal") -texture_filter = 0 - [sub_resource type="SphereShape3D" id="SphereShape3D_5kft2"] -radius = 1.0 [node name="DroppedBlock" type="RigidBody3D" node_paths=PackedStringArray("animation_player", "block_mesh", "pickup_area")] collision_layer = 4 @@ -118,21 +111,17 @@ autoplay = "RESET" visible = false shape = SubResource("BoxShape3D_kkyxx") -[node name="BlockMesh" type="MeshInstance3D" parent="."] -transform = Transform3D(0.241481, -0.0647047, 0, 0.0647047, 0.241481, 0, 0, 0, 0.25, 0, -0.2, 0) -mesh = SubResource("BoxMesh_e15ke") -skeleton = NodePath("") -surface_material_override/0 = SubResource("StandardMaterial3D_4e127") +[node name="BlockMesh" parent="." instance=ExtResource("2_5kft2")] [node name="PickupArea" type="Area3D" parent="."] transform = Transform3D(0.965926, -0.258819, 0, 0.258819, 0.965926, 0, 0, 0, 1, 0, 0, 0) -visible = false collision_layer = 4 collision_mask = 2 monitoring = false monitorable = false [node name="CollisionShape3D" type="CollisionShape3D" parent="PickupArea"] +visible = false shape = SubResource("SphereShape3D_5kft2") [connection signal="body_entered" from="PickupArea" to="." method="_on_pickup_area_body_entered"] -- 2.30.1 From 57484a4576f2c2de7a14279586c12b9c3a1bea8e Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Mon, 24 Mar 2025 15:48:20 -0400 Subject: [PATCH 2/6] Moving UI to the left and adding the held block --- scenes/player/player.gd | 10 ++++++++++ scenes/player/player.tscn | 6 +++++- scenes/ui/quick_slots.tscn | 19 ++++++++----------- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/scenes/player/player.gd b/scenes/player/player.gd index db94c44..8283ab5 100644 --- a/scenes/player/player.gd +++ b/scenes/player/player.gd @@ -19,6 +19,7 @@ extends CharacterBody3D @export var walk_speed: float = 5.0 @onready var camera: Camera3D = $Head/Camera3D +@onready var block_mesh: BlockMesh = $Head/Camera3D/BlockMesh @onready var head: Node3D = $Head @onready var collision_shape_standing: CollisionShape3D = $CollisionShapeStanding @onready var collision_shape_crouching: CollisionShape3D = $CollisionShapeCrouching @@ -53,6 +54,9 @@ func _physics_process(delta: float) -> void: func _ready() -> void: GameSettingsManager.graphics_fov_changed.connect(_on_graphics_fov_changed) + InventoryManager.quick_slot_item_changed.connect(_on_quick_slot_item_changed) + + _update_held_block_mesh(InventoryManager.quick_slot_item_id) func _apply_gravity(delta: float) -> void: @@ -123,6 +127,12 @@ func _set_is_sprinting() -> void: else: is_sprinting = Input.is_action_pressed("run") +func _update_held_block_mesh(item_id: String) -> void: + block_mesh.apply_material(DBItems.data[item_id].material_texture) + func _on_graphics_fov_changed(fov: int) -> void: camera.fov = fov + +func _on_quick_slot_item_changed(item_id: String) -> void: + _update_held_block_mesh(item_id) diff --git a/scenes/player/player.tscn b/scenes/player/player.tscn index 6e9b83a..504509f 100644 --- a/scenes/player/player.tscn +++ b/scenes/player/player.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=7 format=3 uid="uid://beu1b4leqwgh3"] +[gd_scene load_steps=8 format=3 uid="uid://beu1b4leqwgh3"] [ext_resource type="Script" uid="uid://daly0bs0oat3j" path="res://scenes/player/player.gd" id="1_7sql3"] [ext_resource type="Script" uid="uid://bruuttf8j7wet" path="res://scenes/player/ray_cast_look.gd" id="2_dovo2"] +[ext_resource type="PackedScene" uid="uid://c8dch55d3txns" path="res://scenes/blocks/block_mesh.tscn" id="2_p47bc"] [ext_resource type="PackedScene" uid="uid://baki8rbf1ti0r" path="res://save_load/components/save_data_component.tscn" id="3_lvxji"] [ext_resource type="Resource" uid="uid://bvsurbn5xgchr" path="res://save_load/resources/node_types/player_data_resource.tres" id="4_p47bc"] @@ -33,6 +34,9 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.8, 0) [node name="Camera3D" type="Camera3D" parent="Head"] +[node name="BlockMesh" parent="Head/Camera3D" instance=ExtResource("2_p47bc")] +transform = Transform3D(1, 0, 0, 0, 0.965926, -0.258819, 0, 0.258819, 0.965926, 0, -0.680035, -1.7196) + [node name="RayCastLook" type="RayCast3D" parent="Head"] target_position = Vector3(0, 0, -10) debug_shape_custom_color = Color(0.753415, 4.77457e-05, 0.578804, 1) diff --git a/scenes/ui/quick_slots.tscn b/scenes/ui/quick_slots.tscn index 6022528..1f00638 100644 --- a/scenes/ui/quick_slots.tscn +++ b/scenes/ui/quick_slots.tscn @@ -10,16 +10,14 @@ [ext_resource type="Texture2D" uid="uid://cpllegyqnfnrh" path="res://assets/textures/glass.png" id="8_bup65"] [node name="QuickSlots" type="MarginContainer"] -anchors_preset = 7 -anchor_left = 0.5 -anchor_top = 1.0 -anchor_right = 0.5 -anchor_bottom = 1.0 -offset_left = -20.0 -offset_top = -40.0 -offset_right = 20.0 -grow_horizontal = 2 -grow_vertical = 0 +anchors_preset = 4 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_top = -220.0 +offset_right = 80.0 +offset_bottom = 220.0 +grow_vertical = 2 +size_flags_horizontal = 0 theme_override_constants/margin_left = 8 theme_override_constants/margin_top = 8 theme_override_constants/margin_right = 8 @@ -31,7 +29,6 @@ highlight_theme = ExtResource("2_ps55n") layout_mode = 2 theme_override_constants/h_separation = 8 theme_override_constants/v_separation = 8 -columns = 10 [node name="Slot0" type="Panel" parent="GridContainer"] custom_minimum_size = Vector2(64, 64) -- 2.30.1 From 32f7a426dbc2f03ea7f13fb09dd9986405821da9 Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Mon, 24 Mar 2025 16:16:12 -0400 Subject: [PATCH 3/6] Adding options for disabling quickslots or held block --- autoloads/game_settings_manager.gd | 12 ++++++++ .../game_options_settings_resource.gd | 2 ++ scenes/player/player.gd | 8 ++++- scenes/ui/menus/settings_menu.gd | 11 +++++++ scenes/ui/menus/settings_menu.tscn | 30 ++++++++++++++++++- scenes/ui/ui.gd | 4 ++- 6 files changed, 64 insertions(+), 3 deletions(-) diff --git a/autoloads/game_settings_manager.gd b/autoloads/game_settings_manager.gd index c6d4eba..276570c 100644 --- a/autoloads/game_settings_manager.gd +++ b/autoloads/game_settings_manager.gd @@ -3,6 +3,8 @@ extends Node #region Game Options Signals signal game_options_block_highlight_changed(block_highlight_enabled: bool) +signal game_options_held_block_ui_changed(held_block_enabled: bool) +signal game_options_quickslots_ui_changed(quickslots_enabled: bool) signal game_options_waila_changed(waila_enabled: bool) #endregion @@ -32,6 +34,8 @@ var settings: GameSettingsResource = GameSettingsResource.new() func _init() -> void: game_options_block_highlight_changed.connect(_on_game_options_block_highlight_changed) + game_options_held_block_ui_changed.connect(_on_game_options_held_block_ui_changed) + game_options_quickslots_ui_changed.connect(_on_game_options_quickslots_ui_changed) game_options_waila_changed.connect(_on_game_options_waila_changed) graphics_fov_changed.connect(_on_graphics_fov_changed) @@ -49,6 +53,14 @@ 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_held_block_ui_changed(held_block_enabled: bool) -> void: + settings.game_options.enable_held_block = held_block_enabled + _on_save_settings() + +func _on_game_options_quickslots_ui_changed(quickslots_enabled: bool) -> void: + settings.game_options.enable_quickslots_ui = quickslots_enabled + _on_save_settings() + func _on_game_options_waila_changed(waila_enabled: bool) -> void: settings.game_options.enable_waila = waila_enabled _on_save_settings() diff --git a/resources/game_settings/game_options_settings_resource.gd b/resources/game_settings/game_options_settings_resource.gd index 5b06441..bd78936 100644 --- a/resources/game_settings/game_options_settings_resource.gd +++ b/resources/game_settings/game_options_settings_resource.gd @@ -4,3 +4,5 @@ extends Resource @export var enable_waila: bool = true ## Enable `What Am I Looking At` UI @export var enable_block_highlight: bool = true +@export var enable_quickslots_ui: bool = true +@export var enable_held_block: bool = true diff --git a/scenes/player/player.gd b/scenes/player/player.gd index 8283ab5..7779e28 100644 --- a/scenes/player/player.gd +++ b/scenes/player/player.gd @@ -54,6 +54,7 @@ func _physics_process(delta: float) -> void: func _ready() -> void: GameSettingsManager.graphics_fov_changed.connect(_on_graphics_fov_changed) + GameSettingsManager.game_options_held_block_ui_changed.connect(_on_game_options_held_block_ui_changed) InventoryManager.quick_slot_item_changed.connect(_on_quick_slot_item_changed) _update_held_block_mesh(InventoryManager.quick_slot_item_id) @@ -128,9 +129,14 @@ func _set_is_sprinting() -> void: is_sprinting = Input.is_action_pressed("run") func _update_held_block_mesh(item_id: String) -> void: - block_mesh.apply_material(DBItems.data[item_id].material_texture) + block_mesh.visible = GameSettingsManager.settings.game_options.enable_held_block + if GameSettingsManager.settings.game_options.enable_held_block: + block_mesh.apply_material(DBItems.data[item_id].material_texture) +func _on_game_options_held_block_ui_changed(toggled: bool) -> void: + block_mesh.visible = toggled + func _on_graphics_fov_changed(fov: int) -> void: camera.fov = fov diff --git a/scenes/ui/menus/settings_menu.gd b/scenes/ui/menus/settings_menu.gd index 3b69e40..b192ce9 100644 --- a/scenes/ui/menus/settings_menu.gd +++ b/scenes/ui/menus/settings_menu.gd @@ -4,6 +4,8 @@ extends Panel @export_group("Game Option Nodes") @export var block_highlight_input: CheckButton +@export var held_block_ui_input: CheckButton +@export var quick_slots_ui_input: CheckButton @export var waila_input: CheckButton @export_group("Graphics Settings Nodes") @@ -18,9 +20,12 @@ func _ready() -> void: apply_default_values() +## Sets the default values of all the inputs func apply_default_values() -> void: #region Game Options block_highlight_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_block_highlight) + held_block_ui_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_held_block) + quick_slots_ui_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_quickslots_ui) waila_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_waila) #endregion @@ -39,6 +44,12 @@ func apply_default_values() -> void: func _on_block_highlighting_toggled(toggled_on: bool) -> void: GameSettingsManager.game_options_block_highlight_changed.emit(toggled_on) +func _on_held_block_ui_toggled(toggled_on: bool) -> void: + GameSettingsManager.game_options_held_block_ui_changed.emit(toggled_on) + +func _on_quickslots_ui_toggled(toggled_on: bool) -> void: + GameSettingsManager.game_options_quickslots_ui_changed.emit(toggled_on) + func _on_enable_waila_toggled(toggled_on: bool) -> void: GameSettingsManager.game_options_waila_changed.emit(toggled_on) #endregion diff --git a/scenes/ui/menus/settings_menu.tscn b/scenes/ui/menus/settings_menu.tscn index 79bfc88..9a6250e 100644 --- a/scenes/ui/menus/settings_menu.tscn +++ b/scenes/ui/menus/settings_menu.tscn @@ -14,7 +14,7 @@ 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")] +[node name="SettingsMenu" type="Panel" node_paths=PackedStringArray("block_highlight_input", "held_block_ui_input", "quick_slots_ui_input", "waila_input", "resolution_input", "fullscreen_input", "vsync_input", "fov_slider", "fov_value_label")] process_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -23,6 +23,8 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_qwcqe") block_highlight_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Game/BlockHighlight/CheckButton") +held_block_ui_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Game/HeldBlockUI/CheckButton") +quick_slots_ui_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Game/QuickslotsUI/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") @@ -100,6 +102,30 @@ text = "Enable Waila" layout_mode = 2 button_pressed = true +[node name="QuickslotsUI" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/QuickslotsUI"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Enable Quickslots UI" + +[node name="CheckButton" type="CheckButton" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/QuickslotsUI"] +layout_mode = 2 +button_pressed = true + +[node name="HeldBlockUI" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/HeldBlockUI"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Enable Player Held Block" + +[node name="CheckButton" type="CheckButton" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/HeldBlockUI"] +layout_mode = 2 +button_pressed = true + [node name="Graphics" type="VBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer"] visible = false layout_mode = 2 @@ -216,6 +242,8 @@ text = "Close Settings" [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="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/QuickslotsUI/CheckButton" to="." method="_on_quickslots_ui_toggled"] +[connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/HeldBlockUI/CheckButton" to="." method="_on_held_block_ui_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/ui.gd b/scenes/ui/ui.gd index 86dbc6d..1f201a8 100644 --- a/scenes/ui/ui.gd +++ b/scenes/ui/ui.gd @@ -17,6 +17,8 @@ func _ready() -> void: SignalManager.open_settings_menu.connect(_on_open_settings_menu) SignalManager.resume_game.connect(_on_resume_game) + _on_resume_game() + func hide_menus() -> void: pause_menu.visible = false @@ -58,7 +60,7 @@ func _on_resume_game() -> void: hide_menus() crosshair.visible = true - quick_slots.visible = true + quick_slots.visible = true and GameSettingsManager.settings.game_options.enable_quickslots_ui waila.visible = true get_tree().paused = false -- 2.30.1 From ff0ce03086efb3287854faafb1a3e73e74c1aafc Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Mon, 24 Mar 2025 16:21:25 -0400 Subject: [PATCH 4/6] Renaming save_signal and load_signal --- autoloads/game_settings_manager.gd | 22 +++++++++++----------- scenes/root.gd | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/autoloads/game_settings_manager.gd b/autoloads/game_settings_manager.gd index 276570c..c17bc8f 100644 --- a/autoloads/game_settings_manager.gd +++ b/autoloads/game_settings_manager.gd @@ -16,8 +16,8 @@ signal graphics_vsync_changed(vsync_enabled: bool) signal graphics_fov_changed(fov: int) #endregion -signal load_settings -signal save_settings +signal load_game_settings +signal save_game_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] @@ -44,26 +44,26 @@ func _init() -> void: 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) + load_game_settings.connect(load_settings) + save_game_settings.connect(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() + save_settings() func _on_game_options_held_block_ui_changed(held_block_enabled: bool) -> void: settings.game_options.enable_held_block = held_block_enabled - _on_save_settings() + save_settings() func _on_game_options_quickslots_ui_changed(quickslots_enabled: bool) -> void: settings.game_options.enable_quickslots_ui = quickslots_enabled - _on_save_settings() + save_settings() func _on_game_options_waila_changed(waila_enabled: bool) -> void: settings.game_options.enable_waila = waila_enabled - _on_save_settings() + save_settings() #endregion #region Graphics Settings @@ -80,7 +80,7 @@ func _on_apply_graphics_settings() -> void: else: DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED) - _on_save_settings() + save_settings() func _on_graphics_fov_changed(fov: int) -> void: settings.graphics.fov = fov @@ -98,7 +98,7 @@ func _on_graphics_vsync_changed(vsync_enabled: bool) -> void: #region Saving and Loading Settings -func _on_load_settings(apply_after_load: bool = true) -> void: +func 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 @@ -111,7 +111,7 @@ func _on_load_settings(apply_after_load: bool = true) -> void: if apply_after_load: apply_graphics_settings.emit() -func _on_save_settings() -> void: +func save_settings() -> void: if !DirAccess.dir_exists_absolute(save_data_path): DirAccess.make_dir_absolute(save_data_path) diff --git a/scenes/root.gd b/scenes/root.gd index 2037d63..ef4ef06 100644 --- a/scenes/root.gd +++ b/scenes/root.gd @@ -2,4 +2,4 @@ extends Node func _enter_tree() -> void: - GameSettingsManager.load_settings.emit() + GameSettingsManager.load_game_settings.emit() -- 2.30.1 From 1c63a25f572d525fb55753973b553d43367b2cf8 Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Mon, 24 Mar 2025 16:25:59 -0400 Subject: [PATCH 5/6] Hide held block when opening settings --- scenes/player/player.gd | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scenes/player/player.gd b/scenes/player/player.gd index 7779e28..5bd4c6c 100644 --- a/scenes/player/player.gd +++ b/scenes/player/player.gd @@ -56,6 +56,8 @@ func _ready() -> void: GameSettingsManager.graphics_fov_changed.connect(_on_graphics_fov_changed) GameSettingsManager.game_options_held_block_ui_changed.connect(_on_game_options_held_block_ui_changed) InventoryManager.quick_slot_item_changed.connect(_on_quick_slot_item_changed) + SignalManager.resume_game.connect(_on_resume_game) + SignalManager.open_pause_menu.connect(_on_open_pause_menu) _update_held_block_mesh(InventoryManager.quick_slot_item_id) @@ -142,3 +144,9 @@ func _on_graphics_fov_changed(fov: int) -> void: func _on_quick_slot_item_changed(item_id: String) -> void: _update_held_block_mesh(item_id) + +func _on_open_pause_menu() -> void: + block_mesh.visible = false + +func _on_resume_game() -> void: + block_mesh.visible = GameSettingsManager.settings.game_options.enable_held_block -- 2.30.1 From e78240ca89e4d9de10bed23ab2cd103bfaf7f95e Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Mon, 24 Mar 2025 16:29:15 -0400 Subject: [PATCH 6/6] Reverse previous/next quickslot due to vertical alignment --- scenes/ui/quick_slots.gd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scenes/ui/quick_slots.gd b/scenes/ui/quick_slots.gd index 046b59d..7ea317f 100644 --- a/scenes/ui/quick_slots.gd +++ b/scenes/ui/quick_slots.gd @@ -65,10 +65,10 @@ func select_quick_slot(slot_index: int) -> void: InventoryManager.quick_slot_item_changed.emit(get_selected_item()) func select_previous_item() -> void: - select_quick_slot(_selected_item - 1) + select_quick_slot(_selected_item + 1) func select_next_item() -> void: - select_quick_slot(_selected_item + 1) + select_quick_slot(_selected_item - 1) func update_highlighted_slot() -> void: var previous_slot: Panel = slots_container.get_child(_previous_selected_item) -- 2.30.1