in-world ui textboxes
This commit is contained in:
@@ -11,6 +11,7 @@ static func dialogueCallable(params:Dictionary) -> int:
|
||||
var resource:DialogueResource = params['resource']
|
||||
var title:String = params.get('title', 'start')
|
||||
var extraStates:Array = params.get('extraStates', [])
|
||||
var characterTargets:Dictionary = params.get('characterTargets', {})
|
||||
|
||||
UI.dialogueActive = true
|
||||
var line:DialogueLine = await DialogueManager.get_next_dialogue_line(resource, title, extraStates)
|
||||
@@ -19,10 +20,12 @@ static func dialogueCallable(params:Dictionary) -> int:
|
||||
if line.character:
|
||||
text = line.character + ": " + text
|
||||
|
||||
var target:Node3D = _getLineTarget(line.character, characterTargets)
|
||||
|
||||
if line.responses.size() > 0:
|
||||
# Show text then auto-pick the first allowed response.
|
||||
# Replace this block with a real response UI when branching dialogue is needed.
|
||||
await UI.TEXTBOX.setTextAndWait(text)
|
||||
await UI.MAIN_CHATBOX.setTextAndWait(text, target)
|
||||
var nextId:String = ""
|
||||
for response:DialogueResponse in line.responses:
|
||||
if response.is_allowed:
|
||||
@@ -30,16 +33,26 @@ static func dialogueCallable(params:Dictionary) -> int:
|
||||
break
|
||||
line = await DialogueManager.get_next_dialogue_line(resource, nextId, extraStates)
|
||||
else:
|
||||
await UI.TEXTBOX.setTextAndWait(text)
|
||||
await UI.MAIN_CHATBOX.setTextAndWait(text, target)
|
||||
line = await DialogueManager.get_next_dialogue_line(resource, line.next_id, extraStates)
|
||||
|
||||
UI.dialogueActive = false
|
||||
return Cutscene.CUTSCENE_CONTINUE
|
||||
|
||||
static func getDialogueCallable(resource:DialogueResource, title:String = 'start', extraStates:Array = []) -> Dictionary:
|
||||
# "player" (case-insensitive) maps to the player entity; any other named
|
||||
# character maps to the npc entity; empty character (narrator) uses no target.
|
||||
static func _getLineTarget(character:String, characterTargets:Dictionary) -> Node3D:
|
||||
if characterTargets.is_empty() or character == "":
|
||||
return null
|
||||
if character.to_lower() == "player":
|
||||
return characterTargets.get("player", null)
|
||||
return characterTargets.get("npc", null)
|
||||
|
||||
static func getDialogueCallable(resource:DialogueResource, title:String = 'start', extraStates:Array = [], characterTargets:Dictionary = {}) -> Dictionary:
|
||||
return {
|
||||
'function': dialogueCallable,
|
||||
'resource': resource,
|
||||
'title': title,
|
||||
'extraStates': extraStates,
|
||||
'characterTargets': characterTargets,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user