Post Game jam commit
This commit is contained in:
commit
6db2131520
164 changed files with 172524 additions and 0 deletions
65
ui/dialogue.gd
Normal file
65
ui/dialogue.gd
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
class_name Dialog
|
||||
extends Control
|
||||
|
||||
@export var char_delay := 0.02
|
||||
|
||||
var message_queue : Array[String] = []
|
||||
var is_printing := false
|
||||
var skip_requested := false
|
||||
@export var dialogue_label : RichTextLabel
|
||||
|
||||
func _ready() -> void:
|
||||
dialogue_label.bbcode_enabled = true
|
||||
dialogue_label.visible_characters = 0
|
||||
|
||||
EventBus.dialogue_requested.connect(add_to_queue)
|
||||
|
||||
|
||||
func add_to_queue(msg: String) -> void:
|
||||
message_queue.append(msg)
|
||||
if not is_printing:
|
||||
visible = true
|
||||
is_printing = true
|
||||
get_tree().paused = true
|
||||
_show_messages()
|
||||
|
||||
func _show_messages() -> void:
|
||||
while not message_queue.is_empty():
|
||||
var next_msg : String = message_queue.pop_front()
|
||||
await _type_text(next_msg)
|
||||
|
||||
_finish_dialogue()
|
||||
|
||||
|
||||
func _type_text(msg: String) -> void:
|
||||
|
||||
dialogue_label.text = msg
|
||||
dialogue_label.visible_characters = 0
|
||||
skip_requested = false
|
||||
|
||||
for i in msg.length():
|
||||
if skip_requested:
|
||||
break
|
||||
|
||||
dialogue_label.visible_characters = i + 1
|
||||
await get_tree().create_timer(char_delay, true, false, true).timeout
|
||||
|
||||
dialogue_label.visible_characters = -1
|
||||
await _wait_for_input()
|
||||
|
||||
func _wait_for_input() -> void:
|
||||
skip_requested = false
|
||||
while not skip_requested:
|
||||
await get_tree().process_frame
|
||||
|
||||
func _finish_dialogue() -> void:
|
||||
dialogue_label.visible_characters = 0
|
||||
dialogue_label.text = ""
|
||||
visible = false
|
||||
is_printing = false
|
||||
get_tree().paused = false
|
||||
EventBus.dialogue_finished.emit()
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed("ui_accept") or (event is InputEventMouseButton and event.pressed):
|
||||
skip_requested = true
|
||||
Loading…
Add table
Add a link
Reference in a new issue