114 lines
3.3 KiB
GDScript
114 lines
3.3 KiB
GDScript
extends CanvasLayer
|
|
|
|
var in_dialog = false
|
|
var tip_timer : Timer
|
|
var zone_timer : Timer
|
|
|
|
const TIP_FADE_RATE = 0.1
|
|
const SHOW_TIP_TIME = 3
|
|
|
|
const ZONE_FADE_RATE = 0.05
|
|
const SHOW_ZONE_TIME = 3
|
|
|
|
func _ready():
|
|
$Dialog.hide()
|
|
$Tip.hide()
|
|
$ZoneLabel.hide()
|
|
|
|
func is_in_dialog():
|
|
return in_dialog or $Dialog.is_visible_in_tree()
|
|
|
|
func current_dialog():
|
|
return $Dialog/Textbox/Body.text
|
|
|
|
func set_dialog(message, speaker=""):
|
|
$Dialog.show()
|
|
in_dialog = true
|
|
$Dialog/Textbox/Speaker.text = speaker
|
|
$Dialog/Textbox/Body.text = message
|
|
|
|
func finish_dialog():
|
|
in_dialog = false
|
|
$Dialog.hide()
|
|
|
|
func clear_choices():
|
|
$Dialog/ChoicesPanel.hide()
|
|
for i in range($Dialog/ChoicesPanel/Choices.get_child_count()):
|
|
$Dialog/ChoicesPanel/Choices.get_child(i).queue_free()
|
|
|
|
func add_choice(speaker : Node, choice_id : int, choice_text : String):
|
|
$Dialog/ChoicesPanel.hide()
|
|
var button = Button.new()
|
|
button.text = choice_text
|
|
button.connect("button_down", speaker, "_on_choice", [choice_id])
|
|
$Dialog/ChoicesPanel/Choices.add_child(button)
|
|
|
|
func show_choices():
|
|
$Dialog/ChoicesPanel.show()
|
|
if $Dialog/ChoicesPanel/Choices.get_child_count() == 0:
|
|
var label = Label.new()
|
|
label.text = "Press SPACE to continue"
|
|
$Dialog/ChoicesPanel/Choices.add_child(label)
|
|
|
|
func display_tip(tip):
|
|
$Tip.modulate.a = 0
|
|
$Tip.text = tip
|
|
$Tip.show()
|
|
if not tip_timer:
|
|
tip_timer = Timer.new()
|
|
add_child(tip_timer)
|
|
tip_timer.disconnect("timeout", self, "fade_tip_out")
|
|
tip_timer.disconnect("timeout", self, "start_fade_tip_out")
|
|
tip_timer.connect("timeout", self, "fade_tip_in")
|
|
tip_timer.start(TIP_FADE_RATE)
|
|
|
|
func start_fade_tip_out():
|
|
tip_timer.disconnect("timeout", self, "fade_tip_in")
|
|
tip_timer.disconnect("timeout", self, "start_fade_tip_out")
|
|
tip_timer.connect("timeout", self, "fade_tip_out")
|
|
tip_timer.start(TIP_FADE_RATE)
|
|
|
|
func fade_tip_in():
|
|
$Tip.modulate.a = clamp($Tip.modulate.a + 0.1, 0, 1)
|
|
if $Tip.modulate.a == 1:
|
|
tip_timer.disconnect("timeout", self, "fade_tip_out")
|
|
tip_timer.disconnect("timeout", self, "fade_tip_in")
|
|
tip_timer.connect("timeout", self, "start_fade_tip_out")
|
|
tip_timer.start(SHOW_TIP_TIME)
|
|
|
|
func fade_tip_out():
|
|
$Tip.modulate.a = clamp($Tip.modulate.a - 0.1, 0, 1)
|
|
if $Tip.modulate.a == 0:
|
|
tip_timer.stop()
|
|
|
|
func display_zone(zone):
|
|
$ZoneLabel.modulate.a = 0
|
|
$ZoneLabel.text = "Entering: " + zone
|
|
$ZoneLabel.show()
|
|
if not zone_timer:
|
|
zone_timer = Timer.new()
|
|
add_child(zone_timer)
|
|
zone_timer.disconnect("timeout", self, "fade_zone_out")
|
|
zone_timer.disconnect("timeout", self, "start_fade_zone_out")
|
|
zone_timer.connect("timeout", self, "fade_zone_in")
|
|
zone_timer.start(ZONE_FADE_RATE)
|
|
|
|
func start_fade_zone_out():
|
|
zone_timer.disconnect("timeout", self, "fade_zone_in")
|
|
zone_timer.disconnect("timeout", self, "start_fade_zone_out")
|
|
zone_timer.connect("timeout", self, "fade_zone_out")
|
|
zone_timer.start(ZONE_FADE_RATE)
|
|
|
|
func fade_zone_in():
|
|
$ZoneLabel.modulate.a = clamp($ZoneLabel.modulate.a + 0.1, 0, 1)
|
|
if $ZoneLabel.modulate.a == 1:
|
|
zone_timer.disconnect("timeout", self, "fade_zone_out")
|
|
zone_timer.disconnect("timeout", self, "fade_zone_in")
|
|
zone_timer.connect("timeout", self, "start_fade_zone_out")
|
|
zone_timer.start(SHOW_ZONE_TIME)
|
|
|
|
func fade_zone_out():
|
|
$ZoneLabel.modulate.a = clamp($ZoneLabel.modulate.a - 0.1, 0, 1)
|
|
if $ZoneLabel.modulate.a == 0:
|
|
zone_timer.stop()
|