Files
Archipelago-Game/Scripts/Maps/Connectors/chest_interaction_connector.gd
2026-03-13 22:00:02 -05:00

54 lines
1.4 KiB
GDScript

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)