56 lines
1.2 KiB
GDScript
56 lines
1.2 KiB
GDScript
extends Node
|
|
|
|
var global_variables = {}
|
|
|
|
@onready var text_box_scene = preload("res://prefabs/ink_template.tscn")
|
|
|
|
var text_box: Control
|
|
|
|
var is_dialog_active = false
|
|
var can_enter_dialogue = true
|
|
|
|
@export var start_time = 50
|
|
@export var decrease_speed = 0.5
|
|
|
|
signal dialogue_finished(time_to_add: int)
|
|
|
|
func start_dialog(lines: Resource):
|
|
if lines == null:
|
|
return
|
|
if is_dialog_active or !can_enter_dialogue:
|
|
return
|
|
|
|
_show_text_box()
|
|
text_box.variables = global_variables
|
|
text_box._setup_story(lines)
|
|
|
|
is_dialog_active = true
|
|
can_enter_dialogue = false
|
|
|
|
func _show_text_box():
|
|
text_box = text_box_scene.instantiate()
|
|
get_tree().root.add_child(text_box)
|
|
|
|
const DIALOGUE_COOLDOWN = .5
|
|
var dialogue_cooldown = 0
|
|
|
|
func _process(delta):
|
|
if (
|
|
Input.is_action_just_pressed("advance_dialog") &&
|
|
is_dialog_active
|
|
):
|
|
text_box._continue_story()
|
|
if !text_box.active:
|
|
_quit_dialogue()
|
|
|
|
dialogue_cooldown -= delta
|
|
if !is_dialog_active and dialogue_cooldown < 0:
|
|
can_enter_dialogue = true
|
|
|
|
func _quit_dialogue():
|
|
is_dialog_active = false
|
|
global_variables = text_box.variables
|
|
dialogue_finished.emit(global_variables["time_to_add"])
|
|
global_variables["time_to_add"] = 0
|
|
dialogue_cooldown = DIALOGUE_COOLDOWN
|
|
text_box.queue_free()
|