From d98eb6335f3c6c7624ac4724109b02d67aa9b4a1 Mon Sep 17 00:00:00 2001 From: Rendo Date: Fri, 5 Dec 2025 10:25:31 +0500 Subject: [PATCH] interaction --- assets/draggables/test_draggable.tres | 2 +- assets/meshes/jar.res | Bin 0 -> 20242 bytes assets/meshes/jar_fill.res | Bin 0 -> 6780 bytes assets/models/Chemistry.glb.import | 20 +++++ project.godot | 1 + scenes/{draggable_object.tscn => flask.tscn} | 39 ++++++--- scenes/lab.tscn | 8 +- scenes/substance_jar.tscn | 85 +++++++++++++++++++ src/interactible/destructor.gd | 6 ++ src/interactible/destructor.gd.uid | 1 + src/interactible/proximity_rotator.gd | 2 - src/resources/reagent.gd | 2 +- src/ui/reagent_drag_and_drop.gd | 3 +- 13 files changed, 145 insertions(+), 24 deletions(-) create mode 100644 assets/meshes/jar.res create mode 100644 assets/meshes/jar_fill.res rename scenes/{draggable_object.tscn => flask.tscn} (69%) create mode 100644 scenes/substance_jar.tscn create mode 100644 src/interactible/destructor.gd create mode 100644 src/interactible/destructor.gd.uid diff --git a/assets/draggables/test_draggable.tres b/assets/draggables/test_draggable.tres index 5b65641..4614ca8 100644 --- a/assets/draggables/test_draggable.tres +++ b/assets/draggables/test_draggable.tres @@ -2,7 +2,7 @@ [ext_resource type="Script" uid="uid://b3i73cilpra74" path="res://src/resources/draggable.gd" id="1_62sy8"] [ext_resource type="Texture2D" uid="uid://bdyc1cwthn845" path="res://icon.svg" id="1_kgkdo"] -[ext_resource type="PackedScene" uid="uid://bjxjcx2qu16q5" path="res://scenes/draggable_object.tscn" id="2_jkgu4"] +[ext_resource type="PackedScene" uid="uid://bjxjcx2qu16q5" path="res://scenes/flask.tscn" id="2_jkgu4"] [resource] script = ExtResource("1_62sy8") diff --git a/assets/meshes/jar.res b/assets/meshes/jar.res new file mode 100644 index 0000000000000000000000000000000000000000..c6ca6a6d19d12af53e8d693f306afa0c3ce8abb8 GIT binary patch literal 20242 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 V-FgjMm-6=?_Q${JoyC8{`!9(0ErtL9 literal 0 HcmV?d00001 diff --git a/assets/meshes/jar_fill.res b/assets/meshes/jar_fill.res new file mode 100644 index 0000000000000000000000000000000000000000..66a95532ce9e739c52a8c0fc58fa7b91afa7e2af GIT binary patch literal 6780 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 literal 0 HcmV?d00001 diff --git a/assets/models/Chemistry.glb.import b/assets/models/Chemistry.glb.import index 8d99fd5..650df12 100644 --- a/assets/models/Chemistry.glb.import +++ b/assets/models/Chemistry.glb.import @@ -48,6 +48,26 @@ _subresources={ "use_external/fallback_path": "res://assets/materials/mat_glass.tres", "use_external/path": "uid://64m17act0kwu" } +}, +"meshes": { +"Chemistry_Circle_001": { +"generate/lightmap_uv": 0, +"generate/lods": 0, +"generate/shadow_meshes": 0, +"lods/normal_merge_angle": 20.0, +"save_to_file/enabled": true, +"save_to_file/fallback_path": "res://assets/meshes/jar_fill.res", +"save_to_file/path": "uid://dxeseuqcwne1m" +}, +"Chemistry_Circle_003": { +"generate/lightmap_uv": 0, +"generate/lods": 0, +"generate/shadow_meshes": 0, +"lods/normal_merge_angle": 20.0, +"save_to_file/enabled": true, +"save_to_file/fallback_path": "res://assets/meshes/jar.res", +"save_to_file/path": "uid://dddqboph2ygmw" +} } } gltf/naming_version=2 diff --git a/project.godot b/project.godot index 76fd157..1af40d1 100644 --- a/project.godot +++ b/project.godot @@ -32,6 +32,7 @@ drag_camera={ 3d_physics/layer_1="Drag" 3d_physics/layer_2="Interaction" +3d_physics/layer_3="FlaskInteraction" [rendering] diff --git a/scenes/draggable_object.tscn b/scenes/flask.tscn similarity index 69% rename from scenes/draggable_object.tscn rename to scenes/flask.tscn index fcc875f..ede41ea 100644 --- a/scenes/draggable_object.tscn +++ b/scenes/flask.tscn @@ -1,15 +1,20 @@ -[gd_scene load_steps=9 format=3 uid="uid://bjxjcx2qu16q5"] +[gd_scene load_steps=11 format=3 uid="uid://bjxjcx2qu16q5"] -[ext_resource type="Script" uid="uid://bjnv2g1ni0525" path="res://src/drag/draggable_object.gd" id="1_vcwhe"] -[ext_resource type="Script" uid="uid://ctu7escah5lo1" path="res://src/interactible/interaction_source.gd" id="2_627mb"] -[ext_resource type="PackedScene" uid="uid://b6ydpkle2ol20" path="res://assets/models/FlaskNew.glb" id="2_qf1og"] -[ext_resource type="Script" uid="uid://e8xu57ewvb5a" path="res://src/interactible/proximity_rotator.gd" id="3_00eeh"] -[ext_resource type="Script" uid="uid://dteb2xxl8gixp" path="res://src/ui/slider_display.gd" id="5_qb0nw"] +[ext_resource type="Script" uid="uid://bjnv2g1ni0525" path="res://src/drag/draggable_object.gd" id="1_0xufn"] +[ext_resource type="PackedScene" uid="uid://b6ydpkle2ol20" path="res://assets/models/FlaskNew.glb" id="2_h7awq"] +[ext_resource type="Script" uid="uid://mjx50qh1bwv3" path="res://src/interactible/interaction_reciever.gd" id="3_ailwx"] +[ext_resource type="Script" uid="uid://ctu7escah5lo1" path="res://src/interactible/interaction_source.gd" id="4_kkw7a"] +[ext_resource type="Script" uid="uid://e8xu57ewvb5a" path="res://src/interactible/proximity_rotator.gd" id="5_rqua0"] +[ext_resource type="Script" uid="uid://dteb2xxl8gixp" path="res://src/ui/slider_display.gd" id="6_wadb5"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_vcwhe"] radius = 0.1 height = 0.9921875 +[sub_resource type="CylinderShape3D" id="CylinderShape3D_0xufn"] +height = 0.16210938 +radius = 0.625 + [sub_resource type="SphereShape3D" id="SphereShape3D_vcwhe"] radius = 0.49649125 @@ -18,26 +23,36 @@ _data = [Vector2(0, 0), 0.0, 0.067761436, 0, 0, Vector2(0.75, 1), 0.0, 0.0, 0, 0 point_count = 2 [node name="Flask" type="Area3D"] -script = ExtResource("1_vcwhe") +script = ExtResource("1_0xufn") [node name="DragArea" type="CollisionShape3D" parent="."] shape = SubResource("CapsuleShape3D_vcwhe") -[node name="FlaskNew" parent="." instance=ExtResource("2_qf1og")] +[node name="FlaskNew" parent="." instance=ExtResource("2_h7awq")] transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, -0.38859487, 0) +[node name="InteractibleArea" type="Area3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6011598, 0) +collision_layer = 6 +collision_mask = 0 +script = ExtResource("3_ailwx") +metadata/_custom_type_script = "uid://mjx50qh1bwv3" + +[node name="CollisionShape3D" type="CollisionShape3D" parent="InteractibleArea"] +shape = SubResource("CylinderShape3D_0xufn") + [node name="InteractionArea" type="Area3D" parent="." node_paths=PackedStringArray("interaction_dialog")] collision_layer = 2 collision_mask = 2 input_ray_pickable = false -script = ExtResource("2_627mb") +script = ExtResource("4_kkw7a") interaction_dialog = NodePath("../InteractionDialog") [node name="InteractionArea" type="CollisionShape3D" parent="InteractionArea"] shape = SubResource("SphereShape3D_vcwhe") [node name="ProximityRotator" type="Node" parent="." node_paths=PackedStringArray("rotated")] -script = ExtResource("3_00eeh") +script = ExtResource("5_rqua0") rotated = NodePath("..") proximity_radius = 0.1 modification_curve = SubResource("Curve_qb0nw") @@ -56,14 +71,14 @@ offset_bottom = 82.0 [node name="Label" type="Label" parent="InteractionDialog/VBoxContainer"] layout_mode = 2 -text = "Введите объём" +text = "Введите количество" [node name="HBoxContainer" type="HBoxContainer" parent="InteractionDialog/VBoxContainer"] layout_mode = 2 [node name="AmountLabel" type="Label" parent="InteractionDialog/VBoxContainer/HBoxContainer" node_paths=PackedStringArray("slider")] layout_mode = 2 -script = ExtResource("5_qb0nw") +script = ExtResource("6_wadb5") slider = NodePath("../HSlider") suffix = "%" diff --git a/scenes/lab.tscn b/scenes/lab.tscn index 6bdc4be..e42d252 100644 --- a/scenes/lab.tscn +++ b/scenes/lab.tscn @@ -1,9 +1,8 @@ -[gd_scene load_steps=10 format=3 uid="uid://c7r4rhgj3ucao"] +[gd_scene load_steps=9 format=3 uid="uid://c7r4rhgj3ucao"] -[ext_resource type="PackedScene" uid="uid://bjxjcx2qu16q5" path="res://scenes/draggable_object.tscn" id="1_bb6uc"] +[ext_resource type="PackedScene" uid="uid://bjxjcx2qu16q5" path="res://scenes/flask.tscn" id="1_bb6uc"] [ext_resource type="Script" uid="uid://crjao0jjv5yqs" path="res://src/drag/draggable_camera.gd" id="1_hem3r"] [ext_resource type="PackedScene" uid="uid://dfxlr4svnsdyx" path="res://scenes/ui.tscn" id="3_hflkp"] -[ext_resource type="PackedScene" uid="uid://q1y0r2rn0qb4" path="res://scenes/interactible_object.tscn" id="4_f680m"] [ext_resource type="PackedScene" uid="uid://bx5wihgk668w1" path="res://assets/models/Chemistry.glb" id="5_q4uld"] [ext_resource type="PackedScene" uid="uid://bg8y4u2a4hx3p" path="res://assets/models/Drip.glb" id="6_gipex"] [ext_resource type="PackedScene" uid="uid://dwtaqdacgcysa" path="res://assets/models/FlaskHolder.glb" id="7_064jp"] @@ -32,9 +31,6 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.542716, 1.0920403, 0.20219 transform = Transform3D(1, 0, 0, 0, 0.8403207, 0.5420896, 0, -0.5420896, 0.8403207, 0, 1.9293891, 0) shadow_enabled = true -[node name="InteractibleObject" parent="." instance=ExtResource("4_f680m")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.11957906, 0.87858754, -0.0035084486) - [node name="UI" type="CanvasLayer" parent="."] layer = 100 diff --git a/scenes/substance_jar.tscn b/scenes/substance_jar.tscn new file mode 100644 index 0000000..fa47b90 --- /dev/null +++ b/scenes/substance_jar.tscn @@ -0,0 +1,85 @@ +[gd_scene load_steps=10 format=3 uid="uid://cw6v8kbi76qak"] + +[ext_resource type="Script" uid="uid://bjnv2g1ni0525" path="res://src/drag/draggable_object.gd" id="1_o7vug"] +[ext_resource type="ArrayMesh" uid="uid://dddqboph2ygmw" path="res://assets/meshes/jar.res" id="2_o7vug"] +[ext_resource type="Script" uid="uid://ctu7escah5lo1" path="res://src/interactible/interaction_source.gd" id="3_00jpx"] +[ext_resource type="Script" uid="uid://e8xu57ewvb5a" path="res://src/interactible/proximity_rotator.gd" id="4_ymvgp"] +[ext_resource type="ArrayMesh" uid="uid://dxeseuqcwne1m" path="res://assets/meshes/jar_fill.res" id="6_kfk5m"] +[ext_resource type="Script" uid="uid://co33kqhl3n06u" path="res://src/interactible/destructor.gd" id="7_00jpx"] + +[sub_resource type="CylinderShape3D" id="CylinderShape3D_kfk5m"] +height = 0.5024414 +radius = 0.22460938 + +[sub_resource type="SphereShape3D" id="SphereShape3D_vcwhe"] +radius = 0.49649125 + +[sub_resource type="Curve" id="Curve_qb0nw"] +_data = [Vector2(0, 0), 0.0, 0.067761436, 0, 0, Vector2(0.75, 1), 0.0, 0.0, 0, 0] +point_count = 2 + +[node name="Flask" type="Area3D"] +script = ExtResource("1_o7vug") + +[node name="Jar" type="MeshInstance3D" parent="."] +transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, -0.20877336, 0) +mesh = ExtResource("2_o7vug") + +[node name="DragArea" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.04284668, 0) +shape = SubResource("CylinderShape3D_kfk5m") + +[node name="InteractionArea" type="Area3D" parent="." node_paths=PackedStringArray("interaction_dialog")] +collision_layer = 4 +collision_mask = 4 +input_ray_pickable = false +script = ExtResource("3_00jpx") +interaction_dialog = NodePath("../InteractionDialog") + +[node name="InteractionArea" type="CollisionShape3D" parent="InteractionArea"] +shape = SubResource("SphereShape3D_vcwhe") + +[node name="ProximityRotator" type="Node" parent="." node_paths=PackedStringArray("rotated")] +script = ExtResource("4_ymvgp") +rotated = NodePath("..") +proximity_radius = 0.1 +modification_curve = SubResource("Curve_qb0nw") + +[node name="InteractionDialog" type="ConfirmationDialog" parent="."] +oversampling_override = 1.0 +position = Vector2i(0, 36) +size = Vector2i(200, 131) +borderless = true + +[node name="VBoxContainer" type="VBoxContainer" parent="InteractionDialog"] +offset_left = 8.0 +offset_top = 8.0 +offset_right = 192.0 +offset_bottom = 82.0 + +[node name="Label" type="Label" parent="InteractionDialog/VBoxContainer"] +layout_mode = 2 +text = "Введите объём" + +[node name="HBoxContainer" type="HBoxContainer" parent="InteractionDialog/VBoxContainer"] +layout_mode = 2 + +[node name="SpinBox" type="SpinBox" parent="InteractionDialog/VBoxContainer/HBoxContainer"] +layout_mode = 2 +max_value = 10.0 +step = 0.01 +allow_greater = true +suffix = "мг" + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, -0.20759426, 0) +mesh = ExtResource("6_kfk5m") + +[node name="DestructorOnStop" type="Node" parent="." node_paths=PackedStringArray("node")] +script = ExtResource("7_00jpx") +node = NodePath("..") + +[connection signal="drag_ended" from="." to="InteractionArea" method="request_interaction"] +[connection signal="interaction_closed" from="InteractionArea" to="DestructorOnStop" method="destruct"] +[connection signal="interaction_reciever_entered" from="InteractionArea" to="ProximityRotator" method="_on_interaction_area_interaction_reciever_entered"] +[connection signal="interaction_reciever_exited" from="InteractionArea" to="ProximityRotator" method="_on_interaction_area_interaction_reciever_exited"] diff --git a/src/interactible/destructor.gd b/src/interactible/destructor.gd new file mode 100644 index 0000000..332e2e6 --- /dev/null +++ b/src/interactible/destructor.gd @@ -0,0 +1,6 @@ +extends Node + +@export var node: Node3D + +func destruct() -> void: + node.queue_free() diff --git a/src/interactible/destructor.gd.uid b/src/interactible/destructor.gd.uid new file mode 100644 index 0000000..763f7f6 --- /dev/null +++ b/src/interactible/destructor.gd.uid @@ -0,0 +1 @@ +uid://co33kqhl3n06u diff --git a/src/interactible/proximity_rotator.gd b/src/interactible/proximity_rotator.gd index b6ac49c..3000d9f 100644 --- a/src/interactible/proximity_rotator.gd +++ b/src/interactible/proximity_rotator.gd @@ -7,8 +7,6 @@ var start_rotation var reciever: InteractionReciever func _ready() -> void: - print(self.get_path(), rotated) - print_stack() start_rotation = rotated.quaternion func _on_interaction_area_interaction_reciever_entered(rec: InteractionReciever) -> void: diff --git a/src/resources/reagent.gd b/src/resources/reagent.gd index a01e96b..5d67384 100644 --- a/src/resources/reagent.gd +++ b/src/resources/reagent.gd @@ -3,4 +3,4 @@ extends Resource class_name Reagent @export var substance: Substance -@export var storage: PackedScene +@export var storage: PackedScene = preload("res://scenes/substance_jar.tscn") diff --git a/src/ui/reagent_drag_and_drop.gd b/src/ui/reagent_drag_and_drop.gd index 198bcfc..f8628c7 100644 --- a/src/ui/reagent_drag_and_drop.gd +++ b/src/ui/reagent_drag_and_drop.gd @@ -7,8 +7,7 @@ func _ready() -> void: text = reagent.substance.get_formula() func _on_button_down() -> void: - return - var scene = reagent.scene.instantiate() + var scene = reagent.storage.instantiate() if scene is DraggableObject: scene.dragged = true scene.mouse_in = true