27 lines
1.1 KiB
GDScript3
27 lines
1.1 KiB
GDScript3
|
|
extends Node
|
||
|
|
|
||
|
|
# Forgejo #132: the voice of the quest chain.
|
||
|
|
#
|
||
|
|
# GameState walks the chain and QUEUES what it wants said (see
|
||
|
|
# GameState.quest_messages); this node is the thing that says it. The split
|
||
|
|
# is not ceremony: quests advance in the autoload, which keeps running on a
|
||
|
|
# planet surface where there is no narration banner at all, so a line
|
||
|
|
# emitted straight at a banner would simply be lost down there. Queued and
|
||
|
|
# drained, a quest finished on a surface is read out on the way back up.
|
||
|
|
#
|
||
|
|
# Draining every waiting line at once is safe: the banner queues lines
|
||
|
|
# itself and shows them one at a time, and each one stops the game until it
|
||
|
|
# is acknowledged (#128).
|
||
|
|
|
||
|
|
@onready var narration: Control = get_node_or_null("../UI/NarrationBanner")
|
||
|
|
|
||
|
|
|
||
|
|
func _process(_delta: float) -> void:
|
||
|
|
if narration == null:
|
||
|
|
return
|
||
|
|
# The prologue owns the banner while it runs. A quest line arriving in
|
||
|
|
# the middle of the convoy being torn apart would be read as part of it.
|
||
|
|
if GameState.intro_active:
|
||
|
|
return
|
||
|
|
for message in GameState.take_quest_messages():
|
||
|
|
narration.say(String(message.line), String(message.speaker))
|