Initial commit
This commit is contained in:
54
singletons/Dialogs.gd
Normal file
54
singletons/Dialogs.gd
Normal file
@@ -0,0 +1,54 @@
|
||||
extends Node
|
||||
|
||||
"""
|
||||
This is the Dialogs system. Any object can send text to it by doing Dialogs.show_dialog(text, speaker)
|
||||
|
||||
Before using it 'dialog_box' should be set to some node that implements the following
|
||||
signal dialog_started
|
||||
signal dialog_ended
|
||||
func show_dialog(text, speaker)
|
||||
|
||||
This script will connect to those signals and use them to set 'active' to true or false and forward them to other nodes,
|
||||
so they can react to the dialog system being active(showing dialog) or inactive
|
||||
|
||||
Calls to show_dialog will be forwarded to the dialog_box which is free to implement them in any way (showing the text on screen,
|
||||
using text to speech, etc)
|
||||
"""
|
||||
|
||||
signal dialog_started
|
||||
signal dialog_ended
|
||||
|
||||
var active = false
|
||||
|
||||
var dialog_box = null: set = _set_dialog_box
|
||||
|
||||
func show_dialog(text:String, speaker:String):
|
||||
if is_instance_valid(dialog_box):
|
||||
dialog_box.show_dialog(text, speaker)
|
||||
|
||||
func _set_dialog_box(node):
|
||||
if not node is Node:
|
||||
push_error("provided node doesn't extend Node")
|
||||
return
|
||||
|
||||
dialog_box = node
|
||||
|
||||
if dialog_box.get_script().has_script_signal("dialog_started"):
|
||||
dialog_box.dialog_started.connect(_on_dialog_started)
|
||||
else:
|
||||
push_error("provided node doesn't implement dialog_started signal")
|
||||
|
||||
if dialog_box.get_script().has_script_signal("dialog_ended"):
|
||||
dialog_box.dialog_ended.connect(_on_dialog_ended)
|
||||
else:
|
||||
push_error("provided node doesn't implement dialog_started signal")
|
||||
|
||||
pass
|
||||
|
||||
func _on_dialog_started():
|
||||
active = true
|
||||
emit_signal("dialog_started")
|
||||
|
||||
func _on_dialog_ended():
|
||||
active = false
|
||||
emit_signal("dialog_ended")
|
||||
Reference in New Issue
Block a user