beta-1.2/signal-refactor (#1)

Reviewed-on: #1
This commit was merged in pull request #1.
This commit is contained in:
2026-03-15 12:19:12 -06:00
parent 1c95315496
commit 86e3198645
22 changed files with 235 additions and 224 deletions

View File

@@ -1,30 +1,13 @@
extends Node
# Signals
signal DialogueTriggered(dialogue_name: String)
@onready var dialogue_box: DialogueBox = $"../Gui/Dialogue Box"
var dialogue_triggers_in_area: Array[DialogueTrigger] = []
# Public Methods
func OnPlayerInteractScannerAreaEntered(area: Area2D) -> void:
if area is not DialogueTrigger or dialogue_triggers_in_area.has(area):
return
dialogue_triggers_in_area.append(area)
func OnPlayerInteractScannerAreaExited(area: Area2D) -> void:
if area is not DialogueTrigger or !dialogue_triggers_in_area.has(area): return
dialogue_triggers_in_area.erase(area)
func OnPlayerInteractionActionTriggered() -> void:
if dialogue_triggers_in_area.is_empty():
return
var trigger := dialogue_triggers_in_area[0]
trigger.Trigger()
# Exports
@export var dialogue_box: DialogueBox
# Private Variables
var _dialogue_triggers_in_area: Array[DialogueTrigger] = []
# Private Methods
func _on_map_changed(map_id: Enums.MapIds) -> void:
@@ -32,19 +15,41 @@ func _on_map_changed(map_id: Enums.MapIds) -> void:
if !player:
return
player.InteractScannerAreaEntered.connect(OnPlayerInteractScannerAreaEntered)
player.InteractScannerAreaExited.connect(OnPlayerInteractScannerAreaExited)
player.InteractionActionTriggered.connect(OnPlayerInteractionActionTriggered)
player.interact_scanner.area_entered.connect(_on_interact_scanned)
player.interact_scanner.area_exited.connect(_on_interact_unscanned)
player.interact_scanner.InteractionActionTriggered.connect(_on_interact_triggered)
dialogue_box.DialogueStarted.connect(player.OnCutsceneStarted)
dialogue_box.DialogueEnded.connect(player.OnCutsceneEnded)
dialogue_box.DialogueStarted.connect(player.QueueCutsceneState)
dialogue_box.DialogueEnded.connect(player.QueueEndCutsceneState)
var dialogue_triggers := GroupUtils.GetAllDialogueTriggers()
print("Dialogue Triggers on map [%s]: [%d]" % [Enums.MapIds.keys()[map_id], len(dialogue_triggers)])
for trigger in dialogue_triggers:
trigger.DialogueTriggered.connect(_on_dialogue_triggered)
func _on_dialogue_triggered(dialogue_name: String) -> void:
# Wait one frame so we don't immediately close dialogue box
# TODO This is stupid
await get_tree().process_frame
DialogueTriggered.emit(dialogue_name)
func _on_interact_scanned(area: Area2D) -> void:
if area is not DialogueTrigger or _dialogue_triggers_in_area.has(area):
return
_dialogue_triggers_in_area.append(area)
func _on_interact_unscanned(area: Area2D) -> void:
if area is not DialogueTrigger or !_dialogue_triggers_in_area.has(area):
return
_dialogue_triggers_in_area.erase(area)
func _on_interact_triggered() -> void:
if _dialogue_triggers_in_area.is_empty():
return
var trigger := _dialogue_triggers_in_area[0]
trigger.Trigger()