From cad4484ba6b360afcb3e8a11319b4771efb35275 Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Tue, 4 Mar 2025 20:37:34 -0500 Subject: [PATCH] Adding a Wailight highlight and moving target into Waila class --- assets/materials/block_highlight.tres | 5 +++++ scenes/blocks/block.gd | 7 +++++++ scenes/blocks/block.tscn | 11 ++++++++++- scenes/player/ray_cast_3d.gd | 26 ++++++++++++++++++++++---- scenes/ui/waila.gd | 11 ++++++++++- 5 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 assets/materials/block_highlight.tres diff --git a/assets/materials/block_highlight.tres b/assets/materials/block_highlight.tres new file mode 100644 index 0000000..2aa689c --- /dev/null +++ b/assets/materials/block_highlight.tres @@ -0,0 +1,5 @@ +[gd_resource type="StandardMaterial3D" format=3 uid="uid://bgc6efqf8aiqo"] + +[resource] +transparency = 1 +albedo_color = Color(1, 1, 1, 0.0980392) diff --git a/scenes/blocks/block.gd b/scenes/blocks/block.gd index 642c1a8..bedbc4e 100644 --- a/scenes/blocks/block.gd +++ b/scenes/blocks/block.gd @@ -3,6 +3,7 @@ extends StaticBody3D @onready var block_faces: Node3D = $BlockFaces +@onready var highlight_mesh: MeshInstance3D = $HighlightMesh var id: String var resource: BlockResource @@ -15,6 +16,12 @@ func _ready() -> void: func get_id() -> String: return id +func hook() -> void: + highlight_mesh.visible = true + +func release() -> void: + highlight_mesh.visible = false + func set_id(block_id: String) -> void: id = block_id _get_resource_data() diff --git a/scenes/blocks/block.tscn b/scenes/blocks/block.tscn index 129fc22..246a63c 100644 --- a/scenes/blocks/block.tscn +++ b/scenes/blocks/block.tscn @@ -1,11 +1,16 @@ -[gd_scene load_steps=4 format=3 uid="uid://col07xd76y60h"] +[gd_scene load_steps=6 format=3 uid="uid://col07xd76y60h"] [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"] [sub_resource type="BoxShape3D" id="BoxShape3D_n5naa"] [sub_resource type="QuadMesh" id="QuadMesh_n5naa"] +[sub_resource type="BoxMesh" id="BoxMesh_7fut1"] +material = ExtResource("2_524ei") +size = Vector3(1.01, 1.01, 1.01) + [node name="Block" type="StaticBody3D"] script = ExtResource("1_7fut1") @@ -43,3 +48,7 @@ skeleton = NodePath("../..") transform = Transform3D(-4.37114e-08, 1, -4.37114e-08, 0, -4.37114e-08, -1, -1, -4.37114e-08, 1.91069e-15, 0, -0.5, 0) mesh = SubResource("QuadMesh_n5naa") skeleton = NodePath("../..") + +[node name="HighlightMesh" type="MeshInstance3D" parent="."] +visible = false +mesh = SubResource("BoxMesh_7fut1") diff --git a/scenes/player/ray_cast_3d.gd b/scenes/player/ray_cast_3d.gd index 83b785e..9676607 100644 --- a/scenes/player/ray_cast_3d.gd +++ b/scenes/player/ray_cast_3d.gd @@ -6,7 +6,25 @@ func _process(_delta: float) -> void: var collider: Object = get_collider() if collider is Block: - var id: String = collider.get_id() - Waila.ref.hook_target(id) - else: - Waila.ref.release_target() # Not seeing anything + if Waila.ref.get_target() == collider: + return + if not Waila.ref.get_target(): + hook_block(collider) + else: + release_target() + else: # Not looking at anything + if Waila.ref.get_target(): + release_target() + + +func hook_block(target_block: Block) -> void: + target_block.hook() + Waila.ref.set_target(target_block) + + var id: String = target_block.get_id() + Waila.ref.hook_target(id) + +func release_target() -> void: + Waila.ref.get_target().release() + Waila.ref.set_target(null) + Waila.ref.release_target() diff --git a/scenes/ui/waila.gd b/scenes/ui/waila.gd index 3fc22dd..d83348b 100644 --- a/scenes/ui/waila.gd +++ b/scenes/ui/waila.gd @@ -17,13 +17,19 @@ func _init() -> void: @onready var name_label: Label = $PanelContainer/MarginContainer/VBoxContainer/Name @onready var description_label: Label = $PanelContainer/MarginContainer/VBoxContainer/Description +var _target: Block + + func _ready() -> void: release_target() +func get_target() -> Block: + return _target + func hook_target(id: String) -> void: var item: ItemResource = DBItems.ref.data[id] - name_label.text = item.name + name_label.text = item.name + " (" + id + ")" description_label.text = item.description visible = true @@ -31,3 +37,6 @@ func hook_target(id: String) -> void: ## Not looking at anything, hide Waila func release_target() -> void: visible = false + +func set_target(target_block: Block) -> void: + _target = target_block