diff --git a/Scenes/Prefabs/Person.tscn b/Scenes/Prefabs/Person.tscn index a61c877..934acec 100644 --- a/Scenes/Prefabs/Person.tscn +++ b/Scenes/Prefabs/Person.tscn @@ -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"] diff --git a/Scripts/build_object.gd b/Scripts/build_object.gd index 75faa2b..7e41678 100644 --- a/Scripts/build_object.gd +++ b/Scripts/build_object.gd @@ -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,15 +63,19 @@ 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(): - 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", false) + 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: + meshInstance.get_surface_override_material(i).next_pass.set_shader_parameter("is_active", false) diff --git a/Scripts/global_script.gd b/Scripts/global_script.gd index 60ad995..3967674 100644 --- a/Scripts/global_script.gd +++ b/Scripts/global_script.gd @@ -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 @@ -18,13 +18,38 @@ 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 diff --git a/Scripts/person.gd b/Scripts/person.gd index 4d6b6f2..ba9e2e3 100644 --- a/Scripts/person.gd +++ b/Scripts/person.gd @@ -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 diff --git a/project.godot b/project.godot index b6e69ac..01f0123 100644 --- a/project.godot +++ b/project.godot @@ -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) +] +}