class_name LockedDoor extends Node2D var open := false @export var key_item: ItemData @export var locked_audio: AudioStream @export var open_audio: AudioStream @onready var animation_player: AnimationPlayer = $AnimationPlayer @onready var audio: AudioStreamPlayer2D = $AudioStreamPlayer2D @onready var open_data: PersistentDataHandler = $PersistentDataHandler @onready var interact_area: Area2D = $InteractArea func _ready() -> void: interact_area.area_entered.connect(on_area_entered) interact_area.area_exited.connect(on_area_exited) open_data.data_loaded.connect(set_state) set_state() func on_open_door() -> void: if !key_item: return var door_unlocked = PlayerManager.INVENTORY_DATA.use_item(key_item) if door_unlocked: animation_player.play("open_door") audio.stream = open_audio open_data.set_value() else: audio.stream = locked_audio audio.play() func on_area_entered(_area: Area2D) -> void: PlayerManager.interact_pressed.connect(on_open_door) func on_area_exited(_area: Area2D) -> void: PlayerManager.interact_pressed.disconnect(on_open_door) func close_door() -> void: animation_player.play("close_door") func set_state() -> void: open = open_data.value if open: animation_player.play("opened") else: animation_player.play("closed")