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.
157 lines
4.6 KiB
157 lines
4.6 KiB
6 months ago
|
@tool
|
||
|
class_name DialogicBackgroundEvent
|
||
|
extends DialogicEvent
|
||
|
|
||
|
## Event to show scenes in the background and switch between them.
|
||
|
|
||
|
### Settings
|
||
|
|
||
|
## The scene to use. If empty, this will default to the DefaultBackground.gd scene.
|
||
|
## This scene supports images and fading.
|
||
|
## If you set it to a scene path, then that scene will be instanced.
|
||
|
## Learn more about custom backgrounds in the Subsystem_Background.gd docs.
|
||
|
var scene: String = ""
|
||
|
## The argument that is passed to the background scene.
|
||
|
## For the default scene it's the path to the image to show.
|
||
|
var argument: String = ""
|
||
|
## The time the fade animation will take. Leave at 0 for instant change.
|
||
|
var fade: float = 0.0
|
||
|
## Name of the transition to use.
|
||
|
var transition: String = ""
|
||
|
|
||
|
## Helpers for visual editor
|
||
|
enum ArgumentTypes {IMAGE, CUSTOM}
|
||
|
var _arg_type := ArgumentTypes.IMAGE :
|
||
|
get:
|
||
|
if argument.begins_with("res://"):
|
||
|
return ArgumentTypes.IMAGE
|
||
|
else:
|
||
|
return _arg_type
|
||
|
set(value):
|
||
|
if value == ArgumentTypes.CUSTOM:
|
||
|
if argument.begins_with("res://"):
|
||
|
argument = " "+argument
|
||
|
_arg_type = value
|
||
|
|
||
|
enum SceneTypes {DEFAULT, CUSTOM}
|
||
|
var _scene_type := SceneTypes.DEFAULT :
|
||
|
get:
|
||
|
if scene.is_empty():
|
||
|
return _scene_type
|
||
|
else:
|
||
|
return SceneTypes.CUSTOM
|
||
|
set(value):
|
||
|
if value == SceneTypes.DEFAULT:
|
||
|
scene = ""
|
||
|
_scene_type = value
|
||
|
|
||
|
#region EXECUTION
|
||
|
################################################################################
|
||
|
|
||
|
func _execute() -> void:
|
||
|
var final_fade_duration := fade
|
||
|
|
||
|
if dialogic.Inputs.auto_skip.enabled:
|
||
|
var time_per_event: float = dialogic.Inputs.auto_skip.time_per_event
|
||
|
final_fade_duration = min(fade, time_per_event)
|
||
|
|
||
|
dialogic.Backgrounds.update_background(scene, argument, final_fade_duration, transition)
|
||
|
|
||
|
finish()
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region INITIALIZE
|
||
|
################################################################################
|
||
|
|
||
|
func _init() -> void:
|
||
|
event_name = "Background"
|
||
|
set_default_color('Color8')
|
||
|
event_category = "Visuals"
|
||
|
event_sorting_index = 0
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region SAVE & LOAD
|
||
|
################################################################################
|
||
|
|
||
|
func get_shortcode() -> String:
|
||
|
return "background"
|
||
|
|
||
|
|
||
|
func get_shortcode_parameters() -> Dictionary:
|
||
|
return {
|
||
|
#param_name : property_info
|
||
|
"scene" : {"property": "scene", "default": ""},
|
||
|
"arg" : {"property": "argument", "default": ""},
|
||
|
"fade" : {"property": "fade", "default": 0},
|
||
|
"transition" : {"property": "transition", "default": "",
|
||
|
"suggestions": get_transition_suggestions},
|
||
|
}
|
||
|
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region EDITOR REPRESENTATION
|
||
|
################################################################################
|
||
|
|
||
|
func build_event_editor():
|
||
|
add_header_edit('_scene_type', ValueType.FIXED_OPTIONS, {
|
||
|
'left_text' :'Show',
|
||
|
'options': [
|
||
|
{
|
||
|
'label': 'Background',
|
||
|
'value': SceneTypes.DEFAULT,
|
||
|
'icon': ["GuiRadioUnchecked", "EditorIcons"]
|
||
|
},
|
||
|
{
|
||
|
'label': 'Custom Scene',
|
||
|
'value': SceneTypes.CUSTOM,
|
||
|
'icon': ["PackedScene", "EditorIcons"]
|
||
|
}
|
||
|
]})
|
||
|
add_header_label("with image", "_scene_type == SceneTypes.DEFAULT")
|
||
|
add_header_edit("scene", ValueType.FILE,
|
||
|
{'file_filter':'*.tscn, *.scn; Scene Files',
|
||
|
'placeholder': "Custom scene",
|
||
|
'editor_icon': ["PackedScene", "EditorIcons"],
|
||
|
}, '_scene_type == SceneTypes.CUSTOM')
|
||
|
add_header_edit('_arg_type', ValueType.FIXED_OPTIONS, {
|
||
|
'left_text' : 'with',
|
||
|
'options': [
|
||
|
{
|
||
|
'label': 'Image',
|
||
|
'value': ArgumentTypes.IMAGE,
|
||
|
'icon': ["Image", "EditorIcons"]
|
||
|
},
|
||
|
{
|
||
|
'label': 'Custom Argument',
|
||
|
'value': ArgumentTypes.CUSTOM,
|
||
|
'icon': ["String", "EditorIcons"]
|
||
|
}
|
||
|
], "symbol_only": true}, "_scene_type == SceneTypes.CUSTOM")
|
||
|
add_header_edit('argument', ValueType.FILE,
|
||
|
{'file_filter':'*.jpg, *.jpeg, *.png, *.webp, *.tga, *svg, *.bmp, *.dds, *.exr, *.hdr; Supported Image Files',
|
||
|
'placeholder': "No Image",
|
||
|
'editor_icon': ["Image", "EditorIcons"],
|
||
|
},
|
||
|
'_arg_type == ArgumentTypes.IMAGE or _scene_type == SceneTypes.DEFAULT')
|
||
|
add_header_edit('argument', ValueType.SINGLELINE_TEXT, {}, '_arg_type == ArgumentTypes.CUSTOM')
|
||
|
|
||
|
add_body_edit("transition", ValueType.DYNAMIC_OPTIONS,
|
||
|
{'left_text':'Transition:',
|
||
|
'empty_text':'Simple Fade',
|
||
|
'suggestions_func':get_transition_suggestions,
|
||
|
'editor_icon':["PopupMenu", "EditorIcons"]})
|
||
|
add_body_edit("fade", ValueType.NUMBER, {'left_text':'Fade time:'})
|
||
|
|
||
|
|
||
|
func get_transition_suggestions(filter:String="") -> Dictionary:
|
||
|
var transitions := DialogicResourceUtil.list_special_resources_of_type("BackgroundTransition")
|
||
|
var suggestions := {}
|
||
|
for i in transitions:
|
||
|
suggestions[DialogicUtil.pretty_name(i)] = {'value': DialogicUtil.pretty_name(i), 'editor_icon': ["PopupMenu", "EditorIcons"]}
|
||
|
return suggestions
|
||
|
|
||
|
#endregion
|