pir-serious-game-ethics/addons/dialogic/Editor/Events/Templates/EventTemplate.gd
2021-04-21 00:03:44 +02:00

156 lines
4.4 KiB
GDScript

tool
extends HBoxContainer
export(StyleBoxFlat) var event_style : StyleBoxFlat
export(Texture) var event_icon : Texture
export(String) var event_name : String
export(PackedScene) var header_scene : PackedScene
export(PackedScene) var body_scene : PackedScene
signal option_action(action_name)
onready var panel = $PanelContainer
onready var title_container = $PanelContainer/MarginContainer/VBoxContainer/Header/TitleHBoxContainer
onready var title_label = $PanelContainer/MarginContainer/VBoxContainer/Header/TitleHBoxContainer/TitleMarginContainer/TitleLabel
onready var icon_texture = $PanelContainer/MarginContainer/VBoxContainer/Header/IconMarginContainer/IconTexture
onready var expand_control = $PanelContainer/MarginContainer/VBoxContainer/Header/ExpandControl
onready var options_control = $PanelContainer/MarginContainer/VBoxContainer/Header/OptionsControl
onready var header_content_container = $PanelContainer/MarginContainer/VBoxContainer/Header/Content
onready var body_container = $PanelContainer/MarginContainer/VBoxContainer/Body
onready var body_content_container = $PanelContainer/MarginContainer/VBoxContainer/Body/Content
onready var indent_node = $Indent
var editor_reference
var header_node
var body_node
var indent_size = 25
# Setting this to true will ignore the event while saving
# Useful for making placeholder events in drag and drop
var ignore_save = false
# This is the data that is going to be saved to json
var event_data := {}
## *****************************************************************************
## PUBLIC METHODS
## *****************************************************************************
# Called when timeline editor loads
func load_data(data):
event_data = data
func set_event_style(style: StyleBoxFlat):
panel.set('custom_styles/panel', style)
func get_event_style():
return panel.get('custom_styles/panel')
func set_event_icon(icon: Texture):
icon_texture.texture = icon
func set_event_name(text: String):
title_label.text = text
if text.empty():
title_container.hide()
else:
title_container.show()
func set_header(scene: PackedScene):
header_node = _set_content(header_content_container, scene)
func set_body(scene: PackedScene):
body_node = _set_content(body_content_container, scene)
expand_control.set_enabled(body_node != null)
func get_body():
return body_node
func get_header():
return header_node
func set_preview(text: String):
expand_control.set_preview(text)
func set_indent(indent: int):
indent_node.rect_min_size = Vector2(indent_size * indent, 0)
indent_node.visible = indent != 0
# Override in inherited class
func on_timeline_selected(selected: bool):
pass
func set_expanded(expanded: bool):
expand_control.set_expanded(expanded)
## *****************************************************************************
## PRIVATE METHODS
## *****************************************************************************
func _setup_event():
if event_style != null:
set_event_style(event_style)
if event_icon != null:
set_event_icon(event_icon)
if event_name != null:
set_event_name(event_name)
if header_scene != null:
set_header(header_scene)
if body_scene != null:
set_body(body_scene)
func _set_content(container: Control, scene: PackedScene):
for c in container.get_children():
container.remove_child(c)
if scene != null:
var node = scene.instance()
container.add_child(node)
# node.set_owner(get_tree().get_edited_scene_root())
return node
return null
func _on_ExpandControl_state_changed(expanded: bool):
if expanded:
body_container.show()
else:
body_container.hide()
func _on_OptionsControl_action(action_name: String):
# Simply transmit the signal to the timeline editor
emit_signal("option_action", action_name)
func _on_gui_input(event):
if event is InputEventMouseButton and event.is_pressed() and event.doubleclick and event.button_index == 1 and expand_control.enabled:
expand_control.set_expanded(not expand_control.expanded)
## *****************************************************************************
## OVERRIDES
## *****************************************************************************
func _ready():
_setup_event()
panel.connect("gui_input", self, '_on_gui_input')
expand_control.connect("state_changed", self, "_on_ExpandControl_state_changed")
options_control.connect("action", self, "_on_OptionsControl_action")
expand_control.set_enabled(body_scene != null)