Загрузка данных


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)