145 lines
6.0 KiB
GDScript
145 lines
6.0 KiB
GDScript
@tool
|
|
extends VBoxContainer
|
|
|
|
|
|
signal script_button_pressed(path: String)
|
|
|
|
|
|
const DialogueConstants = preload("res://addons/dialogue_manager/constants.gd")
|
|
const DialogueSettings = preload("res://addons/dialogue_manager/components/settings.gd")
|
|
|
|
|
|
const DEFAULT_TEST_SCENE_PATH = "res://addons/dialogue_manager/test_scene.tscn"
|
|
|
|
|
|
@onready var new_template_button: CheckBox = $NewTemplateButton
|
|
@onready var missing_translations_button: CheckBox = $MissingTranslationsButton
|
|
@onready var wrap_lines_button: Button = $WrapLinesButton
|
|
@onready var test_scene_path_input: LineEdit = $CustomTestScene/TestScenePath
|
|
@onready var revert_test_scene_button: Button = $CustomTestScene/RevertTestScene
|
|
@onready var load_test_scene_button: Button = $CustomTestScene/LoadTestScene
|
|
@onready var custom_test_scene_file_dialog: FileDialog = $CustomTestSceneFileDialog
|
|
@onready var include_all_responses_button: Button = $IncludeAllResponsesButton
|
|
@onready var states_title: Label = $StatesTitle
|
|
@onready var globals_list: Tree = $GlobalsList
|
|
|
|
var editor_plugin: EditorPlugin
|
|
var all_globals: Dictionary = {}
|
|
var enabled_globals: Array = []
|
|
|
|
|
|
func _ready() -> void:
|
|
$NewTemplateButton.text = DialogueConstants.translate("settings.new_template")
|
|
$MissingTranslationsButton.text = DialogueConstants.translate("settings.missing_keys")
|
|
$MissingTranslationsHint.text = DialogueConstants.translate("settings.missing_keys_hint")
|
|
$WrapLinesButton.text = DialogueConstants.translate("settings.wrap_long_lines")
|
|
$IncludeAllResponsesButton.text = DialogueConstants.translate("settings.include_failed_responses")
|
|
$CustomTestSceneLabel.text = DialogueConstants.translate("settings.custom_test_scene")
|
|
$StatesTitle.text = DialogueConstants.translate("settings.states_shortcuts")
|
|
$StatesMessage.text = DialogueConstants.translate("settings.states_message")
|
|
$StatesHint.text = DialogueConstants.translate("settings.states_hint")
|
|
|
|
|
|
func prepare() -> void:
|
|
test_scene_path_input.placeholder_text = DialogueSettings.get_setting("custom_test_scene_path", DEFAULT_TEST_SCENE_PATH)
|
|
revert_test_scene_button.visible = test_scene_path_input.placeholder_text != DEFAULT_TEST_SCENE_PATH
|
|
revert_test_scene_button.icon = get_theme_icon("RotateLeft", "EditorIcons")
|
|
revert_test_scene_button.tooltip_text = DialogueConstants.translate("settings.revert_to_default_test_scene")
|
|
load_test_scene_button.icon = get_theme_icon("Load", "EditorIcons")
|
|
|
|
var scale: float = editor_plugin.get_editor_interface().get_editor_scale()
|
|
custom_test_scene_file_dialog.min_size = Vector2(600, 500) * scale
|
|
|
|
states_title.add_theme_font_override("font", get_theme_font("bold", "EditorFonts"))
|
|
|
|
missing_translations_button.set_pressed_no_signal(DialogueSettings.get_setting("missing_translations_are_errors", false))
|
|
wrap_lines_button.set_pressed_no_signal(DialogueSettings.get_setting("wrap_lines", false))
|
|
include_all_responses_button.set_pressed_no_signal(DialogueSettings.get_setting("include_all_responses", false))
|
|
new_template_button.set_pressed_no_signal(DialogueSettings.get_setting("new_with_template", true))
|
|
|
|
var project = ConfigFile.new()
|
|
var err = project.load("res://project.godot")
|
|
assert(err == OK, "Could not find the project file")
|
|
|
|
all_globals.clear()
|
|
if project.has_section("autoload"):
|
|
for key in project.get_section_keys("autoload"):
|
|
if key != "DialogueManager":
|
|
all_globals[key] = project.get_value("autoload", key)
|
|
|
|
enabled_globals = DialogueSettings.get_setting("states", [])
|
|
globals_list.clear()
|
|
var root = globals_list.create_item()
|
|
for name in all_globals.keys():
|
|
var item: TreeItem = globals_list.create_item(root)
|
|
item.set_cell_mode(0, TreeItem.CELL_MODE_CHECK)
|
|
item.set_checked(0, name in enabled_globals)
|
|
item.set_text(0, name)
|
|
item.add_button(1, get_theme_icon("Edit", "EditorIcons"))
|
|
item.set_text(2, all_globals.get(name, "").replace("*res://", "res://"))
|
|
|
|
globals_list.set_column_expand(0, false)
|
|
globals_list.set_column_custom_minimum_width(0, 250)
|
|
globals_list.set_column_expand(1, false)
|
|
globals_list.set_column_custom_minimum_width(1, 40)
|
|
globals_list.set_column_titles_visible(true)
|
|
globals_list.set_column_title(0, DialogueConstants.translate("settings.autoload"))
|
|
globals_list.set_column_title(1, "")
|
|
globals_list.set_column_title(2, DialogueConstants.translate("settings.path"))
|
|
|
|
|
|
### Signals
|
|
|
|
|
|
func _on_settings_view_visibility_changed() -> void:
|
|
prepare()
|
|
|
|
|
|
func _on_missing_translations_button_toggled(button_pressed: bool) -> void:
|
|
DialogueSettings.set_setting("missing_translations_are_errors", button_pressed)
|
|
|
|
|
|
func _on_wrap_lines_button_toggled(button_pressed: bool) -> void:
|
|
DialogueSettings.set_setting("wrap_lines", button_pressed)
|
|
|
|
|
|
func _on_include_all_responses_button_toggled(button_pressed: bool) -> void:
|
|
DialogueSettings.set_setting("include_all_responses", button_pressed)
|
|
|
|
|
|
func _on_globals_list_item_selected() -> void:
|
|
var item = globals_list.get_selected()
|
|
var is_checked = not item.is_checked(0)
|
|
item.set_checked(0, is_checked)
|
|
|
|
if is_checked:
|
|
enabled_globals.append(item.get_text(0))
|
|
else:
|
|
enabled_globals.erase(item.get_text(0))
|
|
|
|
DialogueSettings.set_setting("states", enabled_globals)
|
|
|
|
|
|
func _on_globals_list_button_clicked(item: TreeItem, column: int, id: int, mouse_button_index: int) -> void:
|
|
emit_signal("script_button_pressed", item.get_text(2))
|
|
|
|
|
|
func _on_sample_template_toggled(button_pressed):
|
|
DialogueSettings.set_setting("new_with_template", button_pressed)
|
|
|
|
|
|
func _on_revert_test_scene_pressed() -> void:
|
|
DialogueSettings.set_setting("custom_test_scene_path", DEFAULT_TEST_SCENE_PATH)
|
|
test_scene_path_input.placeholder_text = DEFAULT_TEST_SCENE_PATH
|
|
revert_test_scene_button.visible = test_scene_path_input.placeholder_text != DEFAULT_TEST_SCENE_PATH
|
|
|
|
|
|
func _on_load_test_scene_pressed() -> void:
|
|
custom_test_scene_file_dialog.popup_centered()
|
|
|
|
|
|
func _on_custom_test_scene_file_dialog_file_selected(path: String) -> void:
|
|
DialogueSettings.set_setting("custom_test_scene_path", path)
|
|
test_scene_path_input.placeholder_text = path
|
|
revert_test_scene_button.visible = test_scene_path_input.placeholder_text != DEFAULT_TEST_SCENE_PATH
|