beta-1.0
This commit is contained in:
50
Scripts/dialogue_trigger_connector.gd
Normal file
50
Scripts/dialogue_trigger_connector.gd
Normal file
@@ -0,0 +1,50 @@
|
||||
extends Node
|
||||
|
||||
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()
|
||||
|
||||
|
||||
# Private Methods
|
||||
func _on_map_changed(map_id: Enums.MapIds) -> void:
|
||||
var player := GroupUtils.GetPlayer()
|
||||
if !player:
|
||||
return
|
||||
|
||||
player.InteractScannerAreaEntered.connect(OnPlayerInteractScannerAreaEntered)
|
||||
player.InteractScannerAreaExited.connect(OnPlayerInteractScannerAreaExited)
|
||||
player.InteractionActionTriggered.connect(OnPlayerInteractionActionTriggered)
|
||||
|
||||
dialogue_box.DialogueStarted.connect(player.OnCutsceneStarted)
|
||||
dialogue_box.DialogueEnded.connect(player.OnCutsceneEnded)
|
||||
|
||||
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:
|
||||
DialogueTriggered.emit(dialogue_name)
|
||||
Reference in New Issue
Block a user