46 lines
1.2 KiB
GDScript
46 lines
1.2 KiB
GDScript
extends RigidBody3D
|
|
|
|
# Referenz zum Griff (der das Pickable-Skript hat)
|
|
@export var door_handle : XRToolsPickable
|
|
|
|
# Referenz zur SnapZone (der "WheelSpace")
|
|
@export var wheel_snap_zone : XRToolsSnapZone
|
|
|
|
var wheel_inserted : bool = false
|
|
|
|
func _ready():
|
|
# Am Start die Tür einfrieren
|
|
freeze = true
|
|
|
|
if door_handle:
|
|
# Signale verbinden
|
|
door_handle.picked_up.connect(_on_grab)
|
|
door_handle.dropped.connect(_on_release)
|
|
|
|
if wheel_snap_zone:
|
|
# "has_picked_up" wird gefeuert, wenn die Zone ein Objekt fängt
|
|
wheel_snap_zone.has_picked_up.connect(_on_wheel_inserted)
|
|
wheel_snap_zone.has_dropped.connect(_on_wheel_removed)
|
|
|
|
func _on_wheel_inserted(_object):
|
|
print("Rad eingesetzt! Tür wird entriegelt.")
|
|
wheel_inserted = true
|
|
|
|
func _on_wheel_removed(_object):
|
|
print("Rad entfernt! Tür wird verriegelt.")
|
|
wheel_inserted = false
|
|
|
|
func _on_grab(_pickable):
|
|
# Wenn angefasst: Physik aktivieren
|
|
if wheel_inserted:
|
|
freeze = false
|
|
sleeping = false # Aufwecken, damit sie sofort reagiert
|
|
|
|
func _on_release(_pickable):
|
|
# Wenn losgelassen: Sofort wieder einfrieren
|
|
freeze = true
|
|
|
|
# WICHTIG: Geschwindigkeit nullen, damit sie sofort stoppt und nicht nachrutscht
|
|
linear_velocity = Vector3.ZERO
|
|
angular_velocity = Vector3.ZERO
|