Figments-of-the-Night/scripts/dialogue/ink_handler.gd
Gerard Gascón b99855351d init
2025-04-24 17:23:34 +02:00

133 lines
3.3 KiB
GDScript

extends Control
var inkPlayer = load("res://addons/inkgd/ink_player.gd")
@onready var _ink_player = InkPlayer.new()
@onready var text_box = $ColorRect/Label
@export var buttons: Array[Button]
@export var type_sounds: Array[AudioStream]
var displaying_choices = false
var active = false
@onready var timer = $TextDisplayTimer
var text = ""
var character_index = 0
var character_time = 0.03
var finished_displaying = true
var variables: Dictionary
# Called when the node enters the scene tree for the first time.
func _ready():
_ink_player._add_runtime(get_tree().root)
_ink_player.loads_in_background = true
_ink_player.connect("loaded", _story_loaded)
for button in buttons:
button.hide()
func _setup_story(story: Resource):
_ink_player.ink_file = story
_ink_player.create_story()
active = true
func _process(delta):
if displaying_choices:
var i = 0
for button in buttons:
if button.button_pressed:
_select_choice(i)
i += 1
else:
if Input.is_action_just_pressed("advance_dialog"):
_continue_story()
func _story_loaded(successfully: bool):
if !successfully:
return
for key in variables:
var value = variables[key]
_ink_player.set_variable(key, value)
_continue_story()
func _continue_story():
if !finished_displaying:
return
if !_ink_player.can_continue and !_ink_player.has_choices:
text_box.text = ""
#TODO: Hardcodear las variables aquí
variables["time_to_add"] = _ink_player.get_variable("time_to_add")
variables["Foto1"] = _ink_player.get_variable("Foto1")
variables["Foto2"] = _ink_player.get_variable("Foto2")
variables["Foto3"] = _ink_player.get_variable("Foto3")
variables["Foto4"] = _ink_player.get_variable("Foto4")
variables["Foto5"] = _ink_player.get_variable("Foto5")
variables["Character1"] = _ink_player.get_variable("Character1")
variables["Character2"] = _ink_player.get_variable("Character2")
variables["Character3"] = _ink_player.get_variable("Character3")
variables["Character4"] = _ink_player.get_variable("Character4")
variables["Character5"] = _ink_player.get_variable("Character5")
#DIALOGUE END
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
active = false
return
if _ink_player.has_choices:
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
var i = 0
for choice in _ink_player.current_choices:
buttons[i].show()
buttons[i].text = choice.text
i += 1
for j in range(4 - i):
buttons[j + i].hide()
displaying_choices = true
return
text_box.text = ""
display_text(_ink_player.continue_story())
func _select_choice(index):
for button in buttons:
button.hide()
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
_ink_player.choose_choice_index(index)
_continue_story()
################## ANIMATIONS ###################
func display_text(text_to_display: String):
text = text_to_display
character_index = 0
finished_displaying = false
_display_letter()
func _display_letter():
if character_index >= text.length():
finished_displaying = true
return
text_box.text += text[character_index]
character_index += 1
$AudioStreamPlayer.stream = type_sounds.pick_random()
$AudioStreamPlayer.play()
if character_index >= text.length():
finished_displaying = true
return
timer.start(character_time)
func _on_text_display_timer_timeout():
_display_letter()