43 lines
1.3 KiB
GDScript
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)
|