40 lines
1.0 KiB
GDScript
40 lines
1.0 KiB
GDScript
extends Node
|
|
|
|
var _zones_in_range: Array[InteractiveLoadingZone] = []
|
|
|
|
# Public Methods
|
|
func OnPlayerInteractScannerAreaEntered(area: Area2D) -> void:
|
|
if area is not InteractiveLoadingZone or _zones_in_range.has(area):
|
|
return
|
|
|
|
_zones_in_range.append(area)
|
|
|
|
|
|
func OnPlayerInteractScannerAreaExited(area: Area2D) -> void:
|
|
if area is not InteractiveLoadingZone or !_zones_in_range.has(area):
|
|
return
|
|
|
|
_zones_in_range.erase(area)
|
|
|
|
|
|
func OnPlayerInteractionActionTriggered() -> void:
|
|
if _zones_in_range.is_empty():
|
|
return
|
|
|
|
var zone := _zones_in_range[0]
|
|
zone.Activate()
|
|
|
|
|
|
# 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)
|