extends Node # Drop-in that automatically connects signals from player to chest objects signal ChestInteractedWith(chest: BaseChest) signal OpeningOfOpenedChestAttempted @export var auto_connect_all_chests := true var chests_in_range: Array[BaseChest] = [] # Public Methods func OnPlayerInteractScannerAreaEntered(area: Area2D) -> void: var chest = area.get_parent() if chest == null or chest is not BaseChest: return if chests_in_range.has(chest): return chests_in_range.append(chest) func OnPlayerInteractScannerAreaExited(area: Area2D) -> void: var chest = area.get_parent() if chest == null or chest is not BaseChest: return if !chests_in_range.has(chest): return chests_in_range.erase(chest) func OnPlayerInteractionActionTriggered() -> void: if chests_in_range.is_empty(): return var chest := chests_in_range[0] if !chest.is_open: chest.Open() else: chest.OpenAlreadyOpened() OpeningOfOpenedChestAttempted.emit() # Private Methods func _ready() -> void: var all_players := get_tree().get_nodes_in_group("Player Group") if all_players == null or all_players.is_empty(): return for player_node in all_players: var player := player_node as PlayerCharacter player.InteractScannerAreaEntered.connect(OnPlayerInteractScannerAreaEntered) player.InteractScannerAreaExited.connect(OnPlayerInteractScannerAreaExited) player.InteractionActionTriggered.connect(OnPlayerInteractionActionTriggered)