extends AnimatableBody3D
@export var open_angle_deg = 90.0
@export var open_speed = 2.0
@export var locked_sound: AudioStream
@export var open_sound: AudioStream
var is_open = false
var is_moving = false
var closed_rotation: float
@onready var audio = $AudioStreamPlayer3D
func _ready():
closed_rotation = rotation.y
func interact():
var player = get_tree().get_first_node_in_group("player")
if not player:
return
# --- Проверка ключа ---
if not player.has_key:
_play_locked_feedback()
return
if is_moving:
return
is_open = not is_open
_animate_door()
_play_sound(open_sound)
func _play_locked_feedback():
print("Заперто. Сначала найди ключ.")
if locked_sound:
audio.stream = locked_sound
audio.play()
func _play_sound(stream):
if stream:
audio.stream = stream
audio.play()
func _animate_door():
is_moving = true
var target = closed_rotation + deg_to_rad(open_angle_deg) * (1 if is_open else 0)
var tween = create_tween()
tween.set_trans(Tween.TRANS_SINE)
tween.set_ease(Tween.EASE_IN_OUT)
tween.tween_property(self, "rotation:y", target, open_speed)
tween.finished.connect(func(): is_moving = false)