objects can be selected

This commit is contained in:
Nikolai Fesenko
2025-08-20 14:31:53 +02:00
parent b5d5d4a818
commit 9bab0ff0f3
5 changed files with 109 additions and 14 deletions

View File

@@ -1,10 +1,11 @@
[gd_scene load_steps=6 format=3 uid="uid://dqrqq5vg8hek3"]
[gd_scene load_steps=11 format=3 uid="uid://dqrqq5vg8hek3"]
[ext_resource type="ArrayMesh" uid="uid://dwd6ylq5xn6kj" path="res://Blends/Person/Person.obj" id="1_11yxf"]
[ext_resource type="Script" uid="uid://d308e5vxshc06" path="res://Scripts/person.gd" id="1_dh77o"]
[ext_resource type="Shader" uid="uid://bm15rdsdxldwl" path="res://Shaders/shirt.gdshader" id="3_dbviw"]
[ext_resource type="Shader" uid="uid://c08eg1piwoy3t" path="res://Shaders/outline.gdshader" id="4_kmh38"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_kmh38"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_tupbo"]
render_priority = 0
shader = ExtResource("3_dbviw")
shader_parameter/shirt_color = Vector3(0, 0, 0)
@@ -12,6 +13,30 @@ shader_parameter/shirt_color = Vector3(0, 0, 0)
[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_dbviw"]
points = PackedVector3Array(0.465296, 4.41226, 2.90193, 0.333481, 5.90986, 1.44973, -0.46535, 4.41226, 2.90193, 0.465296, 2.1221, 2.90193, 0.88668, -1.00046, 1.81769, 0.465296, 4.41226, -1.76192, 0.333481, 5.90986, -0.25128, -0.333667, 5.90986, 1.44973, -0.46535, 4.41226, -1.76192, -0.46535, 2.1221, 2.90193, 0.88668, -1.35832, 1.81769, 0.88668, -1.00046, -0.616956, 0.465296, 2.1221, -1.76192, -0.333667, 5.90986, -0.25128, -0.46535, 2.1221, -1.76192, -0.46535, 1.86882, 1.75606, -0.424191, -1.35832, 1.81769, 0.88668, -1.35832, -0.616956, -0.424191, -1.35832, -0.616956, -0.46535, 1.86882, -0.6165)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_8v2cd"]
render_priority = 0
shader = ExtResource("4_kmh38")
shader_parameter/is_active = true
shader_parameter/color = Vector3(0.95, 0.71, 0.01)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_kmh38"]
render_priority = 0
shader = ExtResource("4_kmh38")
shader_parameter/is_active = true
shader_parameter/color = Vector3(0.95, 0.71, 0.01)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_b8w03"]
render_priority = 0
shader = ExtResource("4_kmh38")
shader_parameter/is_active = true
shader_parameter/color = Vector3(0.95, 0.71, 0.01)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_una45"]
render_priority = 0
shader = ExtResource("4_kmh38")
shader_parameter/is_active = true
shader_parameter/color = Vector3(0.95, 0.71, 0.01)
[node name="Person" type="CharacterBody3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.150706, 0, -0.313651)
script = ExtResource("1_dh77o")
@@ -19,7 +44,7 @@ script = ExtResource("1_dh77o")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
transform = Transform3D(-1.31134e-08, 0, 0.3, 0, 0.3, 0, -0.3, 0, -1.31134e-08, 0, 0, 0.368102)
mesh = ExtResource("1_11yxf")
surface_material_override/1 = SubResource("ShaderMaterial_kmh38")
surface_material_override/1 = SubResource("ShaderMaterial_tupbo")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(-1.31134e-08, 0, 0.3, 0, 0.3, 0, -0.3, 0, -1.31134e-08, 0, 0, 0.368102)
@@ -33,6 +58,18 @@ debug_enabled = true
wait_time = 4.0
one_shot = true
[node name="MeshOutline" type="MeshInstance3D" parent="."]
transform = Transform3D(-1.31134e-08, 0, 0.3, 0, 0.3, 0, -0.3, 0, -1.31134e-08, 0, 0, 0.368102)
visible = false
mesh = ExtResource("1_11yxf")
surface_material_override/0 = SubResource("ShaderMaterial_8v2cd")
surface_material_override/1 = SubResource("ShaderMaterial_kmh38")
surface_material_override/2 = SubResource("ShaderMaterial_b8w03")
surface_material_override/3 = SubResource("ShaderMaterial_una45")
[connection signal="input_event" from="." to="." method="_on_input_event"]
[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"]
[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"]
[connection signal="navigation_finished" from="NavigationAgent3D" to="." method="_on_navigation_agent_3d_navigation_finished"]
[connection signal="target_reached" from="NavigationAgent3D" to="." method="_on_navigation_agent_3d_target_reached"]
[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"]

View File

@@ -11,6 +11,8 @@ var default_shaders: Array
#var ActionNode: Node3D
var is_placed: bool = false
var is_selected: bool = false
func _ready() -> void:
BuildManager.preview_created.connect(_on_preview_create)
BuildManager.object_placed.connect(_on_object_placed)
@@ -61,11 +63,15 @@ func _on_object_placed(build_postion):
func enable_outline():
Global.object_over_mouse_selected_signal.emit(self)
for i in meshInstance.get_surface_override_material_count():
var material = meshInstance.get_surface_override_material(i)
if material.next_pass != null:
meshInstance.get_surface_override_material(i).next_pass.set_shader_parameter("is_active", true)
func disable_outline():
Global.object_over_mouse_unselected_signal.emit(self)
if is_selected == false:
for i in meshInstance.get_surface_override_material_count():
var material = meshInstance.get_surface_override_material(i)
if material.next_pass != null:

View File

@@ -8,8 +8,8 @@ signal interact(person,interact_object)
signal object_selected_signal
signal object_unselected_signal
signal object_over_mouse_signal
signal object_over_mouse_selected_signal(object)
signal object_over_mouse_unselected_signal(object)
var object_selected
@@ -19,12 +19,37 @@ var object_over_mouse
func _ready() -> void:
interact.connect(_on_interact)
object_selected_signal.connect(_on_object_selected)
object_unselected_signal.connect(_on_object_unselected)
object_over_mouse_selected_signal.connect(_on_mouse_object_selected)
object_over_mouse_unselected_signal.connect(_on_mouse_object_unselected)
func _input(event: InputEvent) -> void:
if event.is_action_released("mouse_click"):
if object_over_mouse != null:
object_selected_signal.emit(object_over_mouse)
if event.is_action_released("right_mouse_click"):
if object_selected != object_over_mouse:
object_unselected_signal.emit()
func _on_interact(person, object):
object.start_action(person, object)
func _on_object_selected():
pass
func _on_object_selected(object):
if object_selected != null:
object_unselected_signal.emit()
object_selected = object
object_selected.is_selected = true
print(object_selected)
func _on_object_unselected():
pass
object_selected.is_selected = false
object_selected.disable_outline()
object_selected = null
func _on_mouse_object_selected(object):
object_over_mouse = object
func _on_mouse_object_unselected(object):
object_over_mouse = null

View File

@@ -25,6 +25,8 @@ var target_item
var target_action: String
var is_selected: bool = false
func _ready() -> void:
nav_agent = $NavigationAgent3D
meshI = $MeshInstance3D
@@ -112,3 +114,23 @@ func _on_item_received():
if holdingItem != null:
pass
#holdingItem.use()
func _on_input_event(camera: Node, event: InputEvent, event_position: Vector3, normal: Vector3, shape_idx: int) -> void:
pass
func _on_mouse_entered() -> void:
Global.object_over_mouse_selected_signal.emit(self)
enable_outline()
func _on_mouse_exited() -> void:
if is_selected == false:
disable_outline()
func enable_outline():
$MeshOutline.visible = true
func disable_outline():
$MeshOutline.visible = false

View File

@@ -59,3 +59,8 @@ test={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
]
}
right_mouse_click={
"deadzone": 0.2,
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(92, 20),"global_position":Vector2(101, 68),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null)
]
}