243 lines
7.7 KiB
GDScript
243 lines
7.7 KiB
GDScript
@tool
|
|
extends Control
|
|
class_name DialogNodeItem_message
|
|
|
|
signal remove_requested(requester)
|
|
signal move_up_requested(requester)
|
|
signal move_down_requested(requester)
|
|
signal drag_started(requester)
|
|
signal drag_ended(requester)
|
|
|
|
@export var data: Resource
|
|
|
|
#@onready var popup_menu = get_node("PopupMenu")
|
|
#@onready var dialog_edit = get_node("DialogEdit")
|
|
var edit_speaker_id
|
|
var edit_speaker_var
|
|
var edit_voiceclip
|
|
var edit_message_editor
|
|
var edit_preview
|
|
var edit_previewtimer
|
|
var edit_previewbg
|
|
var edit_btn_hide_on_end
|
|
|
|
#@onready var dialog_voiceclip = get_node("VoiceClipDialog")
|
|
|
|
var template_VoiceClipDialog: PackedScene = preload("res://addons/madtalk/components/popups/Messages_VoiceClipDialog.tscn")
|
|
var dialog_voiceclip: FileDialog
|
|
|
|
var template_DialogEdit: PackedScene = preload("res://addons/madtalk/components/popups/Messages_DialogEdit.tscn")
|
|
var dialog_edit: Window
|
|
|
|
var template_PopupMenu: PackedScene = preload("res://addons/madtalk/components/popups/DialogNodeItem_PopupMenu.tscn")
|
|
var popup_menu: PopupMenu
|
|
|
|
enum PopupOptions {
|
|
Edit,
|
|
MoveUp,
|
|
MoveDown,
|
|
Remove
|
|
}
|
|
|
|
@onready var box_height_margins = size.y - get_node("Panel/MessageLabel").size.y
|
|
@onready var dragdrop_line := $DragDropLine
|
|
|
|
var sequence_node = null
|
|
|
|
var message_speakervarlabel = null
|
|
var message_speakerlabel = null
|
|
var message_voicelabel = null
|
|
var message_msglabel = null
|
|
var message_hideonendlabel = null
|
|
var message_locale_list = null
|
|
|
|
|
|
|
|
func _ready():
|
|
if data:
|
|
set_data(data)
|
|
|
|
func set_data(new_data):
|
|
data = new_data
|
|
message_speakerlabel = get_node("SpeakerNameLabel")
|
|
message_speakervarlabel = get_node("SpeakerVariantLabel")
|
|
message_voicelabel = get_node("VoiceFileLabel")
|
|
message_msglabel = get_node("Panel/MessageLabel")
|
|
message_hideonendlabel = get_node("HideOnEndLabel")
|
|
message_locale_list = get_node("LocalesLabel")
|
|
update_from_data()
|
|
|
|
func update_height():
|
|
if is_inside_tree():
|
|
custom_minimum_size.y = min(
|
|
box_height_margins + message_msglabel.get_content_height(),
|
|
120
|
|
)
|
|
|
|
func update_from_data():
|
|
if data:
|
|
message_speakerlabel.text = data.message_speaker_id
|
|
message_speakervarlabel.text = data.message_speaker_variant
|
|
message_voicelabel.text = data.message_voice_clip
|
|
if data.message_voice_clip_locales.size() > 0:
|
|
message_voicelabel.text += " (" + (",".join(data.message_voice_clip_locales.keys())) + ")"
|
|
if message_voicelabel.text.length() > 40:
|
|
message_voicelabel.text = "..." + message_voicelabel.text.right(40)
|
|
message_msglabel.text = data.message_text
|
|
message_hideonendlabel.visible = (data.message_hide_on_end != 0)
|
|
if data.message_text_locales.size() == 0:
|
|
message_locale_list.text = ""
|
|
else:
|
|
message_locale_list.text = ",".join(data.message_text_locales.keys())
|
|
|
|
var variant_title = get_node("SpeakerVarLabel")
|
|
variant_title.visible = (data.message_speaker_variant != "")
|
|
|
|
var panel = get_node("Panel")
|
|
if message_voicelabel.text != "":
|
|
panel.offset_top = 40
|
|
else:
|
|
panel.offset_top = 28
|
|
|
|
update_height()
|
|
|
|
func create_dialog_edit():
|
|
if not dialog_edit:
|
|
dialog_edit = template_DialogEdit.instantiate() as Window
|
|
add_child(dialog_edit)
|
|
dialog_edit.get_node("Panel/MessageEditor").tab_changed.connect(_on_DialogEdit_MessageEdit_text_changed)
|
|
dialog_edit.get_node("Panel/MessageEditor").voice_clip_dialog_requested.connect(_on_BtnSelectClip_pressed)
|
|
dialog_edit.get_node("Panel/MessageEditor/MessageEdit").text_changed.connect(_on_DialogEdit_MessageEdit_text_changed)
|
|
dialog_edit.get_node("Panel/BtnTextColor").color_changed.connect(_on_DialogEdit_BtnTextColor_color_changed)
|
|
dialog_edit.get_node("Panel/BtnBGColor").color_changed.connect(_on_DialogEdit_BtnBGColor_color_changed)
|
|
dialog_edit.get_node("Panel/PreviewBox/PreviewTimer").timeout.connect(_on_DialogEdit_PreviewTimer_timeout)
|
|
dialog_edit.get_node("Panel/BottomBar/BtnSave").pressed.connect(_on_DialogEdit_BtnSave_pressed)
|
|
dialog_edit.get_node("Panel/BottomBar/BtnCancel").pressed.connect(_on_DialogEdit_BtnCancel_pressed)
|
|
|
|
edit_speaker_id = dialog_edit.get_node("Panel/SpeakerEdit")
|
|
edit_speaker_var = dialog_edit.get_node("Panel/VariantEdit")
|
|
#edit_voiceclip = dialog_edit.get_node("Panel/VoiceEdit")
|
|
edit_message_editor = dialog_edit.get_node("Panel/MessageEditor")
|
|
edit_preview = dialog_edit.get_node("Panel/PreviewBox/PreviewLabel")
|
|
edit_previewtimer = dialog_edit.get_node("Panel/PreviewBox/PreviewTimer")
|
|
edit_previewbg = dialog_edit.get_node("Panel/PreviewBox")
|
|
edit_btn_hide_on_end = dialog_edit.get_node("Panel/BtnHideOnEnd")
|
|
|
|
func dispose_dialog_edit():
|
|
if dialog_edit:
|
|
dialog_edit.queue_free()
|
|
dialog_edit = null
|
|
|
|
func create_voice_clip_dialog():
|
|
if not dialog_voiceclip:
|
|
dialog_voiceclip = template_VoiceClipDialog.instantiate()
|
|
add_child(dialog_voiceclip)
|
|
dialog_voiceclip.file_selected.connect(_on_FileDialog_voiceclip_selected)
|
|
|
|
func dispose_voice_clip_dialog():
|
|
if dialog_voiceclip:
|
|
dialog_voiceclip.queue_free()
|
|
dialog_voiceclip = null
|
|
|
|
|
|
func create_popup_menu():
|
|
if not popup_menu:
|
|
popup_menu = template_PopupMenu.instantiate() as PopupMenu
|
|
add_child(popup_menu)
|
|
popup_menu.id_pressed.connect(_on_PopupMenu_id_pressed)
|
|
|
|
func dispose_popup_menu():
|
|
if popup_menu:
|
|
popup_menu.queue_free()
|
|
popup_menu = null
|
|
|
|
|
|
|
|
func _on_DialogNodeItem_gui_input(event):
|
|
if (event is InputEventMouseButton):
|
|
if (event.pressed):
|
|
if (event.button_index == MOUSE_BUTTON_LEFT):
|
|
if event.double_click:
|
|
_on_PopupMenu_id_pressed(PopupOptions.Edit)
|
|
else:
|
|
drag_started.emit(self)
|
|
|
|
if (event.button_index == MOUSE_BUTTON_RIGHT):
|
|
var cursor_position = get_viewport().get_mouse_position() if get_viewport().gui_embed_subwindows else DisplayServer.mouse_get_position()
|
|
create_popup_menu()
|
|
popup_menu.popup(Rect2(cursor_position,Vector2(10,10)))
|
|
else:
|
|
if (event.button_index == MOUSE_BUTTON_LEFT):
|
|
drag_ended.emit(self)
|
|
|
|
|
|
|
|
|
|
func _on_PopupMenu_id_pressed(id):
|
|
dispose_popup_menu() # Handles null gracefully
|
|
match id:
|
|
PopupOptions.Edit:
|
|
create_dialog_edit()
|
|
edit_speaker_id.text = data.message_speaker_id
|
|
edit_speaker_var.text = data.message_speaker_variant
|
|
edit_message_editor.setup(data.message_text, data.message_text_locales, data.message_voice_clip, data.message_voice_clip_locales)
|
|
edit_btn_hide_on_end.button_pressed = (data.message_hide_on_end != 0)
|
|
_on_DialogEdit_PreviewTimer_timeout()
|
|
dialog_edit.popup_centered()
|
|
|
|
PopupOptions.MoveUp:
|
|
emit_signal("move_up_requested", self)
|
|
|
|
PopupOptions.MoveDown:
|
|
emit_signal("move_down_requested", self)
|
|
|
|
PopupOptions.Remove:
|
|
emit_signal("remove_requested", self)
|
|
|
|
|
|
|
|
func _on_DialogEdit_BtnCancel_pressed():
|
|
dispose_dialog_edit()
|
|
|
|
|
|
func _on_DialogEdit_BtnSave_pressed():
|
|
data.message_speaker_id = edit_speaker_id.text
|
|
data.message_speaker_variant = edit_speaker_var.text
|
|
|
|
edit_message_editor.finalize_editor()
|
|
data.message_text = edit_message_editor.get_default_locale_message()
|
|
data.message_text_locales = edit_message_editor.get_locale_messages_without_default()
|
|
data.message_voice_clip = edit_message_editor.get_default_locale_voiceclip()
|
|
data.message_voice_clip_locales = edit_message_editor.get_locale_voiceclips_without_default()
|
|
|
|
data.message_hide_on_end = 1 if edit_btn_hide_on_end.button_pressed else 0
|
|
update_from_data()
|
|
dispose_dialog_edit()
|
|
|
|
|
|
|
|
func _on_DialogEdit_PreviewTimer_timeout():
|
|
edit_preview.text = edit_message_editor.message_edit.text
|
|
|
|
|
|
func _on_DialogEdit_MessageEdit_text_changed():
|
|
edit_previewtimer.start(1.0)
|
|
|
|
|
|
func _on_DialogEdit_BtnTextColor_color_changed(color):
|
|
edit_preview.set("theme_override_colors/default_color", color)
|
|
|
|
|
|
func _on_DialogEdit_BtnBGColor_color_changed(color):
|
|
edit_previewbg.color = color
|
|
|
|
|
|
func _on_BtnSelectClip_pressed():
|
|
create_voice_clip_dialog()
|
|
dialog_voiceclip.popup_centered()
|
|
|
|
|
|
func _on_FileDialog_voiceclip_selected(path):
|
|
edit_message_editor.set_voice_clip(path)
|
|
dispose_voice_clip_dialog()
|