vrp-years-apart/addons/godot-xr-tools/objects/DrawerOpener.gd

43 lines
1.3 KiB
GDScript

extends Node3D
# Referenz zur SnapZone (das Schloss)
@export var snap_zone : XRToolsSnapZone
# Einstellungen für die Bewegung
@export var slide_offset : Vector3 = Vector3(0.5, 0, 0) # 0.5 auf X
@export var animation_duration : float = 1.0 # Dauer in Sekunden
# Wir merken uns, wo die Schublade am Anfang war
var start_position : Vector3
func _ready():
# Startposition speichern (damit wir wissen, wo "zu" ist)
start_position = position
if snap_zone:
# Signal verbinden: Wenn etwas reingelegt wird
snap_zone.has_picked_up.connect(_on_unlock)
# Optional: Wenn Schlüssel rausgenommen wird -> wieder zugehen?
snap_zone.has_dropped.connect(_on_lock)
else:
printerr("FEHLER: Bitte SnapZone im Inspektor zuweisen!")
func _on_unlock(_object):
print("Schlüssel steckt! Schublade öffnet sich.")
move_drawer(start_position + slide_offset)
func _on_lock(_object):
print("Schlüssel entfernt! Schublade schließt sich.")
move_drawer(start_position)
func move_drawer(target_pos : Vector3):
# Erstelle einen Tween (Animation)
var tween = create_tween()
# Damit es sich "mechanisch" aber weich anfühlt (Ease Out)
tween.set_ease(Tween.EASE_OUT)
tween.set_trans(Tween.TRANS_CUBIC)
# Bewege "self" (also DrawerSpace) zur Zielposition
tween.tween_property(self, "position", target_pos, animation_duration)