beta-1.0
This commit is contained in:
53
Scripts/Maps/Connectors/chest_interaction_connector.gd
Normal file
53
Scripts/Maps/Connectors/chest_interaction_connector.gd
Normal file
@@ -0,0 +1,53 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user