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