Stand and holder
This commit is contained in:
parent
2f2ac7c540
commit
b7ce36ffd0
15 changed files with 408 additions and 1 deletions
9
assets/draggables/holder.tres
Normal file
9
assets/draggables/holder.tres
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
[gd_resource type="Resource" script_class="Draggable" format=3 uid="uid://cm2is1qooywkf"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c6yoaffdq7w8k" path="res://scenes/flask_holder.tscn" id="1_7g7il"]
|
||||
[ext_resource type="Script" uid="uid://b3i73cilpra74" path="res://src/resources/draggable.gd" id="2_51n86"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("2_51n86")
|
||||
scene_to_spawn = ExtResource("1_7g7il")
|
||||
metadata/_custom_type_script = "uid://b3i73cilpra74"
|
||||
9
assets/draggables/stand.tres
Normal file
9
assets/draggables/stand.tres
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
[gd_resource type="Resource" script_class="Draggable" format=3 uid="uid://dnxpw2metn0oq"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bfsrx0q56c0n6" path="res://scenes/flask_stand.tscn" id="1_fqoq4"]
|
||||
[ext_resource type="Script" uid="uid://b3i73cilpra74" path="res://src/resources/draggable.gd" id="2_3vd4e"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("2_3vd4e")
|
||||
scene_to_spawn = ExtResource("1_fqoq4")
|
||||
metadata/_custom_type_script = "uid://b3i73cilpra74"
|
||||
BIN
assets/models/FlaskStand.glb
Normal file
BIN
assets/models/FlaskStand.glb
Normal file
Binary file not shown.
70
assets/models/FlaskStand.glb.import
Normal file
70
assets/models/FlaskStand.glb.import
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bd2rhbj1dbxlt"
|
||||
path="res://.godot/imported/FlaskStand.glb-3207a77396b6f22697e88ff46fdeec6c.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/models/FlaskStand.glb"
|
||||
dest_files=["res://.godot/imported/FlaskStand.glb-3207a77396b6f22697e88ff46fdeec6c.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"mat_metal": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://assets/materials/mat_metal.tres",
|
||||
"use_external/path": "uid://b2h6brwubdafv"
|
||||
}
|
||||
},
|
||||
"nodes": {
|
||||
"PATH:Cube_001": {
|
||||
"import/skip_import": true
|
||||
},
|
||||
"PATH:Cube_003": {
|
||||
"import/skip_import": true
|
||||
},
|
||||
"PATH:FlashHolder": {
|
||||
"import/skip_import": true
|
||||
},
|
||||
"PATH:Flask": {
|
||||
"import/skip_import": true
|
||||
},
|
||||
"PATH:FlaskInside": {
|
||||
"import/skip_import": true
|
||||
},
|
||||
"PATH:Sphere_001": {
|
||||
"import/skip_import": true
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
19
scenes/flask_hold_area.tscn
Normal file
19
scenes/flask_hold_area.tscn
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
[gd_scene format=3 uid="uid://npbjtos2xjqh"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dc4qhmcjwi568" path="res://src/flask_hold_area.gd" id="1_p5tus"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_ig37s"]
|
||||
height = 0.9719238
|
||||
radius = 0.09082031
|
||||
|
||||
[node name="FlaskHoldArea" type="Area3D" unique_id=1519161328]
|
||||
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 0, 0, 0)
|
||||
script = ExtResource("1_p5tus")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=565290681]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.046020508, 0)
|
||||
shape = SubResource("CylinderShape3D_ig37s")
|
||||
debug_color = Color(0, 0.5950001, 0.7, 1)
|
||||
|
||||
[connection signal="area_entered" from="." to="." method="_on_area_entered"]
|
||||
[connection signal="area_exited" from="." to="." method="_on_area_exited"]
|
||||
33
scenes/flask_holder.tscn
Normal file
33
scenes/flask_holder.tscn
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
[gd_scene format=3 uid="uid://c6yoaffdq7w8k"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bjnv2g1ni0525" path="res://src/drag/draggable_object.gd" id="1_ewrbt"]
|
||||
[ext_resource type="PackedScene" uid="uid://dwtaqdacgcysa" path="res://assets/models/FlaskHolder.glb" id="1_twixx"]
|
||||
[ext_resource type="PackedScene" uid="uid://npbjtos2xjqh" path="res://scenes/flask_hold_area.tscn" id="2_ewrbt"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_a7l4b"]
|
||||
size = Vector3(1.0390625, 0.6665039, 0.28515625)
|
||||
|
||||
[node name="FlaskHolder" type="Area3D" unique_id=297421419]
|
||||
script = ExtResource("1_ewrbt")
|
||||
|
||||
[node name="FlaskHolder2" parent="." unique_id=947584784 instance=ExtResource("1_twixx")]
|
||||
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0.5777259, 0)
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=2062784805]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.32885742, 0)
|
||||
shape = SubResource("BoxShape3D_a7l4b")
|
||||
|
||||
[node name="FlaskHoldArea" parent="." unique_id=1519161328 instance=ExtResource("2_ewrbt")]
|
||||
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -0.41687107, 0.45590642, 0.0024570525)
|
||||
|
||||
[node name="FlaskHoldArea2" parent="." unique_id=456473283 instance=ExtResource("2_ewrbt")]
|
||||
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -0.21569425, 0.45590642, 0.0024570525)
|
||||
|
||||
[node name="FlaskHoldArea3" parent="." unique_id=1702091089 instance=ExtResource("2_ewrbt")]
|
||||
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 0.0042236447, 0.45590642, 0.0024570525)
|
||||
|
||||
[node name="FlaskHoldArea4" parent="." unique_id=939138817 instance=ExtResource("2_ewrbt")]
|
||||
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 0.21210945, 0.45590642, 0.0024570525)
|
||||
|
||||
[node name="FlaskHoldArea5" parent="." unique_id=568099085 instance=ExtResource("2_ewrbt")]
|
||||
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 0.4127617, 0.45590642, 0.0024570525)
|
||||
183
scenes/flask_stand.tscn
Normal file
183
scenes/flask_stand.tscn
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -8,6 +8,8 @@
|
|||
[ext_resource type="Resource" uid="uid://cay05wpketmny" path="res://assets/draggables/flask.tres" id="4_gdt2y"]
|
||||
[ext_resource type="Resource" uid="uid://6vpr6n7yruie" path="res://assets/draggables/spoon.tres" id="5_wm3ai"]
|
||||
[ext_resource type="Resource" uid="uid://kg34c4105ssp" path="res://assets/draggables/burner.tres" id="6_p7vwb"]
|
||||
[ext_resource type="Resource" uid="uid://dnxpw2metn0oq" path="res://assets/draggables/stand.tres" id="8_7dvkv"]
|
||||
[ext_resource type="Resource" uid="uid://cm2is1qooywkf" path="res://assets/draggables/holder.tres" id="9_vdcm2"]
|
||||
|
||||
[node name="UserInterface" type="Control" unique_id=1780432093]
|
||||
layout_mode = 3
|
||||
|
|
@ -109,7 +111,18 @@ layout_mode = 2
|
|||
text = "Спиртовка"
|
||||
draggable = ExtResource("6_p7vwb")
|
||||
|
||||
[node name="Spoon" parent="Intruments/ScrollContainer/VBoxContainer" index="2" unique_id=1377215067 instance=ExtResource("3_yev5y")]
|
||||
[node name="Stand" parent="Intruments/ScrollContainer/VBoxContainer" index="2" unique_id=653836695 instance=ExtResource("3_yev5y")]
|
||||
layout_mode = 2
|
||||
text = "Штатив"
|
||||
draggable = ExtResource("8_7dvkv")
|
||||
|
||||
[node name="Holder" parent="Intruments/ScrollContainer/VBoxContainer" index="3" unique_id=878085834 instance=ExtResource("3_yev5y")]
|
||||
layout_mode = 2
|
||||
text = "Держатель пробирок"
|
||||
autowrap_mode = 2
|
||||
draggable = ExtResource("9_vdcm2")
|
||||
|
||||
[node name="Spoon" parent="Intruments/ScrollContainer/VBoxContainer" index="4" unique_id=1377215067 instance=ExtResource("3_yev5y")]
|
||||
layout_mode = 2
|
||||
text = "Ложка"
|
||||
draggable = ExtResource("5_wm3ai")
|
||||
|
|
|
|||
23
src/button_gens/stand_buttons.gd
Normal file
23
src/button_gens/stand_buttons.gd
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
extends ButtonGenerator
|
||||
|
||||
|
||||
func get_buttons() -> Control:
|
||||
var vbox: VBoxContainer = VBoxContainer.new()
|
||||
|
||||
var position_label: Label = Label.new()
|
||||
position_label.text = "Позиция"
|
||||
vbox.add_child(position_label)
|
||||
var position_slider: HSlider = HSlider.new()
|
||||
position_slider.min_value = 0
|
||||
position_slider.max_value = 1
|
||||
position_slider.step = 0.01
|
||||
position_slider.set_value_no_signal(($"../Holder/Cylinder_001".position.y - 5.491)/5)
|
||||
position_slider.value_changed.connect(on_value_set)
|
||||
|
||||
vbox.add_child(position_slider)
|
||||
|
||||
return vbox
|
||||
|
||||
func on_value_set(value: float) -> void:
|
||||
$"../Holder/Cylinder_001".position.y = lerp(5.491,10.491,value)
|
||||
|
||||
1
src/button_gens/stand_buttons.gd.uid
Normal file
1
src/button_gens/stand_buttons.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://60nyr4sq6k60
|
||||
|
|
@ -4,6 +4,8 @@ class_name DraggableObject
|
|||
|
||||
signal drag_started
|
||||
signal drag_ended
|
||||
signal drag_started_on(obj: DraggableObject)
|
||||
signal drag_ended_on(obj: DraggableObject)
|
||||
|
||||
var mouse_in: bool = false
|
||||
var dragged: bool = false:
|
||||
|
|
@ -11,12 +13,14 @@ var dragged: bool = false:
|
|||
if dragged != value:
|
||||
if value:
|
||||
drag_started.emit()
|
||||
drag_started_on.emit(self)
|
||||
GuiSignalBus.clear_buttons.emit()
|
||||
get_viewport().get_camera_3d().start_interaction_seeking(self)
|
||||
if button_generator:
|
||||
GuiSignalBus.add_buttons.emit(button_generator.get_buttons())
|
||||
else:
|
||||
drag_ended.emit()
|
||||
drag_ended_on.emit(self)
|
||||
dragged = value
|
||||
|
||||
@export var interactible: Interactible
|
||||
|
|
|
|||
30
src/flask_hold_area.gd
Normal file
30
src/flask_hold_area.gd
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
extends Area3D
|
||||
|
||||
var held_flask: DraggableObject
|
||||
var flask_parent: Node
|
||||
|
||||
func _on_area_entered(area: Area3D) -> void:
|
||||
if held_flask:
|
||||
return
|
||||
if area.is_in_group("flask"):
|
||||
area.drag_ended_on.connect(snap_flask)
|
||||
|
||||
|
||||
func _on_area_exited(area: Area3D) -> void:
|
||||
if held_flask:
|
||||
return
|
||||
if area.is_in_group("flask") and area.drag_ended_on.is_connected(snap_flask):
|
||||
area.drag_ended_on.disconnect(snap_flask)
|
||||
|
||||
func snap_flask(flask: DraggableObject) -> void:
|
||||
flask_parent = flask.get_parent()
|
||||
flask.reparent(self)
|
||||
held_flask = flask
|
||||
flask.drag_ended_on.disconnect(snap_flask)
|
||||
flask.position = Vector3.ZERO
|
||||
flask.drag_ended_on.connect(unsnap_flask)
|
||||
|
||||
func unsnap_flask(flask: DraggableObject) -> void:
|
||||
held_flask = null
|
||||
flask.reparent(flask_parent)
|
||||
flask.drag_ended_on.disconnect(unsnap_flask)
|
||||
1
src/flask_hold_area.gd.uid
Normal file
1
src/flask_hold_area.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://dc4qhmcjwi568
|
||||
11
src/return_to_start.gd
Normal file
11
src/return_to_start.gd
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
extends Node
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
||||
1
src/return_to_start.gd.uid
Normal file
1
src/return_to_start.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://b6oj0pctnkn0t
|
||||
Loading…
Add table
Add a link
Reference in a new issue