Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | misaelbr3 |
I’m new in Godot, and I have a specific node for dialog boxes, but how do I make it so that when I click on an NPC or after a certain thing happens, the dialog appears on the screen?
extends ColorRect
export var dialogPath = ""
export(float) var textSpeed = 0.05
var diag0
var dialog
var phraseNum = 0
var finished = false
func _ready():
$Timer.wait_time = textSpeed
dialog = getDialog()
assert(dialog,"Dialog not found")
nextPhrase()
func getDialog() -> Array:
var f = File.new()
assert(f.file_exists(dialogPath), "File does not exists")
f.open(dialogPath, File.READ)
var json = f.get_as_text()
var output = parse_json(json)
if typeof(output) == TYPE_ARRAY:
return output
else:
return []
func _process(delta):
$Indicator.visible = finished
$Indicator/AnimationPlayer.play("Pingu")
if Input.is_action_just_pressed("click_left"):
if finished:
nextPhrase()
else:
$Text.visible_characters = len($Text.text)
func nextPhrase() -> void:
if phraseNum >= len(dialog):
queue_free()
return
finished = false
$Name.bbcode_text = dialog[phraseNum]["Name"]
$Text.bbcode_text = dialog[phraseNum]["Text"]
$Text.visible_characters = 0
while $Text.visible_characters < len($Text.text):
$Text.visible_characters += 1
$Timer.start()
yield($Timer, "timeout")
finished = true
phraseNum += 1
return