You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
3.6 KiB

6 months ago
@tool
class_name DialogicTextInputEvent
extends DialogicEvent
## Event that shows an input field and will change a dialogic variable.
### Settings
## The promt to be shown.
var text: String = "Please enter some text:"
## The name/path of the variable to set.
var variable: String = ""
## The placeholder text to show in the line edit.
var placeholder: String = ""
## The value that should be in the line edit by default.
var default: String = ""
## If true, the player can continue if nothing is entered.
var allow_empty : bool = false
################################################################################
## EXECUTION
################################################################################
func _execute() -> void:
dialogic.Inputs.auto_skip.enabled = false
dialogic.current_state = DialogicGameHandler.States.WAITING
dialogic.TextInput.show_text_input(text, default, placeholder, allow_empty)
dialogic.TextInput.input_confirmed.connect(_on_DialogicTextInput_input_confirmed, CONNECT_ONE_SHOT)
func _on_DialogicTextInput_input_confirmed(input:String) -> void:
if !dialogic.has_subsystem('VAR'):
printerr('[Dialogic] The TextInput event needs the variable subsystem to be present.')
finish()
return
dialogic.VAR.set_variable(variable, input)
dialogic.TextInput.hide_text_input()
dialogic.current_state = DialogicGameHandler.States.IDLE
finish()
################################################################################
## SAVING/LOADING
################################################################################
func _init() -> void:
event_name = "Text Input"
set_default_color('Color6')
event_category = "Logic"
event_sorting_index = 6
################################################################################
## SAVING/LOADING
################################################################################
func get_shortcode() -> String:
return "text_input"
func get_shortcode_parameters() -> Dictionary:
return {
#param_name : property_info
"text" : {"property": "text", "default": "Please enter some text:"},
"var" : {"property": "variable", "default": "", "suggestions":get_var_suggestions},
"placeholder" : {"property": "placeholder", "default": ""},
"default" : {"property": "default", "default": ""},
"allow_empty" : {"property": "allow_empty", "default": false},
}
################################################################################
## EDITOR
################################################################################
func build_event_editor() -> void:
add_header_label('Show an input and store it in')
add_header_edit('variable', ValueType.DYNAMIC_OPTIONS,
{'suggestions_func' : get_var_suggestions,
'icon' : load("res://addons/dialogic/Editor/Images/Pieces/variable.svg"),
'placeholder':'Select Variable'})
add_body_edit('text', ValueType.SINGLELINE_TEXT, {'left_text':'Text:'})
add_body_edit('placeholder', ValueType.SINGLELINE_TEXT, {'left_text':'Placeholder:'})
add_body_edit('default', ValueType.SINGLELINE_TEXT, {'left_text':'Default:'})
add_body_edit('allow_empty', ValueType.BOOL, {'left_text':'Allow empty:'})
func get_var_suggestions(filter:String="") -> Dictionary:
var suggestions := {}
if filter:
suggestions[filter] = {
'value' : filter,
'editor_icon' : ["GuiScrollArrowRight", "EditorIcons"]}
var vars :Dictionary = ProjectSettings.get_setting('dialogic/variables', {})
for var_path in DialogicUtil.list_variables(vars, "", DialogicUtil.VarTypes.STRING):
suggestions[var_path] = {'value':var_path, 'icon':load("res://addons/dialogic/Editor/Images/Pieces/variable.svg")}
return suggestions