Stand and holder

This commit is contained in:
Rendo 2026-01-30 12:35:41 +05:00
commit b7ce36ffd0
15 changed files with 408 additions and 1 deletions

View 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)

View file

@ -0,0 +1 @@
uid://60nyr4sq6k60

View file

@ -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
View 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)

View file

@ -0,0 +1 @@
uid://dc4qhmcjwi568

11
src/return_to_start.gd Normal file
View 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

View file

@ -0,0 +1 @@
uid://b6oj0pctnkn0t