From 12bce947f6d81b4fb73ecc68756089ccad8e62d0 Mon Sep 17 00:00:00 2001 From: eggman20339 Date: Tue, 10 Sep 2024 15:24:43 -0400 Subject: [PATCH 1/2] added flipping of idle sprite anim and added flipping of actionable detector based on left or right facing --- Assets/Characters/Friendly/Tellik/tellick.gd | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Assets/Characters/Friendly/Tellik/tellick.gd b/Assets/Characters/Friendly/Tellik/tellick.gd index 8bd44dc..7abe39a 100644 --- a/Assets/Characters/Friendly/Tellik/tellick.gd +++ b/Assets/Characters/Friendly/Tellik/tellick.gd @@ -7,6 +7,8 @@ const MIN_JUMP_DURATION = 0.01 const GRAVITY = 980 const FALL_GRAVITY_MULTIPLIER = 2 +var isFacingRight: bool + var jump_timer = 0.0 var is_jumping = false @@ -36,6 +38,19 @@ func _physics_process(delta): # Handle horizontal movement var direction = Input.get_axis("move_left", "move_right") + + if direction < 0: + isFacingRight = false + elif direction > 0: + isFacingRight = true + + if isFacingRight: + $Marker2D.scale.x = 1 + $AnimatedSprite2D.scale.x = 1 * 0.2 + else: + $Marker2D.scale.x = -1 + $AnimatedSprite2D.scale.x = -1 * 0.2 + if direction: velocity.x = direction * SPEED else: From d7f8e56cb0721ecc0164045506b40e2bad4b7624 Mon Sep 17 00:00:00 2001 From: Egg Man Date: Wed, 25 Sep 2024 17:04:33 -0400 Subject: [PATCH 2/2] added buggy crouching --- Assets/Characters/Friendly/Tellik/tellick.gd | 92 +- Dialouges/actionable.tscn | 1 + addons/dialogic-main/LICENSE | 21 + addons/dialogic-main/README.md | 78 + .../Tests/Resources/unit_test_character.dch | 19 + .../Tests/Unit/glossary_resource_test.gd | 76 + .../Tests/Unit/guess_special_resource_test.gd | 40 + .../Tests/Unit/subsystem_history_test.gd | 51 + .../Tests/Unit/subsystem_text_test.gd | 27 + .../Tests/Unit/test_auto_advance.gd | 19 + .../dialogic-main/Tests/Unit/test_example.gd | 9 + .../dialogic/Core/DialogicGameHandler.gd | 433 ++++++ .../dialogic/Core/DialogicResourceUtil.gd | 291 ++++ .../addons/dialogic/Core/DialogicUtil.gd | 676 +++++++++ .../dialogic/Core/Dialogic_Subsystem.gd | 41 + .../addons/dialogic/Core/index_class.gd | 152 ++ .../char_edit_p_section_exports.gd | 91 ++ .../char_edit_p_section_exports.tscn | 16 + .../char_edit_p_section_layout.gd | 44 + .../char_edit_p_section_layout.tscn | 64 + .../char_edit_p_section_main.gd | 101 ++ .../char_edit_p_section_main.tscn | 72 + .../char_edit_p_section_main_exports.gd | 80 ++ .../char_edit_p_section_main_exports.tscn | 15 + .../char_edit_section_general.gd | 53 + .../char_edit_section_general.tscn | 114 ++ .../char_edit_section_portraits.gd | 77 + .../char_edit_section_portraits.tscn | 59 + .../CharacterEditor/character_editor.gd | 687 +++++++++ .../CharacterEditor/character_editor.tscn | 456 ++++++ .../character_editor_main_settings_section.gd | 41 + ...racter_editor_portrait_settings_section.gd | 48 + .../character_editor_portrait_tree.gd | 138 ++ .../CharacterEditor/portrait_scene_browser.gd | 126 ++ .../portrait_scene_browser.tscn | 260 ++++ .../dialogic/Editor/Common/BrowserItem.gd | 86 ++ .../dialogic/Editor/Common/BrowserItem.tscn | 154 ++ .../addons/dialogic/Editor/Common/DCSS.gd | 47 + .../ReferenceManager_AddReplacementPanel.gd | 119 ++ .../Editor/Common/TitleBgStylebox.tres | 8 + .../Editor/Common/broken_reference_manager.gd | 363 +++++ .../Editor/Common/hint_tooltip_icon.gd | 12 + .../Editor/Common/hint_tooltip_icon.tscn | 21 + .../Editor/Common/reference_manager.gd | 38 + .../Editor/Common/reference_manager.tscn | 324 +++++ .../Editor/Common/reference_manager_window.gd | 191 +++ .../dialogic/Editor/Common/side_bar.tscn | 175 +++ .../addons/dialogic/Editor/Common/sidebar.gd | 480 +++++++ .../addons/dialogic/Editor/Common/toolbar.gd | 49 + .../Common/unique_identifiers_manager.gd | 95 ++ .../Editor/Common/update_install_window.gd | 180 +++ .../Editor/Common/update_install_window.tscn | 308 ++++ .../dialogic/Editor/Common/update_manager.gd | 192 +++ .../dialogic/Editor/Events/BranchEnd.gd | 85 ++ .../dialogic/Editor/Events/BranchEnd.tscn | 48 + .../Editor/Events/EventBlock/event_block.gd | 419 ++++++ .../Editor/Events/EventBlock/event_block.tscn | 133 ++ .../EventBlock/event_right_click_menu.gd | 22 + .../Editor/Events/Fields/array_part.gd | 28 + .../Editor/Events/Fields/array_part.tscn | 39 + .../Editor/Events/Fields/dictionary_part.gd | 44 + .../Editor/Events/Fields/dictionary_part.tscn | 54 + .../Editor/Events/Fields/field_array.gd | 48 + .../Editor/Events/Fields/field_array.tscn | 28 + .../Editor/Events/Fields/field_bool_button.gd | 38 + .../Events/Fields/field_bool_button.tscn | 13 + .../Editor/Events/Fields/field_bool_check.gd | 30 + .../Events/Fields/field_bool_check.tscn | 8 + .../Editor/Events/Fields/field_color.gd | 30 + .../Editor/Events/Fields/field_color.tscn | 12 + .../Editor/Events/Fields/field_condition.gd | 267 ++++ .../Editor/Events/Fields/field_condition.tscn | 101 ++ .../Editor/Events/Fields/field_dictionary.gd | 60 + .../Events/Fields/field_dictionary.tscn | 28 + .../Editor/Events/Fields/field_file.gd | 139 ++ .../Editor/Events/Fields/field_file.tscn | 87 ++ .../Editor/Events/Fields/field_flex_value.gd | 154 ++ .../Events/Fields/field_flex_value.tscn | 15 + .../Editor/Events/Fields/field_number.gd | 199 +++ .../Editor/Events/Fields/field_number.tscn | 160 +++ .../Events/Fields/field_options_dynamic.gd | 289 ++++ .../Events/Fields/field_options_dynamic.tscn | 135 ++ .../Events/Fields/field_options_fixed.gd | 62 + .../Events/Fields/field_options_fixed.tscn | 13 + .../Events/Fields/field_text_multiline.gd | 74 + .../Events/Fields/field_text_multiline.tscn | 28 + .../Events/Fields/field_text_singleline.gd | 40 + .../Events/Fields/field_text_singleline.tscn | 10 + .../Editor/Events/Fields/field_vector2.gd | 26 + .../Editor/Events/Fields/field_vector2.tscn | 29 + .../Editor/Events/Fields/field_vector3.gd | 28 + .../Editor/Events/Fields/field_vector3.tscn | 16 + .../Editor/Events/Fields/field_vector4.gd | 30 + .../Editor/Events/Fields/field_vector4.tscn | 16 + .../Editor/Events/Fields/field_vector_base.gd | 38 + .../dialogic/Editor/Events/event_field.gd | 35 + .../Events/styles/InputFieldsStyle.tres | 50 + .../Events/styles/ResourceMenuHover.tres | 11 + .../Events/styles/ResourceMenuNormal.tres | 13 + .../styles/ResourceMenuPanelBackground.tres | 17 + .../Editor/Events/styles/SectionPanel.tres | 17 + .../Events/styles/SimpleButtonHover.tres | 17 + .../Events/styles/SimpleButtonNormal.tres | 17 + .../Editor/Events/styles/TextBackground.tres | 12 + .../Events/styles/selected_styleboxflat.tres | 16 + .../Events/styles/unselected_stylebox.tres | 7 + .../dialogic/Editor/HomePage/home_page.gd | 86 ++ .../dialogic/Editor/HomePage/home_page.tscn | 373 +++++ .../dialogic/Editor/HomePage/icon_bg.png | Bin 0 -> 150354 bytes .../Editor/HomePage/icon_bg.png.import | 34 + .../addons/dialogic/Editor/HomePage/tips.txt | 11 + .../Editor/Images/Dropdown/default.svg | 3 + .../Editor/Images/Dropdown/default.svg.import | 38 + .../Editor/Images/Dropdown/divide.svg | 10 + .../Editor/Images/Dropdown/divide.svg.import | 38 + .../dialogic/Editor/Images/Dropdown/join.svg | 3 + .../Editor/Images/Dropdown/join.svg.import | 38 + .../dialogic/Editor/Images/Dropdown/leave.svg | 3 + .../Editor/Images/Dropdown/leave.svg.import | 38 + .../dialogic/Editor/Images/Dropdown/minus.svg | 10 + .../Editor/Images/Dropdown/minus.svg.import | 38 + .../Editor/Images/Dropdown/multiply.svg | 10 + .../Images/Dropdown/multiply.svg.import | 38 + .../dialogic/Editor/Images/Dropdown/plus.svg | 10 + .../Editor/Images/Dropdown/plus.svg.import | 38 + .../dialogic/Editor/Images/Dropdown/set.svg | 10 + .../Editor/Images/Dropdown/set.svg.import | 38 + .../Editor/Images/Dropdown/update.svg | 5 + .../Editor/Images/Dropdown/update.svg.import | 38 + .../Images/Interactable/decrement_icon.svg | 1 + .../Interactable/decrement_icon.svg.import | 38 + .../Images/Interactable/increment_icon.svg | 1 + .../Interactable/increment_icon.svg.import | 38 + .../Editor/Images/Pieces/add-folder.svg | 4 + .../Images/Pieces/add-folder.svg.import | 38 + .../Editor/Images/Pieces/close-icon.svg | 1 + .../Images/Pieces/close-icon.svg.import | 38 + .../Editor/Images/Pieces/closed-icon.svg | 3 + .../Images/Pieces/closed-icon.svg.import | 38 + .../Editor/Images/Pieces/expand-icon.svg | 5 + .../Images/Pieces/expand-icon.svg.import | 38 + .../Editor/Images/Pieces/open-icon.svg | 3 + .../Editor/Images/Pieces/open-icon.svg.import | 38 + .../Editor/Images/Pieces/variable.svg | 3 + .../Editor/Images/Pieces/variable.svg.import | 38 + .../Editor/Images/Pieces/variable_icon.png | Bin 0 -> 639 bytes .../Images/Pieces/variable_icon.png.import | 34 + .../dialogic/Editor/Images/Pieces/warning.svg | 3 + .../Editor/Images/Pieces/warning.svg.import | 38 + .../Editor/Images/Resources/character.svg | 4 + .../Images/Resources/character.svg.import | 38 + .../Images/Resources/icon_character.png | Bin 0 -> 569 bytes .../Resources/icon_character.png.import | 34 + .../Editor/Images/Resources/portrait.svg | 9 + .../Images/Resources/portrait.svg.import | 38 + .../Editor/Images/Toolbar/add-character.svg | 4 + .../Images/Toolbar/add-character.svg.import | 38 + .../Editor/Images/Toolbar/add-timeline.svg | 7 + .../Images/Toolbar/add-timeline.svg.import | 38 + .../addons/dialogic/Editor/Images/Unknown.png | Bin 0 -> 3331 bytes .../dialogic/Editor/Images/Unknown.png.import | 34 + .../dialogic/Editor/Images/dialogic-logo.svg | 18 + .../Editor/Images/dialogic-logo.svg.import | 37 + .../dialogic/Editor/Images/plugin-icon.svg | 3 + .../Editor/Images/plugin-icon.svg.import | 38 + .../Editor/Images/preview_character.png | Bin 0 -> 63720 bytes .../Images/preview_character.png.import | 34 + .../Images/preview_character_speaker.png | Bin 0 -> 40709 bytes .../preview_character_speaker.png.import | 34 + .../Editor/Inspector/inspector_plugin.gd | 15 + .../Inspector/timeline_inspector_field.gd | 82 ++ .../Editor/Settings/HintLabelStylingScript.gd | 13 + .../dialogic/Editor/Settings/csv_file.gd | 356 +++++ .../Editor/Settings/settings_editor.gd | 169 +++ .../Editor/Settings/settings_editor.tscn | 59 + .../Editor/Settings/settings_general.gd | 247 ++++ .../Editor/Settings/settings_general.tscn | 283 ++++ .../Editor/Settings/settings_modules.gd | 443 ++++++ .../Editor/Settings/settings_modules.tscn | 236 +++ .../dialogic/Editor/Settings/settings_page.gd | 35 + .../Editor/Settings/settings_translation.gd | 660 +++++++++ .../Editor/Settings/settings_translation.tscn | 368 +++++ .../dialogic/Editor/Theme/MainTheme.tres | 3 + .../dialogic/Editor/Theme/PickerTheme.tres | 7 + .../TextEditor/CodeCompletionHelper.gd | 324 +++++ .../TextEditor/syntax_highlighter.gd | 201 +++ .../TextEditor/timeline_editor_text.gd | 306 ++++ .../TextEditor/timeline_editor_text.tscn | 32 + .../VisualEditor/AddEventButton.gd | 63 + .../VisualEditor/AddEventButton.tscn | 46 + .../VisualEditor/TimelineArea.gd | 199 +++ .../VisualEditor/timeline_editor_visual.gd | 1279 +++++++++++++++++ .../VisualEditor/timeline_editor_visual.tscn | 111 ++ .../TimelineEditor/test_timeline_scene.gd | 44 + .../TimelineEditor/test_timeline_scene.tscn | 25 + .../Editor/TimelineEditor/timeline_editor.gd | 238 +++ .../TimelineEditor/timeline_editor.tscn | 163 +++ .../addons/dialogic/Editor/dialogic_editor.gd | 66 + .../addons/dialogic/Editor/editor_main.gd | 336 +++++ .../addons/dialogic/Editor/editor_main.tscn | 161 +++ .../addons/dialogic/Editor/editors_manager.gd | 284 ++++ .../Example Assets/Fonts/Roboto-Bold.ttf | Bin 0 -> 170348 bytes .../Fonts/Roboto-Bold.ttf.import | 34 + .../Example Assets/Fonts/Roboto-Italic.ttf | Bin 0 -> 173516 bytes .../Fonts/Roboto-Italic.ttf.import | 34 + .../Example Assets/Fonts/Roboto-Regular.ttf | Bin 0 -> 171272 bytes .../Fonts/Roboto-Regular.ttf.import | 34 + .../Example Assets/already_read_indicator.gd | 12 + .../Example Assets/backgrounds/BubbleEnd.png | Bin 0 -> 1619 bytes .../backgrounds/BubbleEnd.png.import | 34 + .../backgrounds/new-default-dialog.png.import | 34 + .../Example Assets/backgrounds/rpg_box.webp | Bin 0 -> 1812 bytes .../backgrounds/rpg_box.webp.import | 34 + .../dialogic/Example Assets/default_event.gd | 51 + .../next-indicator-dialogic-1.png | Bin 0 -> 2825 bytes .../next-indicator-dialogic-1.png.import | 34 + .../next-indicator/next-indicator.png | Bin 0 -> 4189 bytes .../next-indicator/next-indicator.png.import | 34 + .../portraits/Antonio/pl5 blink.png | Bin 0 -> 64904 bytes .../portraits/Antonio/pl5 blink.png.import | 34 + .../portraits/Antonio/pl5 doubt.png | Bin 0 -> 65461 bytes .../portraits/Antonio/pl5 doubt.png.import | 34 + .../portraits/Antonio/pl5 hate.png | Bin 0 -> 67008 bytes .../portraits/Antonio/pl5 hate.png.import | 34 + .../portraits/Antonio/pl5 plot.png | Bin 0 -> 65154 bytes .../portraits/Antonio/pl5 plot.png.import | 34 + .../portraits/Antonio/pl5 sad.png | Bin 0 -> 66584 bytes .../portraits/Antonio/pl5 sad.png.import | 34 + .../portraits/Antonio/pl5 scoff.png | Bin 0 -> 66038 bytes .../portraits/Antonio/pl5 scoff.png.import | 34 + .../portraits/Antonio/pl5 shy.png | Bin 0 -> 67080 bytes .../portraits/Antonio/pl5 shy.png.import | 34 + .../portraits/Antonio/pl5 surprise.png | Bin 0 -> 66519 bytes .../portraits/Antonio/pl5 surprise.png.import | 34 + .../Example Assets/portraits/Antonio/pl5.png | Bin 0 -> 65862 bytes .../portraits/Antonio/pl5.png.import | 34 + .../CustomPortrait_AnimatedSprite.gd | 18 + .../CustomPortrait_AnimatedSprite.tscn | 56 + .../portraits/CustomPortrait_FaceAtlas.gd | 70 + .../portraits/CustomPortrait_FaceAtlas.tscn | 67 + .../portraits/Jane/pl3 avoid.png | Bin 0 -> 83484 bytes .../portraits/Jane/pl3 avoid.png.import | 34 + .../portraits/Jane/pl3 blink.png | Bin 0 -> 83051 bytes .../portraits/Jane/pl3 blink.png.import | 34 + .../portraits/Jane/pl3 concept.png | Bin 0 -> 84581 bytes .../portraits/Jane/pl3 concept.png.import | 34 + .../portraits/Jane/pl3 confusion.png | Bin 0 -> 83708 bytes .../portraits/Jane/pl3 confusion.png.import | 34 + .../portraits/Jane/pl3 doubt.png | Bin 0 -> 83418 bytes .../portraits/Jane/pl3 doubt.png.import | 34 + .../portraits/Jane/pl3 happy.png | Bin 0 -> 83641 bytes .../portraits/Jane/pl3 happy.png.import | 34 + .../portraits/Jane/pl3 plot.png | Bin 0 -> 83605 bytes .../portraits/Jane/pl3 plot.png.import | 34 + .../Example Assets/portraits/Jane/pl3 sad.png | Bin 0 -> 84668 bytes .../portraits/Jane/pl3 sad.png.import | 34 + .../Example Assets/portraits/Jane/pl3 shy.png | Bin 0 -> 84186 bytes .../portraits/Jane/pl3 shy.png.import | 34 + .../portraits/Jane/pl3 surprise.png | Bin 0 -> 83571 bytes .../portraits/Jane/pl3 surprise.png.import | 34 + .../Example Assets/portraits/Portrait1.png | Bin 0 -> 33867 bytes .../portraits/Portrait1.png.import | 34 + .../Example Assets/portraits/Portrait2.png | Bin 0 -> 37957 bytes .../portraits/Portrait2.png.import | 34 + .../portraits/Princess/anger.png | Bin 0 -> 20766 bytes .../portraits/Princess/anger.png.import | 34 + .../portraits/Princess/frown.png | Bin 0 -> 18664 bytes .../portraits/Princess/frown.png.import | 34 + .../Example Assets/portraits/Princess/joy.png | Bin 0 -> 14174 bytes .../portraits/Princess/joy.png.import | 34 + .../portraits/Princess/neutral.png | Bin 0 -> 19825 bytes .../portraits/Princess/neutral.png.import | 34 + .../portraits/Princess/princess_blank.png | Bin 0 -> 744931 bytes .../Princess/princess_blank.png.import | 34 + .../portraits/Princess/shock.png | Bin 0 -> 21616 bytes .../portraits/Princess/shock.png.import | 34 + .../portraits/Princess/smile.png | Bin 0 -> 19829 bytes .../portraits/Princess/smile.png.import | 34 + .../portraits/rpg_portraits/base1.png | Bin 0 -> 1329 bytes .../portraits/rpg_portraits/base1.png.import | 34 + .../portraits/rpg_portraits/base2.png | Bin 0 -> 1312 bytes .../portraits/rpg_portraits/base2.png.import | 34 + .../portraits/rpg_portraits/base3.png | Bin 0 -> 1127 bytes .../portraits/rpg_portraits/base3.png.import | 34 + .../portraits/rpg_portraits/base4.png | Bin 0 -> 1358 bytes .../portraits/rpg_portraits/base4.png.import | 34 + .../Example Assets/sound-effects/LICENSE.txt | 4 + .../Example Assets/sound-effects/typing1.wav | Bin 0 -> 25516 bytes .../sound-effects/typing1.wav.import | 24 + .../Example Assets/sound-effects/typing2.wav | Bin 0 -> 21932 bytes .../sound-effects/typing2.wav.import | 24 + .../Example Assets/sound-effects/typing3.wav | Bin 0 -> 21356 bytes .../sound-effects/typing3.wav.import | 24 + .../Example Assets/sound-effects/typing4.wav | Bin 0 -> 23404 bytes .../sound-effects/typing4.wav.import | 24 + .../Example Assets/sound-effects/typing5.wav | Bin 0 -> 24876 bytes .../sound-effects/typing5.wav.import | 24 + .../dialogic/Modules/Audio/event_music.gd | 86 ++ .../dialogic/Modules/Audio/event_sound.gd | 81 ++ .../dialogic/Modules/Audio/icon_music.png | Bin 0 -> 552 bytes .../Modules/Audio/icon_music.png.import | 34 + .../dialogic/Modules/Audio/icon_sound.png | Bin 0 -> 524 bytes .../Modules/Audio/icon_sound.png.import | 34 + .../addons/dialogic/Modules/Audio/index.gd | 10 + .../dialogic/Modules/Audio/subsystem_audio.gd | 197 +++ .../default_background.gd | 27 + .../default_background.tscn | 29 + .../Transitions/Defaults/push_down.gd | 7 + .../Transitions/Defaults/push_left.gd | 7 + .../Transitions/Defaults/push_right.gd | 7 + .../Transitions/Defaults/push_up.gd | 7 + .../Transitions/Defaults/simple_fade.gd | 13 + .../Transitions/Defaults/simple_fade.tres | 8 + .../Defaults/swipe_diagonal_up_left.gd | 8 + .../Defaults/swipe_left_to_right.gd | 10 + .../Defaults/swipe_right_to_left.gd | 8 + .../class_dialogic_background_transition.gd | 56 + .../default_transition_shader.gdshader | 36 + .../push_transition_shader.gdshader | 17 + .../Transitions/simple_push_transitions.gd | 9 + .../Transitions/simple_swipe_gradient.tres | 7 + .../Transitions/simple_swipe_transitions.gd | 14 + .../Modules/Background/dialogic_background.gd | 38 + .../Modules/Background/event_background.gd | 156 ++ .../dialogic/Modules/Background/icon.png | Bin 0 -> 512 bytes .../Modules/Background/icon.png.import | 34 + .../dialogic/Modules/Background/index.gd | 13 + .../Background/node_background_holder.gd | 6 + .../Background/subsystem_backgrounds.gd | 186 +++ .../dialogic/Modules/Call/event_call.gd | 263 ++++ .../addons/dialogic/Modules/Call/icon.png | Bin 0 -> 554 bytes .../dialogic/Modules/Call/icon.png.import | 34 + .../addons/dialogic/Modules/Call/index.gd | 6 + .../Character/DefaultAnimations/bounce.gd | 16 + .../DefaultAnimations/bounce_in_out.gd | 39 + .../DefaultAnimations/fade_down_in_out.gd | 44 + .../DefaultAnimations/fade_in_out.gd | 34 + .../DefaultAnimations/fade_up_in_out.gd | 44 + .../Character/DefaultAnimations/heartbeat.gd | 13 + .../DefaultAnimations/instant_in_out.gd | 12 + .../Character/DefaultAnimations/shake_x.gd | 20 + .../Character/DefaultAnimations/shake_y.gd | 23 + .../DefaultAnimations/slide_down_in_out.gd | 26 + .../DefaultAnimations/slide_left_in_out.gd | 26 + .../DefaultAnimations/slide_right_in_out.gd | 27 + .../DefaultAnimations/slide_up_in.gd | 25 + .../Character/DefaultAnimations/tada.gd | 25 + .../DefaultAnimations/zoom_center_in_out.gd | 36 + .../DefaultAnimations/zoom_in_out.gd | 35 + .../DialogicPortraitAnimationsUtil.gd | 47 + .../Character/class_dialogic_animation.gd | 77 + .../Character/custom_portrait_thumbnail.png | Bin 0 -> 2888 bytes .../custom_portrait_thumbnail.png.import | 34 + .../Modules/Character/default_portrait.gd | 16 + .../Modules/Character/default_portrait.tscn | 9 + .../Character/default_portrait_thumbnail.png | Bin 0 -> 5647 bytes .../default_portrait_thumbnail.png.import | 34 + .../Modules/Character/dialogic_portrait.gd | 121 ++ .../Modules/Character/event_character.gd | 575 ++++++++ .../Modules/Character/icon.png.import | 34 + .../dialogic/Modules/Character/icon.svg | 4 + .../Modules/Character/icon.svg.import | 38 + .../Modules/Character/icon_position.png | Bin 0 -> 1017 bytes .../Character/icon_position.png.import | 34 + .../dialogic/Modules/Character/index.gd | 55 + .../Character/node_portrait_container.gd | 259 ++++ .../Modules/Character/portrait_position.svg | 8 + .../Character/portrait_position.svg.import | 38 + .../Modules/Character/preview_character.tres | 32 + .../Modules/Character/settings_portraits.gd | 95 ++ .../Modules/Character/settings_portraits.tscn | 160 +++ .../simple_image_portrait_thumbnail.png | Bin 0 -> 3462 bytes ...simple_image_portrait_thumbnail.png.import | 34 + .../Modules/Character/subsystem_containers.gd | 284 ++++ .../Modules/Character/subsystem_portraits.gd | 701 +++++++++ .../Modules/Character/update_mirror.svg | 18 + .../Character/update_mirror.svg.import | 38 + .../Modules/Character/update_portrait.svg | 9 + .../Character/update_portrait.svg.import | 38 + .../Modules/Character/update_position.svg | 18 + ...ate_position.svg.2023_09_23_08_37_47.0.svg | 18 + ...ition.svg.2023_09_23_08_37_47.0.svg.import | 38 + .../Character/update_position.svg.import | 38 + .../Modules/Character/update_z_index.svg | 14 + .../Character/update_z_index.svg.import | 38 + .../dialogic/Modules/Choice/event_choice.gd | 232 +++ .../addons/dialogic/Modules/Choice/icon.svg | 10 + .../dialogic/Modules/Choice/icon.svg.import | 38 + .../addons/dialogic/Modules/Choice/index.gd | 14 + .../Modules/Choice/node_button_sound.gd | 52 + .../Modules/Choice/node_choice_button.gd | 46 + .../Modules/Choice/settings_choices.gd | 67 + .../Modules/Choice/settings_choices.tscn | 176 +++ .../Modules/Choice/subsystem_choices.gd | 269 ++++ .../dialogic/Modules/Choice/ui_choice_end.gd | 28 + .../Modules/Choice/ui_choice_end.tscn | 20 + .../Modules/Clear/clear_background.svg | 2 + .../Modules/Clear/clear_background.svg.import | 38 + .../Modules/Clear/clear_characters.svg | 16 + .../Modules/Clear/clear_characters.svg.import | 38 + .../dialogic/Modules/Clear/clear_music.svg | 2 + .../Modules/Clear/clear_music.svg.import | 38 + .../Modules/Clear/clear_positions.svg | 2 + .../Modules/Clear/clear_positions.svg.import | 38 + .../dialogic/Modules/Clear/clear_style.svg | 2 + .../Modules/Clear/clear_style.svg.import | 38 + .../dialogic/Modules/Clear/clear_textbox.svg | 2 + .../Modules/Clear/clear_textbox.svg.import | 38 + .../dialogic/Modules/Clear/event_clear.gd | 112 ++ .../addons/dialogic/Modules/Clear/icon.png | Bin 0 -> 558 bytes .../dialogic/Modules/Clear/icon.png.import | 34 + .../addons/dialogic/Modules/Clear/index.gd | 6 + .../dialogic/Modules/Comment/event_comment.gd | 65 + .../addons/dialogic/Modules/Comment/icon.png | Bin 0 -> 398 bytes .../dialogic/Modules/Comment/icon.png.import | 34 + .../addons/dialogic/Modules/Comment/index.gd | 6 + .../Modules/Condition/event_condition.gd | 148 ++ .../dialogic/Modules/Condition/icon.svg | 12 + .../Modules/Condition/icon.svg.import | 38 + .../dialogic/Modules/Condition/index.gd | 6 + .../Modules/Condition/ui_condition_end.gd | 51 + .../Modules/Condition/ui_condition_end.tscn | 26 + .../dialogic/Modules/Core/event_end_branch.gd | 82 ++ .../addons/dialogic/Modules/Core/icon.png | Bin 0 -> 558 bytes .../dialogic/Modules/Core/icon.png.import | 34 + .../addons/dialogic/Modules/Core/index.gd | 27 + .../Modules/Core/subsystem_animation.gd | 42 + .../Modules/Core/subsystem_expression.gd | 95 ++ .../dialogic/Modules/Core/subsystem_input.gd | 211 +++ .../Base_Default/default_layout_base.gd | 21 + .../Base_Default/default_layout_base.tscn | 6 + .../Base_Default/part_config.cfg | 6 + .../Base_TextBubble/part_config.cfg | 6 + .../Base_TextBubble/text_bubble_base.gd | 94 ++ .../Base_TextBubble/text_bubble_base.tscn | 55 + .../background_layer_icon.svg | 7 + .../background_layer_icon.svg.import | 38 + .../full_background_layer.gd | 2 + .../full_background_layer.tscn | 25 + .../Layer_FullBackground/part_config.cfg | 7 + .../Layer_FullBackground/preview.png | Bin 0 -> 924 bytes .../Layer_FullBackground/preview.png.import | 34 + .../Layer_Glossary/glossary_popup_layer.gd | 177 +++ .../Layer_Glossary/glossary_popup_layer.tscn | 87 ++ .../Layer_Glossary/part_config.cfg | 7 + .../popup_glossary_layer_icon.svg | 20 + .../popup_glossary_layer_icon.svg.import | 38 + .../Layer_Glossary/preview.png | Bin 0 -> 12796 bytes .../Layer_Glossary/preview.png.import | 34 + .../Layer_History/example_history_item.gd | 30 + .../Layer_History/example_history_item.tscn | 46 + .../Layer_History/history_icon.svg | 23 + .../Layer_History/history_icon.svg.import | 38 + .../Layer_History/history_layer.gd | 151 ++ .../Layer_History/history_layer.tscn | 93 ++ .../Layer_History/part_config.cfg | 7 + .../Layer_History/preview.png | Bin 0 -> 11740 bytes .../Layer_History/preview.png.import | 34 + .../Layer_Input/full_advance_input_layer.gd | 4 + .../Layer_Input/full_advance_input_layer.tscn | 24 + .../Layer_Input/input_layer_icon.svg | 14 + .../Layer_Input/input_layer_icon.svg.import | 38 + .../Layer_Input/part_config.cfg | 7 + .../Layer_Input/preview.png | Bin 0 -> 2258 bytes .../Layer_Input/preview.png.import | 34 + .../default_stylebox.tres | 13 + .../part_config.cfg | 7 + .../Layer_SpeakerPortraitTextbox/preview.png | Bin 0 -> 7997 bytes .../preview.png.import | 34 + .../speaker-textbox-icon.svg | 19 + .../speaker-textbox-icon.svg.import | 38 + .../speaker_portrait_textbox_layer.gd | 129 ++ .../textbox_with_speaker_portrait.tscn | 124 ++ .../Layer_TextInput/part_config.cfg | 7 + .../Layer_TextInput/preview.png | Bin 0 -> 4097 bytes .../Layer_TextInput/preview.png.import | 34 + .../Layer_TextInput/text_input_layer.gd | 14 + .../Layer_TextInput/text_input_layer.tscn | 76 + .../Layer_TextInput/text_input_layer_icon.svg | 23 + .../text_input_layer_icon.svg.import | 38 + .../Layer_Textbubble/part_config.cfg | 7 + .../Layer_Textbubble/preview.png | Bin 0 -> 7302 bytes .../Layer_Textbubble/preview.png.import | 34 + .../Layer_Textbubble/speech_bubble.gdshader | 17 + .../Layer_Textbubble/text_bubble.gd | 202 +++ .../Layer_Textbubble/text_bubble.gdshader | 17 + .../Layer_Textbubble/text_bubble.tscn | 111 ++ .../Layer_Textbubble/text_bubble_layer.gd | 185 +++ .../Layer_Textbubble/text_bubble_layer.tscn | 9 + .../text_bubble_layer_icon.svg | 14 + .../text_bubble_layer_icon.svg.import | 38 + .../Layer_VN_Choices/choice_panel_focus.tres | 15 + .../Layer_VN_Choices/choice_panel_hover.tres | 18 + .../Layer_VN_Choices/choice_panel_normal.tres | 12 + .../Layer_VN_Choices/choices_layer_icon.svg | 11 + .../choices_layer_icon.svg.import | 38 + .../Layer_VN_Choices/part_config.cfg | 7 + .../Layer_VN_Choices/preview.png | Bin 0 -> 8238 bytes .../Layer_VN_Choices/preview.png.import | 34 + .../Layer_VN_Choices/vn_choice_layer.gd | 122 ++ .../Layer_VN_Choices/vn_choice_layer.tscn | 98 ++ .../Layer_VN_Portraits/part_config.cfg | 7 + .../portrait_layer_icon.svg | 22 + .../portrait_layer_icon.svg.import | 38 + .../Layer_VN_Portraits/preview.png | Bin 0 -> 49117 bytes .../Layer_VN_Portraits/preview.png.import | 34 + .../Layer_VN_Portraits/vn_portrait_layer.gd | 15 + .../Layer_VN_Portraits/vn_portrait_layer.tscn | 84 ++ .../Layer_VN_Textbox/animations.gd | 93 ++ .../Layer_VN_Textbox/autoadvance_indicator.gd | 13 + .../Layer_VN_Textbox/next.svg | 12 + .../Layer_VN_Textbox/next.svg.import | 37 + .../Layer_VN_Textbox/part_config.cfg | 7 + .../Layer_VN_Textbox/preview.png | Bin 0 -> 3353 bytes .../Layer_VN_Textbox/preview.png.import | 34 + .../Layer_VN_Textbox/textbox_layer_icon.svg | 13 + .../textbox_layer_icon.svg.import | 38 + .../vn_textbox_default_panel.tres | 12 + .../Layer_VN_Textbox/vn_textbox_layer.gd | 278 ++++ .../Layer_VN_Textbox/vn_textbox_layer.tscn | 345 +++++ .../vn_textbox_name_label_panel.tres | 12 + .../Style_SpeakerTextbox/part_config.cfg | 6 + .../Style_SpeakerTextbox/preview.png | Bin 0 -> 1094641 bytes .../Style_SpeakerTextbox/preview.png.import | 34 + .../speaker_textbox_style.tres | 54 + .../Style_TextBubbles/part_config.cfg | 6 + .../Style_TextBubbles/preview.png | Bin 0 -> 19024 bytes .../Style_TextBubbles/preview.png.import | 34 + .../Style_TextBubbles/textbubble_style.tres | 24 + .../Style_VN_Default/default_vn_style.tres | 58 + .../Style_VN_Default/part_config.cfg | 6 + .../Style_VN_Default/preview.png | Bin 0 -> 1150972 bytes .../Style_VN_Default/preview.png.import | 34 + .../Modules/DefaultLayoutParts/index.gd | 5 + .../addons/dialogic/Modules/End/event_end.gd | 44 + .../addons/dialogic/Modules/End/icon.png | Bin 0 -> 558 bytes .../dialogic/Modules/End/icon.png.import | 34 + .../addons/dialogic/Modules/End/index.gd | 6 + .../Modules/Glossary/add-glossary.svg | 4 + .../Modules/Glossary/add-glossary.svg.import | 38 + .../Modules/Glossary/event_glossary.gd | 42 + .../Modules/Glossary/glossary_editor.gd | 461 ++++++ .../Modules/Glossary/glossary_editor.tscn | 319 ++++ .../Modules/Glossary/glossary_resource.gd | 340 +++++ .../dialogic/Modules/Glossary/icon.png.import | 34 + .../addons/dialogic/Modules/Glossary/icon.svg | 3 + .../dialogic/Modules/Glossary/icon.svg.import | 38 + .../addons/dialogic/Modules/Glossary/index.gd | 14 + .../Modules/Glossary/subsystem_glossary.gd | 174 +++ .../highlight_portrait_thumbnail.png | Bin 0 -> 5955 bytes .../highlight_portrait_thumbnail.png.import | 34 + .../Modules/HighlightPortrait/index.gd | 17 + .../simple_highlight_portrait.gd | 30 + .../simple_highlight_portrait.tscn | 9 + .../dialogic/Modules/History/definition.svg | 3 + .../Modules/History/definition.svg.import | 38 + .../dialogic/Modules/History/event_history.gd | 76 + .../addons/dialogic/Modules/History/icon.svg | 11 + .../dialogic/Modules/History/icon.svg.import | 38 + .../addons/dialogic/Modules/History/index.gd | 13 + .../Modules/History/settings_history.gd | 29 + .../Modules/History/settings_history.tscn | 176 +++ .../Modules/History/subsystem_history.gd | 305 ++++ .../dialogic/Modules/Jump/event_jump.gd | 157 ++ .../dialogic/Modules/Jump/event_label.gd | 114 ++ .../dialogic/Modules/Jump/event_return.gd | 73 + .../dialogic/Modules/Jump/icon.png.import | 34 + .../dialogic/Modules/Jump/icon_jump.png | Bin 0 -> 730 bytes .../Modules/Jump/icon_jump.png.import | 34 + .../dialogic/Modules/Jump/icon_label.png | Bin 0 -> 466 bytes .../Modules/Jump/icon_label.png.import | 34 + .../dialogic/Modules/Jump/icon_return.svg | 8 + .../Modules/Jump/icon_return.svg.import | 38 + .../addons/dialogic/Modules/Jump/index.gd | 9 + .../dialogic/Modules/Jump/subsystem_jump.gd | 90 ++ .../custom_layered_portrait.gd | 3 + .../dialogic/Modules/LayeredPortrait/index.gd | 17 + .../LayeredPortrait/layered_portrait.gd | 252 ++++ .../LayeredPortrait/layered_portrait.tscn | 14 + .../layered_portrait_thumbnail.png | Bin 0 -> 7448 bytes .../layered_portrait_thumbnail.png.import | 34 + .../dialogic/Modules/Save/event_save.gd | 65 + .../addons/dialogic/Modules/Save/icon.svg | 8 + .../dialogic/Modules/Save/icon.svg.import | 38 + .../addons/dialogic/Modules/Save/index.gd | 14 + .../dialogic/Modules/Save/settings_save.gd | 57 + .../dialogic/Modules/Save/settings_save.tscn | 143 ++ .../dialogic/Modules/Save/subsystem_save.gd | 519 +++++++ .../Modules/Settings/event_setting.gd | 243 ++++ .../addons/dialogic/Modules/Settings/icon.svg | 18 + .../dialogic/Modules/Settings/icon.svg.import | 38 + .../addons/dialogic/Modules/Settings/index.gd | 10 + .../Modules/Settings/subsystem_settings.gd | 98 ++ .../dialogic/Modules/Signal/event_signal.gd | 83 ++ .../addons/dialogic/Modules/Signal/icon.png | Bin 0 -> 700 bytes .../dialogic/Modules/Signal/icon.png.import | 34 + .../addons/dialogic/Modules/Signal/index.gd | 7 + .../Modules/Style/character_settings_style.gd | 34 + .../Style/character_settings_style.tscn | 22 + .../dialogic/Modules/Style/event_style.gd | 71 + .../addons/dialogic/Modules/Style/icon.png | Bin 0 -> 553 bytes .../dialogic/Modules/Style/icon.png.import | 34 + .../addons/dialogic/Modules/Style/index.gd | 14 + .../dialogic/Modules/Style/node_style.gd | 13 + .../Modules/Style/subsystem_styles.gd | 172 +++ .../StyleEditor/Components/style_browser.gd | 113 ++ .../StyleEditor/Components/style_browser.tscn | 243 ++++ .../Components/style_browser_window.gd | 22 + .../Components/style_layer_tree.gd | 53 + .../dialogic/Modules/StyleEditor/index.gd | 4 + .../Modules/StyleEditor/style_editor.gd | 395 +++++ .../Modules/StyleEditor/style_editor.tscn | 446 ++++++ .../Modules/StyleEditor/style_layer_editor.gd | 547 +++++++ .../Modules/StyleEditor/styles_icon.svg | 1 + .../StyleEditor/styles_icon.svg.import | 38 + .../Text/DNextIndicator_icon.svg.import | 39 + .../dialogic/Modules/Text/auto_advance.gd | 232 +++ .../addons/dialogic/Modules/Text/auto_skip.gd | 70 + .../character_moods_settings.gd | 230 +++ .../character_moods_settings.tscn | 235 +++ .../character_portrait_mood_settings.gd | 37 + .../character_portrait_mood_settings.tscn | 25 + .../dialogic/Modules/Text/event_text.gd | 495 +++++++ .../addons/dialogic/Modules/Text/icon.svg | 3 + .../dialogic/Modules/Text/icon.svg.import | 38 + .../addons/dialogic/Modules/Text/index.gd | 38 + .../dialogic/Modules/Text/manual_advance.gd | 60 + .../dialogic/Modules/Text/node_dialog_text.gd | 158 ++ .../Modules/Text/node_dialog_text_icon.svg | 9 + .../Text/node_dialog_text_icon.svg.import | 37 + .../dialogic/Modules/Text/node_input.gd | 21 + .../dialogic/Modules/Text/node_name_label.gd | 25 + .../Modules/Text/node_name_label_icon.svg | 3 + .../Text/node_name_label_icon.svg.import | 37 + .../Modules/Text/node_next_indicator.gd | 89 ++ .../Modules/Text/node_next_indicator_icon.svg | 3 + .../Text/node_next_indicator_icon.svg.import | 38 + .../dialogic/Modules/Text/node_type_sound.gd | 135 ++ .../dialogic/Modules/Text/settings_text.gd | 240 ++++ .../dialogic/Modules/Text/settings_text.tscn | 468 ++++++ .../dialogic/Modules/Text/subsystem_text.gd | 586 ++++++++ .../Modules/TextInput/event_text_input.gd | 98 ++ .../dialogic/Modules/TextInput/icon.png | Bin 0 -> 437 bytes .../Modules/TextInput/icon.png.import | 34 + .../dialogic/Modules/TextInput/index.gd | 11 + .../Modules/TextInput/node_text_input.gd | 58 + .../Modules/TextInput/subsystem_text_input.gd | 36 + .../Modules/Variable/add-variable.svg | 4 + .../Modules/Variable/add-variable.svg.import | 38 + .../Modules/Variable/event_variable.gd | 363 +++++ .../addons/dialogic/Modules/Variable/icon.png | Bin 0 -> 639 bytes .../dialogic/Modules/Variable/icon.png.import | 34 + .../addons/dialogic/Modules/Variable/index.gd | 12 + .../Modules/Variable/subsystem_variables.gd | 278 ++++ .../dialogic/Modules/Variable/variable.svg | 3 + .../Modules/Variable/variable.svg.import | 38 + .../variables_editor/variable_tree.gd | 352 +++++ .../variables_editor/variables_editor.gd | 58 + .../variables_editor/variables_editor.tscn | 198 +++ .../dialogic/Modules/Voice/event_voice.gd | 77 + .../addons/dialogic/Modules/Voice/icon.png | Bin 0 -> 1808 bytes .../dialogic/Modules/Voice/icon.png.import | 34 + .../addons/dialogic/Modules/Voice/index.gd | 10 + .../dialogic/Modules/Voice/subsystem_voice.gd | 137 ++ .../dialogic/Modules/Wait/event_wait.gd | 76 + .../addons/dialogic/Modules/Wait/icon.svg | 3 + .../dialogic/Modules/Wait/icon.svg.import | 38 + .../addons/dialogic/Modules/Wait/index.gd | 6 + .../Modules/WaitInput/event_wait_input.gd | 48 + .../dialogic/Modules/WaitInput/icon.svg | 13 + .../Modules/WaitInput/icon.svg.import | 38 + .../dialogic/Modules/WaitInput/index.gd | 6 + .../Resources/CharacterResourceLoader.gd | 55 + .../Resources/CharacterResourceSaver.gd | 34 + .../Resources/TimelineResourceLoader.gd | 37 + .../Resources/TimelineResourceSaver.gd | 61 + .../addons/dialogic/Resources/character.gd | 142 ++ .../Resources/dialogic_layout_base.gd | 78 + .../Resources/dialogic_layout_layer.gd | 44 + .../dialogic/Resources/dialogic_style.gd | 193 +++ .../Resources/dialogic_style_layer.gd | 15 + .../addons/dialogic/Resources/event.gd | 549 +++++++ .../addons/dialogic/Resources/timeline.gd | 166 +++ .../dialogic-main/addons/dialogic/plugin.cfg | 8 + .../dialogic-main/addons/dialogic/plugin.gd | 156 ++ project.godot | 5 + world.tscn | 1 + 687 files changed, 46069 insertions(+), 31 deletions(-) create mode 100644 addons/dialogic-main/LICENSE create mode 100644 addons/dialogic-main/README.md create mode 100644 addons/dialogic-main/Tests/Resources/unit_test_character.dch create mode 100644 addons/dialogic-main/Tests/Unit/glossary_resource_test.gd create mode 100644 addons/dialogic-main/Tests/Unit/guess_special_resource_test.gd create mode 100644 addons/dialogic-main/Tests/Unit/subsystem_history_test.gd create mode 100644 addons/dialogic-main/Tests/Unit/subsystem_text_test.gd create mode 100644 addons/dialogic-main/Tests/Unit/test_auto_advance.gd create mode 100644 addons/dialogic-main/Tests/Unit/test_example.gd create mode 100644 addons/dialogic-main/addons/dialogic/Core/DialogicGameHandler.gd create mode 100644 addons/dialogic-main/addons/dialogic/Core/DialogicResourceUtil.gd create mode 100644 addons/dialogic-main/addons/dialogic/Core/DialogicUtil.gd create mode 100644 addons/dialogic-main/addons/dialogic/Core/Dialogic_Subsystem.gd create mode 100644 addons/dialogic-main/addons/dialogic/Core/index_class.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_exports.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_exports.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_layout.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_layout.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main_exports.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main_exports.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_general.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_general.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_portraits.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_portraits.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor_main_settings_section.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor_portrait_settings_section.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor_portrait_tree.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/portrait_scene_browser.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/portrait_scene_browser.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/BrowserItem.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/BrowserItem.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/DCSS.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/ReferenceManager_AddReplacementPanel.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/TitleBgStylebox.tres create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/broken_reference_manager.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/hint_tooltip_icon.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/hint_tooltip_icon.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/reference_manager.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/reference_manager.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/reference_manager_window.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/side_bar.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/sidebar.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/toolbar.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/unique_identifiers_manager.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/update_install_window.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/update_install_window.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Common/update_manager.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/BranchEnd.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/BranchEnd.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/EventBlock/event_block.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/EventBlock/event_block.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/EventBlock/event_right_click_menu.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/array_part.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/array_part.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/dictionary_part.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/dictionary_part.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_array.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_array.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_button.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_button.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_check.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_check.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_color.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_color.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_condition.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_condition.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_dictionary.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_dictionary.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_file.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_file.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_flex_value.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_flex_value.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_number.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_number.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_dynamic.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_dynamic.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_fixed.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_fixed.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_multiline.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_multiline.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_singleline.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_singleline.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector2.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector2.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector3.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector3.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector4.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector4.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector_base.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/event_field.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/styles/InputFieldsStyle.tres create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/styles/ResourceMenuHover.tres create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/styles/ResourceMenuNormal.tres create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/styles/ResourceMenuPanelBackground.tres create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/styles/SectionPanel.tres create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/styles/SimpleButtonHover.tres create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/styles/SimpleButtonNormal.tres create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/styles/TextBackground.tres create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/styles/selected_styleboxflat.tres create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Events/styles/unselected_stylebox.tres create mode 100644 addons/dialogic-main/addons/dialogic/Editor/HomePage/home_page.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/HomePage/home_page.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/HomePage/icon_bg.png create mode 100644 addons/dialogic-main/addons/dialogic/Editor/HomePage/icon_bg.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/HomePage/tips.txt create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/default.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/default.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/divide.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/divide.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/join.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/join.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/leave.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/leave.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/minus.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/minus.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/multiply.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/multiply.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/plus.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/plus.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/set.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/set.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/update.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/update.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/decrement_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/decrement_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/increment_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/increment_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/add-folder.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/add-folder.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/close-icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/close-icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/closed-icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/closed-icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/expand-icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/expand-icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/open-icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/open-icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable_icon.png create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable_icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/warning.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/warning.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Resources/character.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Resources/character.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Resources/icon_character.png create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Resources/icon_character.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Resources/portrait.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Resources/portrait.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-character.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-character.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-timeline.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-timeline.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Unknown.png create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/Unknown.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/dialogic-logo.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/dialogic-logo.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/plugin-icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/plugin-icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/preview_character.png create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/preview_character.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/preview_character_speaker.png create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Images/preview_character_speaker.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Inspector/inspector_plugin.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Inspector/timeline_inspector_field.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Settings/HintLabelStylingScript.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Settings/csv_file.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Settings/settings_editor.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Settings/settings_editor.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Settings/settings_general.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Settings/settings_general.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Settings/settings_modules.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Settings/settings_modules.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Settings/settings_page.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Settings/settings_translation.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Settings/settings_translation.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Theme/MainTheme.tres create mode 100644 addons/dialogic-main/addons/dialogic/Editor/Theme/PickerTheme.tres create mode 100644 addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/CodeCompletionHelper.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/syntax_highlighter.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/timeline_editor_text.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/timeline_editor_text.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/AddEventButton.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/AddEventButton.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/TimelineArea.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/timeline_editor_visual.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/timeline_editor_visual.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/test_timeline_scene.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/test_timeline_scene.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/timeline_editor.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/timeline_editor.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/dialogic_editor.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/editor_main.gd create mode 100644 addons/dialogic-main/addons/dialogic/Editor/editor_main.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Editor/editors_manager.gd create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Bold.ttf create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Bold.ttf.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Italic.ttf create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Italic.ttf.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Regular.ttf create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Regular.ttf.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/already_read_indicator.gd create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/backgrounds/BubbleEnd.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/backgrounds/BubbleEnd.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/backgrounds/new-default-dialog.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/backgrounds/rpg_box.webp create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/backgrounds/rpg_box.webp.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/default_event.gd create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/next-indicator/next-indicator-dialogic-1.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/next-indicator/next-indicator-dialogic-1.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/next-indicator/next-indicator.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/next-indicator/next-indicator.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 blink.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 blink.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 doubt.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 doubt.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 hate.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 hate.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 plot.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 plot.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 sad.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 sad.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 scoff.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 scoff.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 shy.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 shy.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 surprise.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 surprise.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/CustomPortrait_AnimatedSprite.gd create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/CustomPortrait_AnimatedSprite.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/CustomPortrait_FaceAtlas.gd create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/CustomPortrait_FaceAtlas.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 avoid.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 avoid.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 blink.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 blink.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 concept.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 concept.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 confusion.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 confusion.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 doubt.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 doubt.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 happy.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 happy.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 plot.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 plot.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 sad.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 sad.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 shy.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 shy.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 surprise.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Jane/pl3 surprise.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Portrait1.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Portrait1.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Portrait2.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Portrait2.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Princess/anger.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Princess/anger.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Princess/frown.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Princess/frown.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Princess/joy.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Princess/joy.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Princess/neutral.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Princess/neutral.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Princess/princess_blank.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Princess/princess_blank.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Princess/shock.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Princess/shock.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Princess/smile.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/Princess/smile.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/rpg_portraits/base1.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/rpg_portraits/base1.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/rpg_portraits/base2.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/rpg_portraits/base2.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/rpg_portraits/base3.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/rpg_portraits/base3.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/rpg_portraits/base4.png create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/portraits/rpg_portraits/base4.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/sound-effects/LICENSE.txt create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/sound-effects/typing1.wav create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/sound-effects/typing1.wav.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/sound-effects/typing2.wav create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/sound-effects/typing2.wav.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/sound-effects/typing3.wav create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/sound-effects/typing3.wav.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/sound-effects/typing4.wav create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/sound-effects/typing4.wav.import create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/sound-effects/typing5.wav create mode 100644 addons/dialogic-main/addons/dialogic/Example Assets/sound-effects/typing5.wav.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Audio/event_music.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Audio/event_sound.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Audio/icon_music.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Audio/icon_music.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Audio/icon_sound.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Audio/icon_sound.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Audio/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Audio/subsystem_audio.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/DefaultBackgroundScene/default_background.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/DefaultBackgroundScene/default_background.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/Defaults/push_down.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/Defaults/push_left.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/Defaults/push_right.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/Defaults/push_up.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/Defaults/simple_fade.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/Defaults/simple_fade.tres create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/Defaults/swipe_diagonal_up_left.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/Defaults/swipe_left_to_right.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/Defaults/swipe_right_to_left.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/class_dialogic_background_transition.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/default_transition_shader.gdshader create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/push_transition_shader.gdshader create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/simple_push_transitions.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/simple_swipe_gradient.tres create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/Transitions/simple_swipe_transitions.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/dialogic_background.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/event_background.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/icon.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/node_background_holder.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Background/subsystem_backgrounds.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Call/event_call.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Call/icon.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Call/icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Call/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/bounce.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/bounce_in_out.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/fade_down_in_out.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/fade_in_out.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/fade_up_in_out.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/heartbeat.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/instant_in_out.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/shake_x.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/shake_y.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/slide_down_in_out.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/slide_left_in_out.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/slide_right_in_out.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/slide_up_in.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/tada.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/zoom_center_in_out.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DefaultAnimations/zoom_in_out.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/DialogicPortraitAnimationsUtil.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/class_dialogic_animation.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/custom_portrait_thumbnail.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/custom_portrait_thumbnail.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/default_portrait.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/default_portrait.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/default_portrait_thumbnail.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/default_portrait_thumbnail.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/dialogic_portrait.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/event_character.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/icon_position.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/icon_position.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/node_portrait_container.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/portrait_position.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/portrait_position.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/preview_character.tres create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/settings_portraits.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/settings_portraits.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/simple_image_portrait_thumbnail.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/simple_image_portrait_thumbnail.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/subsystem_containers.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/subsystem_portraits.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/update_mirror.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/update_mirror.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/update_portrait.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/update_portrait.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/update_position.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/update_position.svg.2023_09_23_08_37_47.0.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/update_position.svg.2023_09_23_08_37_47.0.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/update_position.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/update_z_index.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Character/update_z_index.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Choice/event_choice.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Choice/icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Choice/icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Choice/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Choice/node_button_sound.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Choice/node_choice_button.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Choice/settings_choices.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Choice/settings_choices.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Choice/subsystem_choices.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Choice/ui_choice_end.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Choice/ui_choice_end.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/clear_background.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/clear_background.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/clear_characters.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/clear_characters.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/clear_music.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/clear_music.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/clear_positions.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/clear_positions.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/clear_style.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/clear_style.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/clear_textbox.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/clear_textbox.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/event_clear.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/icon.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Clear/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Comment/event_comment.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Comment/icon.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Comment/icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Comment/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Condition/event_condition.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Condition/icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Condition/icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Condition/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Condition/ui_condition_end.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Condition/ui_condition_end.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Core/event_end_branch.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Core/icon.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Core/icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Core/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Core/subsystem_animation.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Core/subsystem_expression.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Core/subsystem_input.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Base_Default/default_layout_base.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Base_Default/default_layout_base.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Base_Default/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Base_TextBubble/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Base_TextBubble/text_bubble_base.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Base_TextBubble/text_bubble_base.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_FullBackground/background_layer_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_FullBackground/background_layer_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_FullBackground/full_background_layer.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_FullBackground/full_background_layer.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_FullBackground/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_FullBackground/preview.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_FullBackground/preview.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Glossary/glossary_popup_layer.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Glossary/glossary_popup_layer.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Glossary/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Glossary/popup_glossary_layer_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Glossary/popup_glossary_layer_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Glossary/preview.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Glossary/preview.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_History/example_history_item.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_History/example_history_item.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_History/history_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_History/history_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_History/history_layer.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_History/history_layer.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_History/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_History/preview.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_History/preview.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Input/full_advance_input_layer.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Input/full_advance_input_layer.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Input/input_layer_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Input/input_layer_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Input/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Input/preview.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Input/preview.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_SpeakerPortraitTextbox/default_stylebox.tres create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_SpeakerPortraitTextbox/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_SpeakerPortraitTextbox/preview.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_SpeakerPortraitTextbox/preview.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_SpeakerPortraitTextbox/speaker-textbox-icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_SpeakerPortraitTextbox/speaker-textbox-icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_SpeakerPortraitTextbox/speaker_portrait_textbox_layer.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_SpeakerPortraitTextbox/textbox_with_speaker_portrait.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_TextInput/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_TextInput/preview.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_TextInput/preview.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_TextInput/text_input_layer.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_TextInput/text_input_layer.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_TextInput/text_input_layer_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_TextInput/text_input_layer_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Textbubble/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Textbubble/preview.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Textbubble/preview.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Textbubble/speech_bubble.gdshader create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Textbubble/text_bubble.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Textbubble/text_bubble.gdshader create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Textbubble/text_bubble.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Textbubble/text_bubble_layer.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Textbubble/text_bubble_layer.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Textbubble/text_bubble_layer_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_Textbubble/text_bubble_layer_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/choice_panel_focus.tres create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/choice_panel_hover.tres create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/choice_panel_normal.tres create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/choices_layer_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/choices_layer_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/preview.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/preview.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/vn_choice_layer.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Choices/vn_choice_layer.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Portraits/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Portraits/portrait_layer_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Portraits/portrait_layer_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Portraits/preview.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Portraits/preview.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Portraits/vn_portrait_layer.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Portraits/vn_portrait_layer.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/animations.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/autoadvance_indicator.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/next.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/next.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/preview.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/preview.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/textbox_layer_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/textbox_layer_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/vn_textbox_default_panel.tres create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/vn_textbox_layer.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/vn_textbox_layer.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Layer_VN_Textbox/vn_textbox_name_label_panel.tres create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Style_SpeakerTextbox/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Style_SpeakerTextbox/preview.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Style_SpeakerTextbox/preview.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Style_SpeakerTextbox/speaker_textbox_style.tres create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Style_TextBubbles/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Style_TextBubbles/preview.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Style_TextBubbles/preview.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Style_TextBubbles/textbubble_style.tres create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Style_VN_Default/default_vn_style.tres create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Style_VN_Default/part_config.cfg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Style_VN_Default/preview.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/Style_VN_Default/preview.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/DefaultLayoutParts/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/End/event_end.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/End/icon.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/End/icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/End/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Glossary/add-glossary.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Glossary/add-glossary.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Glossary/event_glossary.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Glossary/glossary_editor.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Glossary/glossary_editor.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Glossary/glossary_resource.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Glossary/icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Glossary/icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Glossary/icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Glossary/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Glossary/subsystem_glossary.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/HighlightPortrait/highlight_portrait_thumbnail.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/HighlightPortrait/highlight_portrait_thumbnail.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/HighlightPortrait/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/HighlightPortrait/simple_highlight_portrait.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/HighlightPortrait/simple_highlight_portrait.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/History/definition.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/History/definition.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/History/event_history.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/History/icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/History/icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/History/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/History/settings_history.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/History/settings_history.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/History/subsystem_history.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Jump/event_jump.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Jump/event_label.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Jump/event_return.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Jump/icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Jump/icon_jump.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Jump/icon_jump.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Jump/icon_label.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Jump/icon_label.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Jump/icon_return.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Jump/icon_return.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Jump/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Jump/subsystem_jump.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/LayeredPortrait/custom_layered_portrait.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/LayeredPortrait/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/LayeredPortrait/layered_portrait.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/LayeredPortrait/layered_portrait.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/LayeredPortrait/layered_portrait_thumbnail.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/LayeredPortrait/layered_portrait_thumbnail.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Save/event_save.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Save/icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Save/icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Save/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Save/settings_save.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Save/settings_save.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Save/subsystem_save.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Settings/event_setting.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Settings/icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Settings/icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Settings/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Settings/subsystem_settings.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Signal/event_signal.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Signal/icon.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Signal/icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Signal/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Style/character_settings_style.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Style/character_settings_style.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Style/event_style.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Style/icon.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Style/icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Style/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Style/node_style.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Style/subsystem_styles.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/StyleEditor/Components/style_browser.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/StyleEditor/Components/style_browser.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/StyleEditor/Components/style_browser_window.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/StyleEditor/Components/style_layer_tree.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/StyleEditor/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/StyleEditor/style_editor.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/StyleEditor/style_editor.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/StyleEditor/style_layer_editor.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/StyleEditor/styles_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/StyleEditor/styles_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/DNextIndicator_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/auto_advance.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/auto_skip.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/character_settings/character_moods_settings.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/character_settings/character_moods_settings.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/character_settings/character_portrait_mood_settings.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/character_settings/character_portrait_mood_settings.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/event_text.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/manual_advance.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/node_dialog_text.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/node_dialog_text_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/node_dialog_text_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/node_input.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/node_name_label.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/node_name_label_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/node_name_label_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/node_next_indicator.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/node_next_indicator_icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/node_next_indicator_icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/node_type_sound.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/settings_text.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/settings_text.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Text/subsystem_text.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/TextInput/event_text_input.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/TextInput/icon.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/TextInput/icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/TextInput/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/TextInput/node_text_input.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/TextInput/subsystem_text_input.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Variable/add-variable.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Variable/add-variable.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Variable/event_variable.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Variable/icon.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Variable/icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Variable/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Variable/subsystem_variables.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Variable/variable.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Variable/variable.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Variable/variables_editor/variable_tree.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Variable/variables_editor/variables_editor.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Variable/variables_editor/variables_editor.tscn create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Voice/event_voice.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Voice/icon.png create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Voice/icon.png.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Voice/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Voice/subsystem_voice.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Wait/event_wait.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Wait/icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Wait/icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/Wait/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/WaitInput/event_wait_input.gd create mode 100644 addons/dialogic-main/addons/dialogic/Modules/WaitInput/icon.svg create mode 100644 addons/dialogic-main/addons/dialogic/Modules/WaitInput/icon.svg.import create mode 100644 addons/dialogic-main/addons/dialogic/Modules/WaitInput/index.gd create mode 100644 addons/dialogic-main/addons/dialogic/Resources/CharacterResourceLoader.gd create mode 100644 addons/dialogic-main/addons/dialogic/Resources/CharacterResourceSaver.gd create mode 100644 addons/dialogic-main/addons/dialogic/Resources/TimelineResourceLoader.gd create mode 100644 addons/dialogic-main/addons/dialogic/Resources/TimelineResourceSaver.gd create mode 100644 addons/dialogic-main/addons/dialogic/Resources/character.gd create mode 100644 addons/dialogic-main/addons/dialogic/Resources/dialogic_layout_base.gd create mode 100644 addons/dialogic-main/addons/dialogic/Resources/dialogic_layout_layer.gd create mode 100644 addons/dialogic-main/addons/dialogic/Resources/dialogic_style.gd create mode 100644 addons/dialogic-main/addons/dialogic/Resources/dialogic_style_layer.gd create mode 100644 addons/dialogic-main/addons/dialogic/Resources/event.gd create mode 100644 addons/dialogic-main/addons/dialogic/Resources/timeline.gd create mode 100644 addons/dialogic-main/addons/dialogic/plugin.cfg create mode 100644 addons/dialogic-main/addons/dialogic/plugin.gd diff --git a/Assets/Characters/Friendly/Tellik/tellick.gd b/Assets/Characters/Friendly/Tellik/tellick.gd index 7abe39a..fb918e1 100644 --- a/Assets/Characters/Friendly/Tellik/tellick.gd +++ b/Assets/Characters/Friendly/Tellik/tellick.gd @@ -1,6 +1,7 @@ extends CharacterBody2D -const SPEED = 600.0 +var SPEED = 600.0 +const REGSPEED = 600.0 const JUMP_VELOCITY = -1000.0 const MAX_JUMP_DURATION = 0.3 const MIN_JUMP_DURATION = 0.01 @@ -9,54 +10,83 @@ const FALL_GRAVITY_MULTIPLIER = 2 var isFacingRight: bool +# jumping vars var jump_timer = 0.0 var is_jumping = false +# crouching vars +var is_crouching = false +var can_stand_up = true +var crouch_speed = 100 + +# dialouge vars +@export var is_talking = false + @onready var actionableFinder: Area2D = $Marker2D/ActionableFinder +func _input(event: InputEvent) -> void: + if event.is_action_pressed("crouch"): + is_crouching = true + update_crouch_state() + elif(event.is_action_released("crouch")): + is_crouching = false + update_crouch_state() + +func update_crouch_state() -> void: + if is_crouching: + #slow speed + SPEED = crouch_speed + #shorten hitbox + $CollisionShape2D.scale.y = .5 + elif(can_stand_up): + SPEED = REGSPEED # resotre normal speed + $CollisionShape2D.scale.y = 1 # restore collision + + func _unhandled_input(event: InputEvent) -> void: if Input.is_action_just_pressed("ui_accept"): var actionables = actionableFinder.get_overlapping_areas() if actionables.size() > 0: - actionables[0].action() + is_talking = true + actionables[0].action(is_talking) return func _physics_process(delta): # Apply gravity if not is_on_floor(): var gravity_multiplier = FALL_GRAVITY_MULTIPLIER if velocity.y > 0 else 2 velocity.y += GRAVITY * gravity_multiplier * delta + if !is_talking: + # Handle Jump + if Input.is_action_just_pressed("jump") and is_on_floor(): + start_jump() + + if is_jumping: + if Input.is_action_pressed("jump"): + continue_jump(delta) + else: + end_jump() - # Handle Jump - if Input.is_action_just_pressed("jump") and is_on_floor(): - start_jump() - - if is_jumping: - if Input.is_action_pressed("jump"): - continue_jump(delta) + # Handle horizontal movement + var direction = Input.get_axis("move_left", "move_right") + + if direction < 0: + isFacingRight = false + elif direction > 0: + isFacingRight = true + + if isFacingRight: + $Marker2D.scale.x = 1 + $AnimatedSprite2D.scale.x = 1 * 0.2 else: - end_jump() + $Marker2D.scale.x = -1 + $AnimatedSprite2D.scale.x = -1 * 0.2 + + if direction: + velocity.x = direction * SPEED + else: + velocity.x = move_toward(velocity.x, 0, SPEED) - # Handle horizontal movement - var direction = Input.get_axis("move_left", "move_right") - - if direction < 0: - isFacingRight = false - elif direction > 0: - isFacingRight = true - - if isFacingRight: - $Marker2D.scale.x = 1 - $AnimatedSprite2D.scale.x = 1 * 0.2 - else: - $Marker2D.scale.x = -1 - $AnimatedSprite2D.scale.x = -1 * 0.2 - - if direction: - velocity.x = direction * SPEED - else: - velocity.x = move_toward(velocity.x, 0, SPEED) - - move_and_slide() + move_and_slide() func start_jump(): velocity.y = JUMP_VELOCITY diff --git a/Dialouges/actionable.tscn b/Dialouges/actionable.tscn index 68faf32..49633b8 100644 --- a/Dialouges/actionable.tscn +++ b/Dialouges/actionable.tscn @@ -5,3 +5,4 @@ [node name="Actionable" type="Area2D"] collision_layer = 4 script = ExtResource("1_prwwk") +dialouge_start = null diff --git a/addons/dialogic-main/LICENSE b/addons/dialogic-main/LICENSE new file mode 100644 index 0000000..f001429 --- /dev/null +++ b/addons/dialogic-main/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 - present Emilio Coppola + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/addons/dialogic-main/README.md b/addons/dialogic-main/README.md new file mode 100644 index 0000000..a83e6f9 --- /dev/null +++ b/addons/dialogic-main/README.md @@ -0,0 +1,78 @@ +

+ cover +

+ +

Dialogic 2

+ +

+ Create Dialogs, Visual Novels, RPGs, and manage Characters with Godot to create your Game! +

+ +

+ Discord + Godot v4.2+ + Dialogic 2 Documentation + GitHub Actions Workflow Status + Latest Dialogic Release +

+ +## Table of Contents +- [Version](#version) +- [Installation](#installation) +- [Documentation](#documentation) +- [Testing](#testing) +- [Credits](#credits) +- [License](#license) + +## Version + +Dialogic 2 **requires at least Godot 4.2**. + +[If you are looking for the Godot 3.x version (Dialogic 1.x) you can find it here.](https://github.com/dialogic-godot/dialogic-1) + +## Installation +Follow the installation instructions on our [Getting Started](https://docs.dialogic.pro/getting-started.html#1-installation--activation) documentation. + +Dialogic comes with an auto-updater so you can install future versions right from within the plugin. + +## Documentation +You can find the official documentation of Dialogic here: [Dialogic Documentation](https://docs.dialogic.pro/) + +There is a Class Reference as well: [Class Reference](https://docs.dialogic.pro/class_index.html) + + +## Connect with us! +If you need help or want to share your Dialogic projects, take a look at the following options: + +- Ask questions, or report bugs on our [Discord](https://discord.gg/DjcDgDaTMe) +- Report bugs and issues on the [GitHub Issues Page](https://github.com/dialogic-godot/dialogic/issues) +- Ask questions on [GitHub Discussions](https://github.com/dialogic-godot/dialogic/discussions) + +## Testing +Dialogic uses [Unit Tests](https://en.wikipedia.org/wiki/Unit_testing) to ensure specific parts function as expected. These tests run on every git push and pull request. The framework to do these tests is called [gdUnit4](https://github.com/MikeSchulze/gdUnit4) and our tests reside in the [/Tests/Unit](https://github.com/dialogic-godot/dialogic/tree/main/Tests/Unit) path. We recommend installing the `gdUnit4` add-on from the `AssetLib`, with this add-on, you can run tests locally. + +To get started, take a look at the existing files in the path and read the documentation to [create your first test](https://mikeschulze.github.io/gdUnit4/first_steps/firstTest/). + +## Interacting with the Source Code +All methods and variables in the Dialogic 2 source **code prefixed with an underscore (`_`)** are considered *private*, for instance: `_remove_character()`. + +While you can use them, they may change in their behavior or change their signature, causing breakage in your code while moving between versions. +Most private methods are used inside public ones; if you need help, check the documentation. + +**Public methods and variables can be found in our [Class Reference](https://docs.dialogic.pro/class_index.html).** + +During the Alpha and Beta version stages, code may change at any Dialogic Release to allow drafting a better design. +Changelogs will accommodate for these changes and inform you on how to update your code. + + +## Credits +Made by [Jowan-Spooner](https://github.com/Jowan-Spooner) and [Emilio Coppola](https://github.com/coppolaemilio). + +Contributors: [CakeVR](https://github.com/CakeVR), [Exelia](https://github.com/exelia-antonov), [zaknafean](https://github.com/zaknafean), [and more!](https://github.com/dialogic-godot/dialogic/graphs/contributors). + +Special thanks: [Arnaud](https://github.com/arnaudvergnet), [AnidemDex](https://github.com/AnidemDex), [ellogwen](https://github.com/ellogwen), [Tim Krief](https://github.com/timkrief), [Toen](https://twitter.com/ToenAndreMC), Òscar, [Francisco Presencia](https://francisco.io/), [M7mdKady14](https://github.com/M7mdKady14). + +### Thank you to all my [Patreons](https://www.patreon.com/coppolaemilio) and Github sponsors for making this possible! + +## License +This project is licensed under the terms of the [MIT license](https://github.com/dialogic-godot/dialogic/blob/main/LICENSE). diff --git a/addons/dialogic-main/Tests/Resources/unit_test_character.dch b/addons/dialogic-main/Tests/Resources/unit_test_character.dch new file mode 100644 index 0000000..c3f3e7c --- /dev/null +++ b/addons/dialogic-main/Tests/Resources/unit_test_character.dch @@ -0,0 +1,19 @@ +{ +"@path": "res://addons/dialogic/Resources/character.gd", +"@subpath": NodePath(""), +"_translation_id": "", +"color": Color(1, 1, 1, 1), +"custom_info": { +"sound_mood_default": "", +"sound_moods": {}, +"style": "" +}, +"default_portrait": "", +"description": "", +"display_name": "unit_test_character", +"mirror": false, +"nicknames": [""], +"offset": Vector2(0, 0), +"portraits": {}, +"scale": 1.0 +} \ No newline at end of file diff --git a/addons/dialogic-main/Tests/Unit/glossary_resource_test.gd b/addons/dialogic-main/Tests/Unit/glossary_resource_test.gd new file mode 100644 index 0000000..62664f3 --- /dev/null +++ b/addons/dialogic-main/Tests/Unit/glossary_resource_test.gd @@ -0,0 +1,76 @@ +## This test suite tests the DialogicGlossary class. +extends GdUnitTestSuite + + +const NAME_ENTRY := "Example Name" +const EXAMPLE_TITLE := "Example Title" +const ALTERNATIVE_ENTRIES := ["A", "BE", "VERY LONG ENTRY"] + +const SAMPLE_ENTRY := { + DialogicGlossary.TITLE_PROPERTY: EXAMPLE_TITLE, + DialogicGlossary.NAME_PROPERTY: NAME_ENTRY, + DialogicGlossary.ALTERNATIVE_PROPERTY: ALTERNATIVE_ENTRIES +} + + +## We test to add a glossary entry and whether the resulting states of the +## glossary indicate that the entry was added correctly. +func test_add_entry() -> void: + var glossary: DialogicGlossary = DialogicGlossary.new() + + assert(glossary.try_add_entry(SAMPLE_ENTRY), "Unable to add entry.") + + const NAME_COUNTER := 1 + var total_entry_count := ALTERNATIVE_ENTRIES.size() + NAME_COUNTER + + assert(glossary.entries.size() == total_entry_count, "Glossary should have 1 entry") + assert(not glossary.get_entry(NAME_ENTRY).is_empty(), "Entry index cannot be found via entry name.") + + for alternative: String in ALTERNATIVE_ENTRIES: + var assert_error_message := "Entry index cannot be found via alternative name: " + alternative + assert(not glossary.get_entry(alternative).is_empty(), assert_error_message) + + +## We test whether an entry's key can be replaced and if the resulting action +## invalidates the old entry key when accessing the glossary. +func test_replace_entries() -> void: + var glossary: DialogicGlossary = DialogicGlossary.new() + + assert(glossary.try_add_entry(SAMPLE_ENTRY), "Unable to add entry.") + + const NEW_NAME := "NEW NAME" + + glossary.replace_entry_key(NAME_ENTRY, NEW_NAME) + + var entry := glossary.get_entry(NEW_NAME) + var error := "Entry expected to be non-empty, was empty." + assert(not entry.is_empty(), error) + + var old_entry := glossary.get_entry(NAME_ENTRY) + error = "Entry expected to be empty, was an instance." + assert(old_entry.is_empty(), error) + + +## We test whether adding and deleting entries work. +func test_remove_entry() -> void: + var glossary: DialogicGlossary = DialogicGlossary.new() + + assert(glossary.try_add_entry(SAMPLE_ENTRY), "Unable to add entry.") + + const NAME_COUNTER := 1 + var total_entry_count := ALTERNATIVE_ENTRIES.size() + NAME_COUNTER + + assert(glossary.entries.size() == total_entry_count, "Glossary should have " + str(total_entry_count) + " entries.") + + var remove_result: bool = glossary.remove_entry(NAME_ENTRY) + + assert(remove_result, "Removal of entry failed.") + assert(glossary.get_entry(NAME_ENTRY).is_empty(), "Entry should not exist.") + assert(glossary.entries.size() == 0, "Glossary should have 0 entries but has " + str(glossary.entries.size()) + " entries.") + + +func test_add_duplicates() -> void: + var glossary: DialogicGlossary = DialogicGlossary.new() + + assert(glossary.try_add_entry(SAMPLE_ENTRY), "Unable to add entry.") + assert(not glossary.try_add_entry(SAMPLE_ENTRY), "Entry should not have been added.") diff --git a/addons/dialogic-main/Tests/Unit/guess_special_resource_test.gd b/addons/dialogic-main/Tests/Unit/guess_special_resource_test.gd new file mode 100644 index 0000000..41749c7 --- /dev/null +++ b/addons/dialogic-main/Tests/Unit/guess_special_resource_test.gd @@ -0,0 +1,40 @@ +extends GdUnitTestSuite + +## Check if transition animations can be accessed with "in", "out, "in out" +## as space-delimited prefix. +func test_fade_in_animation_paths() -> void: + const TYPE := "PortraitAnimation" + var fade_in_1: String = DialogicResourceUtil.guess_special_resource(TYPE, "fade in").get('path', "") + var fade_in_2: String = DialogicResourceUtil.guess_special_resource(TYPE, "fade cross").get('path', "") + var fade_in_3: String = DialogicResourceUtil.guess_special_resource(TYPE, "fade out").get('path', "") + + var is_any_fade_in_empty := fade_in_1.is_empty() or fade_in_2.is_empty() or fade_in_3.is_empty() + assert(is_any_fade_in_empty == false, "Fade In/Out animations are empty.") + + var are_all_fade_in_equal := fade_in_1 == fade_in_2 and fade_in_2 == fade_in_3 + assert(are_all_fade_in_equal == true, "Fade In/Out animations returned different paths.") + + +## Test if invalid animation paths will return empty strings. +func test_invalid_animation_path() -> void: + const TYPE := "PortraitAnimation" + var invalid_animation_1: String = DialogicResourceUtil.guess_special_resource(TYPE, "fade i").get('path', "") + assert(invalid_animation_1.is_empty() == true, "Invalid animation 1's path is not empty.") + + + var invalid_animation_2: String = DialogicResourceUtil.guess_special_resource(TYPE, "fade").get('path', "") + assert(invalid_animation_2.is_empty() == true, "Invalid animation 2's path is not empty.") + + +## Test if invalid types will return empty strings. +func test_invalid_type_path() -> void: + const INVALID_TYPE := "Portait Animation" + var invalid_animation: String = DialogicResourceUtil.guess_special_resource(INVALID_TYPE, "fade in").get('path', "") + assert(invalid_animation.is_empty() == true, "Invalid animation 1's path is not empty.") + + const VALID_TYPE := "PortraitAnimation" + var valid_animation_path: String = DialogicResourceUtil.guess_special_resource(VALID_TYPE, "fade in").get('path', "") + assert(valid_animation_path.is_empty() == false, "Valids animation's path is empty.") + + assert(not invalid_animation == valid_animation_path, "Valid and invalid animation paths are equal.") + diff --git a/addons/dialogic-main/Tests/Unit/subsystem_history_test.gd b/addons/dialogic-main/Tests/Unit/subsystem_history_test.gd new file mode 100644 index 0000000..7b99abb --- /dev/null +++ b/addons/dialogic-main/Tests/Unit/subsystem_history_test.gd @@ -0,0 +1,51 @@ +extends GdUnitTestSuite + +var history := Dialogic.History + +const EXAMPLE_SEEN_HISTORY: Dictionary = { + "res://Dialogic/Timelines/start.dtl1": 1, + "res://Dialogic/Timelines/start.dtl2": 2, + "res://Dialogic/Timelines/start.dtl3": 3, + "res://Dialogic/Timelines/start.dtl4": 4, + "res://Dialogic/Timelines/start.dtl5": 5, + "res://Dialogic/Timelines/start.dtl7": 7 +} + +func test_save_load_visited() -> void: + assert(history.visited_event_history_content == {}, "Seen events should have be empty.") + history.load_visited_history() + assert(history.visited_event_history_content == {}, "Seen events should have be empty after empty load.") + + history.visited_event_history_content = EXAMPLE_SEEN_HISTORY + assert(history.visited_event_history_content == EXAMPLE_SEEN_HISTORY, "Seen events should have be identical to test data.") + + history.save_visited_history() + var global_data_seen_events: Dictionary = history.get_saved_visited_history() + + assert(global_data_seen_events == EXAMPLE_SEEN_HISTORY, "Global data does not have example data.") + + history.load_visited_history() + assert(history.visited_event_history_content == EXAMPLE_SEEN_HISTORY, "Seen events should have be identical to test data after load.") + + +func test_deletion_save_visited() -> void: + history.visited_event_history_content = EXAMPLE_SEEN_HISTORY + assert(history.visited_event_history_content == EXAMPLE_SEEN_HISTORY, "Seen events should have be identical to test data.") + + history.save_visited_history() + var global_data_seen_events: Dictionary = history.get_saved_visited_history() + assert(global_data_seen_events == EXAMPLE_SEEN_HISTORY, "Global data does not have example data.") + + history.reset_visited_history(false) + var global_data_seen_events_after_reset: Dictionary = history.get_saved_visited_history() + assert(history.visited_event_history_content == EXAMPLE_SEEN_HISTORY, "Seen events are gone after global data only reset.") + assert(global_data_seen_events_after_reset == {}, "Global data should be empty after reset.") + + history.load_visited_history() + assert(history.visited_event_history_content == {}, "Seen events should have be empty after empty load.") + + history.visited_event_history_content = EXAMPLE_SEEN_HISTORY + history.reset_visited_history(true) + var global_data_seen_events_after_full_reset: Dictionary = history.get_saved_visited_history() + assert(global_data_seen_events_after_full_reset == {}, "Seen events in global data should have be empty after full data reset.") + assert(history.visited_event_history_content == {}, "Seen events in history should have be empty after full data reset.") diff --git a/addons/dialogic-main/Tests/Unit/subsystem_text_test.gd b/addons/dialogic-main/Tests/Unit/subsystem_text_test.gd new file mode 100644 index 0000000..8fd6b1e --- /dev/null +++ b/addons/dialogic-main/Tests/Unit/subsystem_text_test.gd @@ -0,0 +1,27 @@ +extends GdUnitTestSuite + +const VALID_SPEAKER_PATH := "res://Tests/Resources/unit_test_character.dch" + +## We ensure that missing a speaker will return null. +func test_missing_current_speaker() -> void: + var null_speaker := DialogicUtil.autoload().Text.get_current_speaker() + + assert(null_speaker == null, "Current speaker is not null.") + + +## We ensure invalid speaker paths return the correct value. +func test_set_invalid_current_speaker() -> void: + DialogicUtil.autoload().current_state_info["speaker"] = "Invalid Speaker Path" + var current_speaker := DialogicUtil.autoload().Text.get_current_speaker() + + assert(current_speaker == null, "Invalid speaker must be invalid, but is valid.") + + +## We ensure valid speaker paths return a valid [class DialogicCharacter] and +## the path is set correctly. +func test_set_valid_current_speaker() -> void: + DialogicUtil.autoload().current_state_info["speaker"] = VALID_SPEAKER_PATH + var current_speaker := DialogicUtil.autoload().Text.get_current_speaker() + + assert(not current_speaker == null, "Valid speaker must be valid, but is invalid.") + assert(current_speaker.get_path() == VALID_SPEAKER_PATH, "Valid speaker path is not set correctly.") diff --git a/addons/dialogic-main/Tests/Unit/test_auto_advance.gd b/addons/dialogic-main/Tests/Unit/test_auto_advance.gd new file mode 100644 index 0000000..1acc978 --- /dev/null +++ b/addons/dialogic-main/Tests/Unit/test_auto_advance.gd @@ -0,0 +1,19 @@ +extends GdUnitTestSuite + +## Ensure Auto-Advance is enabled properly using the user input flag. +func test_enable_auto_advance() -> void: + Dialogic.Inputs.auto_advance.enabled_until_user_input = true + var is_enabled: bool = Dialogic.Inputs.auto_advance.is_enabled() + + assert(is_enabled == true, "Auto-Advance is not enabled.") + + +## This test was created to ensure a bug was fixed: +## When the user enabled the Auto-Advance until user input, +## the Auto-Advance would still run after the user input. +func test_disable_auto_advance() -> void: + Dialogic.Inputs.auto_advance.enabled_until_user_input = true + Dialogic.Inputs.handle_input() + + var is_enabled: bool = Dialogic.Inputs.auto_advance.is_enabled() + assert(is_enabled == false, "Auto-Advance is still running after input") diff --git a/addons/dialogic-main/Tests/Unit/test_example.gd b/addons/dialogic-main/Tests/Unit/test_example.gd new file mode 100644 index 0000000..cc827f1 --- /dev/null +++ b/addons/dialogic-main/Tests/Unit/test_example.gd @@ -0,0 +1,9 @@ +class_name GdUnitExampleTest +extends GdUnitTestSuite + +func test_example() -> void: + const EXAMPLE_STRING := "Dialogic!" + + assert_str(EXAMPLE_STRING)\ + .has_length(EXAMPLE_STRING.length())\ + .starts_with("Dia") diff --git a/addons/dialogic-main/addons/dialogic/Core/DialogicGameHandler.gd b/addons/dialogic-main/addons/dialogic/Core/DialogicGameHandler.gd new file mode 100644 index 0000000..43c2557 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Core/DialogicGameHandler.gd @@ -0,0 +1,433 @@ +class_name DialogicGameHandler +extends Node + +## Class that is used as the Dialogic autoload. + +## Autoload script that allows you to interact with all of Dialogic's systems:[br] +## - Holds all important information about the current state of Dialogic.[br] +## - Provides access to all the subsystems.[br] +## - Has methods to start/end timelines.[br] + + +## States indicating different phases of dialog. +enum States { + IDLE, ## Dialogic is awaiting input to advance. + REVEALING_TEXT, ## Dialogic is currently revealing text. + ANIMATING, ## Some animation is happening. + AWAITING_CHOICE, ## Dialogic awaits the selection of a choice + WAITING ## Dialogic is currently awaiting something. + } + +## Flags indicating what to clear when calling [method clear]. +enum ClearFlags { + FULL_CLEAR = 0, ## Clears all subsystems + KEEP_VARIABLES = 1, ## Clears all subsystems and info except for variables + TIMELINE_INFO_ONLY = 2 ## Doesn't clear subsystems but current timeline and index + } + +## Reference to the currently executed timeline. +var current_timeline: DialogicTimeline = null +## Copy of the [member current_timeline]'s events. +var current_timeline_events: Array = [] + +## Index of the event the timeline handling is currently at. +var current_event_idx: int = 0 +## Contains all information that subsystems consider relevant for +## the current situation +var current_state_info: Dictionary = {} + +## Current state (see [member States] enum). +var current_state := States.IDLE: + get: + return current_state + + set(new_state): + current_state = new_state + state_changed.emit(new_state) + +## Emitted when [member current_state] change. +signal state_changed(new_state:States) + +## When `true`, many dialogic processes won't continue until it's `false` again. +var paused := false: + set(value): + paused = value + + if paused: + + for subsystem in get_children(): + + if subsystem is DialogicSubsystem: + (subsystem as DialogicSubsystem).pause() + + dialogic_paused.emit() + + else: + for subsystem in get_children(): + + if subsystem is DialogicSubsystem: + (subsystem as DialogicSubsystem).resume() + + dialogic_resumed.emit() + +## Emitted when [member paused] changes to `true`. +signal dialogic_paused +## Emitted when [member paused] changes to `false`. +signal dialogic_resumed + + +## Emitted when the timeline ends. +## This can be a timeline ending or [method end_timeline] being called. +signal timeline_ended +## Emitted when a timeline starts by calling either [method start] +## or [method start_timeline]. +signal timeline_started +## Emitted when an event starts being executed. +## The event may not have finished executing yet. +signal event_handled(resource: DialogicEvent) + +## Emitted when a [class SignalEvent] event was reached. +signal signal_event(argument: Variant) +## Emitted when a signal event gets fired from a [class TextEvent] event. +signal text_signal(argument: String) + + +# Careful, this section is repopulated automatically at certain moments. +#region SUBSYSTEMS + +var Audio := preload("res://addons/dialogic/Modules/Audio/subsystem_audio.gd").new(): + get: return get_subsystem("Audio") + +var Backgrounds := preload("res://addons/dialogic/Modules/Background/subsystem_backgrounds.gd").new(): + get: return get_subsystem("Backgrounds") + +var Portraits := preload("res://addons/dialogic/Modules/Character/subsystem_portraits.gd").new(): + get: return get_subsystem("Portraits") + +var PortraitContainers := preload("res://addons/dialogic/Modules/Character/subsystem_containers.gd").new(): + get: return get_subsystem("PortraitContainers") + +var Choices := preload("res://addons/dialogic/Modules/Choice/subsystem_choices.gd").new(): + get: return get_subsystem("Choices") + +var Expressions := preload("res://addons/dialogic/Modules/Core/subsystem_expression.gd").new(): + get: return get_subsystem("Expressions") + +var Animations := preload("res://addons/dialogic/Modules/Core/subsystem_animation.gd").new(): + get: return get_subsystem("Animations") + +var Inputs := preload("res://addons/dialogic/Modules/Core/subsystem_input.gd").new(): + get: return get_subsystem("Inputs") + +var Glossary := preload("res://addons/dialogic/Modules/Glossary/subsystem_glossary.gd").new(): + get: return get_subsystem("Glossary") + +var History := preload("res://addons/dialogic/Modules/History/subsystem_history.gd").new(): + get: return get_subsystem("History") + +var Jump := preload("res://addons/dialogic/Modules/Jump/subsystem_jump.gd").new(): + get: return get_subsystem("Jump") + +var Save := preload("res://addons/dialogic/Modules/Save/subsystem_save.gd").new(): + get: return get_subsystem("Save") + +var Settings := preload("res://addons/dialogic/Modules/Settings/subsystem_settings.gd").new(): + get: return get_subsystem("Settings") + +var Styles := preload("res://addons/dialogic/Modules/Style/subsystem_styles.gd").new(): + get: return get_subsystem("Styles") + +var Text := preload("res://addons/dialogic/Modules/Text/subsystem_text.gd").new(): + get: return get_subsystem("Text") + +var TextInput := preload("res://addons/dialogic/Modules/TextInput/subsystem_text_input.gd").new(): + get: return get_subsystem("TextInput") + +var VAR := preload("res://addons/dialogic/Modules/Variable/subsystem_variables.gd").new(): + get: return get_subsystem("VAR") + +var Voice := preload("res://addons/dialogic/Modules/Voice/subsystem_voice.gd").new(): + get: return get_subsystem("Voice") + +#endregion + + +## Autoloads are added first, so this happens REALLY early on game startup. +func _ready() -> void: + _collect_subsystems() + + clear() + + +#region TIMELINE & EVENT HANDLING +################################################################################ + +## Method to start a timeline AND ensure that a layout scene is present. +## For argument info, checkout [method start_timeline]. +## -> returns the layout node +func start(timeline:Variant, label:Variant="") -> Node: + # If we don't have a style subsystem, default to just start_timeline() + if not has_subsystem('Styles'): + printerr("[Dialogic] You called Dialogic.start() but the Styles subsystem is missing!") + clear(ClearFlags.KEEP_VARIABLES) + start_timeline(timeline, label) + return null + + # Otherwise make sure there is a style active. + var scene: Node = null + if !self.Styles.has_active_layout_node(): + scene = self.Styles.load_style() + else: + scene = self.Styles.get_layout_node() + scene.show() + + if not scene.is_node_ready(): + scene.ready.connect(clear.bind(ClearFlags.KEEP_VARIABLES)) + scene.ready.connect(start_timeline.bind(timeline, label)) + else: + start_timeline(timeline, label) + + return scene + + +## Method to start a timeline without adding a layout scene. +## @timeline can be either a loaded timeline resource or a path to a timeline file. +## @label_or_idx can be a label (string) or index (int) to skip to immediatly. +func start_timeline(timeline:Variant, label_or_idx:Variant = "") -> void: + # load the resource if only the path is given + if typeof(timeline) == TYPE_STRING: + #check the lookup table if it's not a full file name + if (timeline as String).contains("res://"): + timeline = load((timeline as String)) + else: + timeline = DialogicResourceUtil.get_timeline_resource((timeline as String)) + + if timeline == null: + printerr("[Dialogic] There was an error loading this timeline. Check the filename, and the timeline for errors") + return + + (timeline as DialogicTimeline).process() + + current_timeline = timeline + current_timeline_events = current_timeline.events + for event in current_timeline_events: + event.dialogic = self + current_event_idx = -1 + + if typeof(label_or_idx) == TYPE_STRING: + if label_or_idx: + if has_subsystem('Jump'): + Jump.jump_to_label((label_or_idx as String)) + elif typeof(label_or_idx) == TYPE_INT: + if label_or_idx >-1: + current_event_idx = label_or_idx -1 + + timeline_started.emit() + handle_next_event() + + +## Preloader function, prepares a timeline and returns an object to hold for later +## [param timeline_resource] can be either a path (string) or a loaded timeline (resource) +func preload_timeline(timeline_resource:Variant) -> Variant: + # I think ideally this should be on a new thread, will test + if typeof(timeline_resource) == TYPE_STRING: + timeline_resource = load((timeline_resource as String)) + if timeline_resource == null: + printerr("[Dialogic] There was an error preloading this timeline. Check the filename, and the timeline for errors") + return null + + (timeline_resource as DialogicTimeline).process() + + return timeline_resource + + +## Clears and stops the current timeline. +func end_timeline() -> void: + await clear(ClearFlags.TIMELINE_INFO_ONLY) + _on_timeline_ended() + timeline_ended.emit() + + +## Handles the next event. +func handle_next_event(_ignore_argument: Variant = "") -> void: + handle_event(current_event_idx+1) + + +## Handles the event at the given index [param event_index]. +## You can call this manually, but if another event is still executing, it might have unexpected results. +func handle_event(event_index:int) -> void: + if not current_timeline: + return + + _cleanup_previous_event() + + if paused: + await dialogic_resumed + + if event_index >= len(current_timeline_events): + end_timeline() + return + + #actually process the event now, since we didnt earlier at runtime + #this needs to happen before we create the copy DialogicEvent variable, so it doesn't throw an error if not ready + if current_timeline_events[event_index].event_node_ready == false: + current_timeline_events[event_index]._load_from_string(current_timeline_events[event_index].event_node_as_text) + + current_event_idx = event_index + + if not current_timeline_events[event_index].event_finished.is_connected(handle_next_event): + current_timeline_events[event_index].event_finished.connect(handle_next_event) + + set_meta('previous_event', current_timeline_events[event_index]) + + current_timeline_events[event_index].execute(self) + event_handled.emit(current_timeline_events[event_index]) + + +## Resets Dialogic's state fully or partially. +## By using the clear flags from the [member ClearFlags] enum you can specify +## what info should be kept. +## For example, at timeline end usually it doesn't clear node or subsystem info. +func clear(clear_flags := ClearFlags.FULL_CLEAR) -> void: + _cleanup_previous_event() + + if !clear_flags & ClearFlags.TIMELINE_INFO_ONLY: + for subsystem in get_children(): + if subsystem is DialogicSubsystem: + (subsystem as DialogicSubsystem).clear_game_state(clear_flags) + + var timeline := current_timeline + + current_timeline = null + current_event_idx = -1 + current_timeline_events = [] + current_state = States.IDLE + + # Resetting variables + if timeline: + await timeline.clean() + + +## Cleanup after previous event (if any). +func _cleanup_previous_event(): + if has_meta('previous_event') and get_meta('previous_event') is DialogicEvent: + var event := get_meta('previous_event') as DialogicEvent + if event.event_finished.is_connected(handle_next_event): + event.event_finished.disconnect(handle_next_event) + event._clear_state() + remove_meta("previous_event") + +#endregion + + +#region SAVING & LOADING +################################################################################ + +## Returns a dictionary containing all necessary information to later recreate the same state with load_full_state. +## The [subsystem Save] subsystem might be more useful for you. +## However, this can be used to integrate the info into your own save system. +func get_full_state() -> Dictionary: + if current_timeline: + current_state_info['current_event_idx'] = current_event_idx + current_state_info['current_timeline'] = current_timeline.resource_path + else: + current_state_info['current_event_idx'] = -1 + current_state_info['current_timeline'] = null + + for subsystem in get_children(): + (subsystem as DialogicSubsystem).save_game_state() + + return current_state_info.duplicate(true) + + +## This method tries to load the state from the given [param state_info]. +## Will automatically start a timeline and add a layout if a timeline was running when +## the dictionary was retrieved with [method get_full_state]. +func load_full_state(state_info:Dictionary) -> void: + clear() + current_state_info = state_info + ## The Style subsystem needs to run first for others to load correctly. + var scene: Node = null + if has_subsystem('Styles'): + get_subsystem('Styles').load_game_state() + scene = self.Styles.get_layout_node() + + var load_subsystems := func() -> void: + for subsystem in get_children(): + if subsystem.name == 'Styles': + continue + (subsystem as DialogicSubsystem).load_game_state() + + if null != scene and not scene.is_node_ready(): + scene.ready.connect(load_subsystems) + else: + await get_tree().process_frame + load_subsystems.call() + + if current_state_info.get('current_timeline', null): + start_timeline(current_state_info.current_timeline, current_state_info.get('current_event_idx', 0)) + else: + end_timeline.call_deferred() +#endregion + + +#region SUB-SYTSEMS +################################################################################ + +func _collect_subsystems() -> void: + var subsystem_nodes := [] as Array[DialogicSubsystem] + for indexer in DialogicUtil.get_indexers(): + for subsystem in indexer._get_subsystems(): + var subsystem_node := add_subsystem(str(subsystem.name), str(subsystem.script)) + subsystem_nodes.push_back(subsystem_node) + + for subsystem in subsystem_nodes: + subsystem.post_install() + + +## Returns `true` if a subystem with the given [param subsystem_name] exists. +func has_subsystem(subsystem_name:String) -> bool: + return has_node(subsystem_name) + + +## Returns the subsystem node of the given [param subsystem_name] or null if it doesn't exist. +func get_subsystem(subsystem_name:String) -> DialogicSubsystem: + return get_node(subsystem_name) + + +## Adds a subsystem node with the given [param subsystem_name] and [param script_path]. +func add_subsystem(subsystem_name:String, script_path:String) -> DialogicSubsystem: + var node: Node = Node.new() + node.name = subsystem_name + node.set_script(load(script_path)) + node = node as DialogicSubsystem + node.dialogic = self + add_child(node) + return node + + +#endregion + + +#region HELPERS +################################################################################ + +## This handles the `Layout End Behaviour` setting that can be changed in the Dialogic settings. +func _on_timeline_ended() -> void: + if self.Styles.has_active_layout_node() and self.Styles.get_layout_node().is_inside_tree(): + match ProjectSettings.get_setting('dialogic/layout/end_behaviour', 0): + 0: + self.Styles.get_layout_node().get_parent().remove_child(self.Styles.get_layout_node()) + self.Styles.get_layout_node().queue_free() + 1: + @warning_ignore("unsafe_method_access") + self.Styles.get_layout_node().hide() + + +func print_debug_moment() -> void: + if not current_timeline: + return + + printerr("\tAt event ", current_event_idx+1, " (",current_timeline_events[current_event_idx].event_name, ' Event) in timeline "', DialogicResourceUtil.get_unique_identifier(current_timeline.resource_path), '" (',current_timeline.resource_path,').') + print("\n") +#endregion diff --git a/addons/dialogic-main/addons/dialogic/Core/DialogicResourceUtil.gd b/addons/dialogic-main/addons/dialogic/Core/DialogicResourceUtil.gd new file mode 100644 index 0000000..a86356c --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Core/DialogicResourceUtil.gd @@ -0,0 +1,291 @@ +@tool +class_name DialogicResourceUtil + +static var label_cache := {} +static var event_cache: Array[DialogicEvent] = [] + +static var special_resources := {} + + +static func update() -> void: + update_directory('.dch') + update_directory('.dtl') + update_label_cache() + + +#region RESOURCE DIRECTORIES +################################################################################ + +static func get_directory(extension:String) -> Dictionary: + extension = extension.trim_prefix('.') + if Engine.has_meta(extension+'_directory'): + return Engine.get_meta(extension+'_directory', {}) + + var directory: Dictionary = ProjectSettings.get_setting("dialogic/directories/"+extension+'_directory', {}) + Engine.set_meta(extension+'_directory', directory) + return directory + + +static func set_directory(extension:String, directory:Dictionary) -> void: + extension = extension.trim_prefix('.') + if Engine.is_editor_hint(): + ProjectSettings.set_setting("dialogic/directories/"+extension+'_directory', directory) + ProjectSettings.save() + Engine.set_meta(extension+'_directory', directory) + + +static func update_directory(extension:String) -> void: + var directory := get_directory(extension) + + for resource in list_resources_of_type(extension): + if not resource in directory.values(): + directory = add_resource_to_directory(resource, directory) + + var keys_to_remove := [] + for key in directory: + if not ResourceLoader.exists(directory[key]): + keys_to_remove.append(key) + for key in keys_to_remove: + directory.erase(key) + + set_directory(extension, directory) + + +static func add_resource_to_directory(file_path:String, directory:Dictionary) -> Dictionary: + var suggested_name := file_path.get_file().trim_suffix("."+file_path.get_extension()) + while suggested_name in directory: + suggested_name = file_path.trim_suffix("/"+suggested_name+"."+file_path.get_extension()).get_file().path_join(suggested_name) + directory[suggested_name] = file_path + return directory + + +## Returns the unique identifier for the given resource path. +## Returns an empty string if no identifier was found. +static func get_unique_identifier(file_path:String) -> String: + var identifier: String = get_directory(file_path.get_extension()).find_key(file_path) + if typeof(identifier) == TYPE_STRING: + return identifier + return "" + + +## Returns the resource associated with the given unique identifier. +## The expected extension is needed to use the right directory. +static func get_resource_from_identifier(identifier:String, extension:String) -> Resource: + var path: String = get_directory(extension).get(identifier, '') + if ResourceLoader.exists(path): + return load(path) + return null + + +static func change_unique_identifier(file_path:String, new_identifier:String) -> void: + var directory := get_directory(file_path.get_extension()) + var key: String = directory.find_key(file_path) + while key != null: + if key == new_identifier: + break + directory.erase(key) + directory[new_identifier] = file_path + key = directory.find_key(file_path) + set_directory(file_path.get_extension(), directory) + + +static func change_resource_path(old_path:String, new_path:String) -> void: + var directory := get_directory(new_path.get_extension()) + var key: String = directory.find_key(old_path) + while key != null: + directory[key] = new_path + key = directory.find_key(old_path) + set_directory(new_path.get_extension(), directory) + + +static func remove_resource(file_path:String) -> void: + var directory := get_directory(file_path.get_extension()) + var key: String = directory.find_key(file_path) + while key != null: + directory.erase(key) + key = directory.find_key(file_path) + set_directory(file_path.get_extension(), directory) + + +static func is_identifier_unused(extension:String, identifier:String) -> bool: + return not identifier in get_directory(extension) + +#endregion + +#region LABEL CACHE +################################################################################ +# The label cache is only for the editor so we don't have to scan all timelines +# whenever we want to suggest labels. This has no use in game and is not always perfect. + +static func get_label_cache() -> Dictionary: + if not label_cache.is_empty(): + return label_cache + + label_cache = DialogicUtil.get_editor_setting('label_ref', {}) + return label_cache + + +static func set_label_cache(cache:Dictionary) -> void: + label_cache = cache + + +static func update_label_cache() -> void: + var cache := get_label_cache() + var timelines := get_timeline_directory().values() + for timeline in cache: + if !timeline in timelines: + cache.erase(timeline) + set_label_cache(cache) + +#endregion + +#region EVENT CACHE +################################################################################ + +## Dialogic keeps a list that has each event once. This allows retrieval of that list. +static func get_event_cache() -> Array: + if not event_cache.is_empty(): + return event_cache + + event_cache = update_event_cache() + return event_cache + + +static func update_event_cache() -> Array: + event_cache = [] + for indexer in DialogicUtil.get_indexers(): + # build event cache + for event in indexer._get_events(): + if not ResourceLoader.exists(event): + continue + if not 'event_end_branch.gd' in event and not 'event_text.gd' in event: + event_cache.append(load(event).new()) + + # Events are checked in order while testing them. EndBranch needs to be first, Text needs to be last + event_cache.push_front(DialogicEndBranchEvent.new()) + event_cache.push_back(DialogicTextEvent.new()) + + return event_cache + +#endregion + +#region SPECIAL RESOURCES +################################################################################ + +static func update_special_resources() -> void: + special_resources.clear() + for indexer in DialogicUtil.get_indexers(): + var additions := indexer._get_special_resources() + for resource_type in additions: + if not resource_type in special_resources: + special_resources[resource_type] = {} + special_resources[resource_type].merge(additions[resource_type]) + + +static func list_special_resources(type:String, filter := {}) -> Dictionary: + if special_resources.is_empty(): + update_special_resources() + if type in special_resources: + if filter.is_empty(): + return special_resources[type] + else: + var results := {} + for i in special_resources[type]: + if match_resource_filter(special_resources[type][i], filter): + results[i] = special_resources[type][i] + return results + return {} + + +static func match_resource_filter(dict:Dictionary, filter:Dictionary) -> bool: + for i in filter: + if not i in dict: + return false + if typeof(filter[i]) == TYPE_ARRAY: + if not dict[i] in filter[i]: + return false + else: + if not dict[i] == filter[i]: + return false + return true + + +static func guess_special_resource(type: String, string: String, default := {}, filter := {}, ignores:PackedStringArray=[]) -> Dictionary: + if string.is_empty(): + return default + + if special_resources.is_empty(): + update_special_resources() + var resources := list_special_resources(type, filter) + if resources.is_empty(): + printerr("[Dialogic] No ", type, "s found, but attempted to use one.") + return default + + if string.begins_with('res://'): + for i in resources.values(): + if i.path == string: + return i + printerr("[Dialogic] Unable to find ", type, " at path '", string, "'.") + return default + + string = string.to_lower() + + if string in resources: + return resources[string] + + if not ignores.is_empty(): + var regex := RegEx.create_from_string(r" ?\b(" + "|".join(ignores) + r")\b") + for name in resources: + if regex.sub(name, "") == regex.sub(string, ""): + return resources[name] + + ## As a last effort check against the unfiltered list + if string in special_resources[type]: + push_warning("[Dialogic] Using ", type, " '", string,"' when not supposed to.") + return special_resources[type][string] + + printerr("[Dialogic] Unable to identify ", type, " based on string '", string, "'.") + return default + +#endregion + +#region HELPERS +################################################################################ + +static func get_character_directory() -> Dictionary: + return get_directory('dch') + + +static func get_timeline_directory() -> Dictionary: + return get_directory('dtl') + + +static func get_timeline_resource(timeline_identifier:String) -> DialogicTimeline: + return get_resource_from_identifier(timeline_identifier, 'dtl') + + +static func get_character_resource(character_identifier:String) -> DialogicCharacter: + return get_resource_from_identifier(character_identifier, 'dch') + + +static func list_resources_of_type(extension:String) -> Array: + var all_resources := scan_folder('res://', extension) + return all_resources + + +static func scan_folder(path:String, extension:String) -> Array: + var list: Array = [] + if DirAccess.dir_exists_absolute(path): + var dir := DirAccess.open(path) + dir.list_dir_begin() + var file_name := dir.get_next() + while file_name != "": + if dir.current_is_dir() and not file_name.begins_with("."): + list += scan_folder(path.path_join(file_name), extension) + else: + if file_name.ends_with(extension): + list.append(path.path_join(file_name)) + file_name = dir.get_next() + return list + +#endregion diff --git a/addons/dialogic-main/addons/dialogic/Core/DialogicUtil.gd b/addons/dialogic-main/addons/dialogic/Core/DialogicUtil.gd new file mode 100644 index 0000000..1b8d6c1 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Core/DialogicUtil.gd @@ -0,0 +1,676 @@ +@tool +class_name DialogicUtil + +## Script that container helper methods for both editor and game execution. +## Used whenever the same thing is needed in different parts of the plugin. + +#region EDITOR + +## This method should be used instead of EditorInterface.get_editor_scale(), because if you use that +## it will run perfectly fine from the editor, but crash when the game is exported. +static func get_editor_scale() -> float: + return get_dialogic_plugin().get_editor_interface().get_editor_scale() + + +## Although this does in fact always return a EditorPlugin node, +## that class is apparently not present in export and referencing it here creates a crash. +static func get_dialogic_plugin() -> Node: + for child in Engine.get_main_loop().get_root().get_children(): + if child.get_class() == "EditorNode": + return child.get_node('DialogicPlugin') + return null + +#endregion + + +## Returns the autoload when in-game. +static func autoload() -> DialogicGameHandler: + if Engine.is_editor_hint(): + return null + if not Engine.get_main_loop().root.has_node("Dialogic"): + return null + return Engine.get_main_loop().root.get_node("Dialogic") + + +#region FILE SYSTEM +################################################################################ +static func listdir(path: String, files_only:= true, _throw_error:= true, full_file_path:= false, include_imports := false) -> Array: + var files: Array = [] + if path.is_empty(): path = "res://" + if DirAccess.dir_exists_absolute(path): + var dir := DirAccess.open(path) + dir.list_dir_begin() + var file_name := dir.get_next() + while file_name != "": + if not file_name.begins_with("."): + if files_only: + if not dir.current_is_dir() and (not file_name.ends_with('.import') or include_imports): + if full_file_path: + files.append(path.path_join(file_name)) + else: + files.append(file_name) + else: + if full_file_path: + files.append(path.path_join(file_name)) + else: + files.append(file_name) + file_name = dir.get_next() + dir.list_dir_end() + return files + + +static func get_module_path(name:String, builtin:=true) -> String: + if builtin: + return "res://addons/dialogic/Modules".path_join(name) + else: + return ProjectSettings.get_setting('dialogic/extensions_folder', 'res://addons/dialogic_additions').path_join(name) + + +## This is a private and editor-only function. +## +## Populates the [class DialogicGameHandler] with new custom subsystems by +## directly manipulating the file's content and then importing the file. +static func _update_autoload_subsystem_access() -> void: + if not Engine.is_editor_hint(): + printerr("[Dialogic] This function is only available in the editor.") + return + + var script: Script = load("res://addons/dialogic/Core/DialogicGameHandler.gd") + var new_subsystem_access_list := "#region SUBSYSTEMS\n" + + for indexer: DialogicIndexer in get_indexers(true, true): + + for subsystem: Dictionary in indexer._get_subsystems().duplicate(true): + new_subsystem_access_list += '\nvar {name} := preload("{script}").new():\n\tget: return get_subsystem("{name}")\n'.format(subsystem) + + new_subsystem_access_list += "\n#endregion" + script.source_code = RegEx.create_from_string(r"#region SUBSYSTEMS\n#*\n((?!#endregion)(.*\n))*#endregion").sub(script.source_code, new_subsystem_access_list) + ResourceSaver.save(script) + Engine.get_singleton("EditorInterface").get_resource_filesystem().reimport_files(["res://addons/dialogic/Core/DialogicGameHandler.gd"]) + + +static func get_indexers(include_custom := true, force_reload := false) -> Array[DialogicIndexer]: + if Engine.get_main_loop().has_meta('dialogic_indexers') and !force_reload: + return Engine.get_main_loop().get_meta('dialogic_indexers') + + var indexers: Array[DialogicIndexer] = [] + + for file in listdir(DialogicUtil.get_module_path(''), false): + var possible_script: String = DialogicUtil.get_module_path(file).path_join("index.gd") + if ResourceLoader.exists(possible_script): + indexers.append(load(possible_script).new()) + + if include_custom: + var extensions_folder: String = ProjectSettings.get_setting('dialogic/extensions_folder', "res://addons/dialogic_additions/") + for file in listdir(extensions_folder, false, false): + var possible_script: String = extensions_folder.path_join(file + "/index.gd") + if ResourceLoader.exists(possible_script): + indexers.append(load(possible_script).new()) + + Engine.get_main_loop().set_meta('dialogic_indexers', indexers) + return indexers + + + +## Turns a [param file_path] from `some_file.png` to `Some File`. +static func pretty_name(file_path: String) -> String: + var _name := file_path.get_file().trim_suffix("." + file_path.get_extension()) + _name = _name.replace('_', ' ') + _name = _name.capitalize() + + return _name + +#endregion + + +#region EDITOR SETTINGS & COLORS +################################################################################ + +static func set_editor_setting(setting:String, value:Variant) -> void: + var cfg := ConfigFile.new() + if FileAccess.file_exists('user://dialogic/editor_settings.cfg'): + cfg.load('user://dialogic/editor_settings.cfg') + + cfg.set_value('DES', setting, value) + + if !DirAccess.dir_exists_absolute('user://dialogic'): + DirAccess.make_dir_absolute('user://dialogic') + cfg.save('user://dialogic/editor_settings.cfg') + + +static func get_editor_setting(setting:String, default:Variant=null) -> Variant: + var cfg := ConfigFile.new() + if !FileAccess.file_exists('user://dialogic/editor_settings.cfg'): + return default + + if !cfg.load('user://dialogic/editor_settings.cfg') == OK: + return default + + return cfg.get_value('DES', setting, default) + + +static func get_color_palette(default:bool = false) -> Dictionary: + var defaults := { + 'Color1': Color('#3b8bf2'), # Blue + 'Color2': Color('#00b15f'), # Green + 'Color3': Color('#e868e2'), # Pink + 'Color4': Color('#9468e8'), # Purple + 'Color5': Color('#574fb0'), # DarkPurple + 'Color6': Color('#1fa3a3'), # Aquamarine + 'Color7': Color('#fa952a'), # Orange + 'Color8': Color('#de5c5c'), # Red + 'Color9': Color('#7c7c7c'), # Gray + } + if default: + return defaults + return get_editor_setting('color_palette', defaults) + + +static func get_color(value:String) -> Color: + var colors := get_color_palette() + return colors[value] + +#endregion + + +#region TIMER PROCESS MODE +################################################################################ +static func is_physics_timer() -> bool: + return ProjectSettings.get_setting('dialogic/timer/process_in_physics', false) + + +static func update_timer_process_callback(timer:Timer) -> void: + timer.process_callback = Timer.TIMER_PROCESS_PHYSICS if is_physics_timer() else Timer.TIMER_PROCESS_IDLE + +#endregion + + +#region MULTITWEEN +################################################################################ +static func multitween(tweened_value:Variant, item:Node, property:String, part:String) -> void: + var parts: Dictionary = item.get_meta(property+'_parts', {}) + parts[part] = tweened_value + + if not item.has_meta(property+'_base_value') and not 'base' in parts: + item.set_meta(property+'_base_value', item.get(property)) + + var final_value: Variant = parts.get('base', item.get_meta(property+'_base_value', item.get(property))) + + for key in parts: + if key == 'base': + continue + else: + final_value += parts[key] + + item.set(property, final_value) + item.set_meta(property+'_parts', parts) + +#endregion + + +#region TRANSLATIONS +################################################################################ + +static func get_next_translation_id() -> String: + ProjectSettings.set_setting('dialogic/translation/id_counter', ProjectSettings.get_setting('dialogic/translation/id_counter', 16)+1) + return '%x' % ProjectSettings.get_setting('dialogic/translation/id_counter', 16) + +#endregion + + +#region VARIABLES +################################################################################ + +enum VarTypes {ANY, STRING, FLOAT, INT, BOOL} + + +static func get_default_variables() -> Dictionary: + return ProjectSettings.get_setting('dialogic/variables', {}) + + +# helper that converts a nested variable dictionary into an array with paths +static func list_variables(dict:Dictionary, path := "", type:=VarTypes.ANY) -> Array: + var array := [] + for key in dict.keys(): + if typeof(dict[key]) == TYPE_DICTIONARY: + array.append_array(list_variables(dict[key], path+key+".", type)) + else: + if type == VarTypes.ANY or get_variable_value_type(dict[key]) == type: + array.append(path+key) + return array + + +static func get_variable_value_type(value:Variant) -> VarTypes: + match typeof(value): + TYPE_STRING: + return VarTypes.STRING + TYPE_FLOAT: + return VarTypes.FLOAT + TYPE_INT: + return VarTypes.INT + TYPE_BOOL: + return VarTypes.BOOL + return VarTypes.ANY + + +static func get_variable_type(path:String, dict:Dictionary={}) -> VarTypes: + if dict.is_empty(): + dict = get_default_variables() + return get_variable_value_type(_get_value_in_dictionary(path, dict)) + + +## This will set a value in a dictionary (or a sub-dictionary based on the path) +## e.g. it could set "Something.Something.Something" in {'Something':{'Something':{'Someting':"value"}}} +static func _set_value_in_dictionary(path:String, dictionary:Dictionary, value): + if '.' in path: + var from := path.split('.')[0] + if from in dictionary.keys(): + dictionary[from] = _set_value_in_dictionary(path.trim_prefix(from+"."), dictionary[from], value) + else: + if path in dictionary.keys(): + dictionary[path] = value + return dictionary + + +## This will get a value in a dictionary (or a sub-dictionary based on the path) +## e.g. it could get "Something.Something.Something" in {'Something':{'Something':{'Someting':"value"}}} +static func _get_value_in_dictionary(path:String, dictionary:Dictionary, default= null) -> Variant: + if '.' in path: + var from := path.split('.')[0] + if from in dictionary.keys(): + return _get_value_in_dictionary(path.trim_prefix(from+"."), dictionary[from], default) + else: + if path in dictionary.keys(): + return dictionary[path] + return default + +#endregion + + + +#region STYLES +################################################################################ + +static func get_default_layout_base() -> PackedScene: + return load(DialogicUtil.get_module_path('DefaultLayoutParts').path_join("Base_Default/default_layout_base.tscn")) + + +static func get_fallback_style() -> DialogicStyle: + return load(DialogicUtil.get_module_path('DefaultLayoutParts').path_join("Style_VN_Default/default_vn_style.tres")) + + +static func get_default_style() -> DialogicStyle: + var default: String = ProjectSettings.get_setting('dialogic/layout/default_style', '') + if !ResourceLoader.exists(default): + return get_fallback_style() + return load(default) + + +static func get_style_by_name(name:String) -> DialogicStyle: + if name.is_empty(): + return get_default_style() + + var styles: Array = ProjectSettings.get_setting('dialogic/layout/style_list', []) + for style in styles: + if not ResourceLoader.exists(style): + continue + if load(style).name == name: + return load(style) + + return get_default_style() +#endregion + + +#region SCENE EXPORT OVERRIDES +################################################################################ + +static func apply_scene_export_overrides(node:Node, export_overrides:Dictionary, apply := true) -> void: + var default_info := get_scene_export_defaults(node) + if !node.script: + return + var property_info: Array[Dictionary] = node.script.get_script_property_list() + for i in property_info: + if i['usage'] & PROPERTY_USAGE_EDITOR: + if i['name'] in export_overrides: + if str_to_var(export_overrides[i['name']]) == null and typeof(node.get(i['name'])) == TYPE_STRING: + node.set(i['name'], export_overrides[i['name']]) + else: + node.set(i['name'], str_to_var(export_overrides[i['name']])) + elif i['name'] in default_info: + node.set(i['name'], default_info.get(i['name'])) + if apply: + if node.has_method('apply_export_overrides'): + node.apply_export_overrides() + + +static func get_scene_export_defaults(node:Node) -> Dictionary: + if !node.script: + return {} + + if Engine.get_main_loop().has_meta('dialogic_scene_export_defaults') and \ + node.script.resource_path in Engine.get_main_loop().get_meta('dialogic_scene_export_defaults'): + return Engine.get_main_loop().get_meta('dialogic_scene_export_defaults')[node.script.resource_path] + + if !Engine.get_main_loop().has_meta('dialogic_scene_export_defaults'): + Engine.get_main_loop().set_meta('dialogic_scene_export_defaults', {}) + var defaults := {} + var property_info: Array[Dictionary] = node.script.get_script_property_list() + for i in property_info: + if i['usage'] & PROPERTY_USAGE_EDITOR: + defaults[i['name']] = node.get(i['name']) + Engine.get_main_loop().get_meta('dialogic_scene_export_defaults')[node.script.resource_path] = defaults + return defaults + +#endregion + +#region MAKE CUSTOM + +static func make_file_custom(original_file:String, target_folder:String, new_file_name := "", new_folder_name := "") -> String: + if not ResourceLoader.exists(original_file): + push_error("[Dialogic] Unable to make file with invalid path custom!") + return "" + + if new_folder_name: + target_folder = target_folder.path_join(new_folder_name) + DirAccess.make_dir_absolute(target_folder) + + if new_file_name.is_empty(): + new_file_name = "custom_" + original_file.get_file() + + if not new_file_name.ends_with(original_file.get_extension()): + new_file_name += "." + original_file.get_extension() + + var target_file := target_folder.path_join(new_file_name) + + customize_file(original_file, target_file) + + get_dialogic_plugin().get_editor_interface().get_resource_filesystem().scan_sources() + + return target_file + + +static func customize_file(original_file:String, target_file:String) -> String: + #print("\nCUSTOMIZE FILE") + #printt(original_file, "->", target_file) + + DirAccess.copy_absolute(original_file, target_file) + + var file := FileAccess.open(target_file, FileAccess.READ) + var file_text := file.get_as_text() + file.close() + + # If we are customizing a scene, we check for any resources used in that scene that are in the same folder. + # Those will be copied as well and the scene will be modified to point to them. + if file_text.begins_with('[gd_'): + var base_path: String = original_file.get_base_dir() + + var remove_uuid_regex := r'\[gd_.* (?uid="uid:[^"]*")' + var result := RegEx.create_from_string(remove_uuid_regex).search(file_text) + if result: + file_text = file_text.replace(result.get_string("uid"), "") + + # This regex also removes the UID referencing the original resource + var file_regex := r'(uid="[^"]*" )?\Qpath="'+base_path+r'\E(?[^"]*)"' + result = RegEx.create_from_string(file_regex).search(file_text) + while result: + var found_file_name := result.get_string('file') + var found_file_path := base_path.path_join(found_file_name) + var target_file_path := target_file.get_base_dir().path_join(found_file_name) + + # Files found in this file will ALSO be customized. + customize_file(found_file_path, target_file_path) + + file_text = file_text.replace(found_file_path, target_file_path) + + result = RegEx.create_from_string(file_regex).search(file_text) + + file = FileAccess.open(target_file, FileAccess.WRITE) + file.store_string(file_text) + file.close() + + return target_file + +#endregion + +#region INSPECTOR FIELDS +################################################################################ + +static func setup_script_property_edit_node(property_info: Dictionary, value:Variant, property_changed:Callable) -> Control: + var input: Control = null + match property_info['type']: + TYPE_BOOL: + input = CheckBox.new() + if value != null: + input.button_pressed = value + input.toggled.connect(DialogicUtil._on_export_bool_submitted.bind(property_info.name, property_changed)) + TYPE_COLOR: + input = ColorPickerButton.new() + if value != null: + input.color = value + input.color_changed.connect(DialogicUtil._on_export_color_submitted.bind(property_info.name, property_changed)) + input.custom_minimum_size.x = get_editor_scale() * 50 + TYPE_INT: + if property_info['hint'] & PROPERTY_HINT_ENUM: + input = OptionButton.new() + for x in property_info['hint_string'].split(','): + input.add_item(x.split(':')[0]) + if value != null: + input.select(value) + input.item_selected.connect(DialogicUtil._on_export_int_enum_submitted.bind(property_info.name, property_changed)) + else: + input = SpinBox.new() + input.value_changed.connect(DialogicUtil._on_export_number_submitted.bind(property_info.name, property_changed)) + if property_info.hint_string == 'int': + input.step = 1 + input.allow_greater = true + input.allow_lesser = true + elif ',' in property_info.hint_string: + input.min_value = int(property_info.hint_string.get_slice(',', 0)) + input.max_value = int(property_info.hint_string.get_slice(',', 1)) + if property_info.hint_string.count(',') > 1: + input.step = int(property_info.hint_string.get_slice(',', 2)) + if value != null: + input.value = value + TYPE_FLOAT: + input = SpinBox.new() + input.step = 0.01 + if ',' in property_info.hint_string: + input.min_value = float(property_info.hint_string.get_slice(',', 0)) + input.max_value = float(property_info.hint_string.get_slice(',', 1)) + if property_info.hint_string.count(',') > 1: + input.step = float(property_info.hint_string.get_slice(',', 2)) + input.value_changed.connect(DialogicUtil._on_export_number_submitted.bind(property_info.name, property_changed)) + if value != null: + input.value = value + TYPE_VECTOR2, TYPE_VECTOR3, TYPE_VECTOR4: + var vectorSize: String = type_string(typeof(value))[-1] + input = load("res://addons/dialogic/Editor/Events/Fields/field_vector" + vectorSize + ".tscn").instantiate() + input.property_name = property_info['name'] + input.set_value(value) + input.value_changed.connect(DialogicUtil._on_export_vector_submitted.bind(property_changed)) + TYPE_STRING: + if property_info['hint'] & PROPERTY_HINT_FILE or property_info['hint'] & PROPERTY_HINT_DIR: + input = load("res://addons/dialogic/Editor/Events/Fields/field_file.tscn").instantiate() + input.file_filter = property_info['hint_string'] + input.file_mode = FileDialog.FILE_MODE_OPEN_FILE + if property_info['hint'] == PROPERTY_HINT_DIR: + input.file_mode = FileDialog.FILE_MODE_OPEN_DIR + input.property_name = property_info['name'] + input.placeholder = "Default" + input.hide_reset = true + if value != null: + input.set_value(value) + input.value_changed.connect(DialogicUtil._on_export_file_submitted.bind(property_changed)) + elif property_info['hint'] & PROPERTY_HINT_ENUM: + input = OptionButton.new() + var options: PackedStringArray = [] + for x in property_info['hint_string'].split(','): + options.append(x.split(':')[0].strip_edges()) + input.add_item(options[-1]) + if value != null: + input.select(options.find(value)) + input.item_selected.connect(DialogicUtil._on_export_string_enum_submitted.bind(property_info.name, options, property_changed)) + else: + input = LineEdit.new() + if value != null: + input.text = value + input.text_submitted.connect(DialogicUtil._on_export_input_text_submitted.bind(property_info.name, property_changed)) + TYPE_DICTIONARY: + input = load("res://addons/dialogic/Editor/Events/Fields/field_dictionary.tscn").instantiate() + input.property_name = property_info["name"] + input.value_changed.connect(_on_export_dict_submitted.bind(property_changed)) + TYPE_OBJECT: + input = load("res://addons/dialogic/Editor/Common/hint_tooltip_icon.tscn").instantiate() + input.hint_text = "Objects/Resources as settings are currently not supported. \nUse @export_file('*.extension') instead and load the resource once needed." + + _: + input = LineEdit.new() + if value != null: + input.text = value + input.text_submitted.connect(_on_export_input_text_submitted.bind(property_info.name, property_changed)) + return input + + +static func _on_export_input_text_submitted(text:String, property_name:String, callable: Callable) -> void: + callable.call(property_name, var_to_str(text)) + +static func _on_export_bool_submitted(value:bool, property_name:String, callable: Callable) -> void: + callable.call(property_name, var_to_str(value)) + +static func _on_export_color_submitted(color:Color, property_name:String, callable: Callable) -> void: + callable.call(property_name, var_to_str(color)) + +static func _on_export_int_enum_submitted(item:int, property_name:String, callable: Callable) -> void: + callable.call(property_name, var_to_str(item)) + +static func _on_export_number_submitted(value:float, property_name:String, callable: Callable) -> void: + callable.call(property_name, var_to_str(value)) + +static func _on_export_file_submitted(property_name:String, value:String, callable: Callable) -> void: + callable.call(property_name, var_to_str(value)) + +static func _on_export_string_enum_submitted(value:int, property_name:String, list:PackedStringArray, callable: Callable): + callable.call(property_name, var_to_str(list[value])) + +static func _on_export_vector_submitted(property_name:String, value:Variant, callable: Callable) -> void: + callable.call(property_name, var_to_str(value)) + +static func _on_export_dict_submitted(property_name:String, value:Variant, callable: Callable) -> void: + callable.call(property_name, var_to_str(value)) + +#endregion + + +#region EVENT DEFAULTS +################################################################################ + +static func get_custom_event_defaults(event_name:String) -> Dictionary: + if Engine.is_editor_hint(): + return ProjectSettings.get_setting('dialogic/event_default_overrides', {}).get(event_name, {}) + else: + if !Engine.get_main_loop().has_meta('dialogic_event_defaults'): + Engine.get_main_loop().set_meta('dialogic_event_defaults', ProjectSettings.get_setting('dialogic/event_default_overrides', {})) + return Engine.get_main_loop().get_meta('dialogic_event_defaults').get(event_name, {}) + +#endregion + + +#region CONVERSION +################################################################################ + +static func str_to_bool(boolstring:String) -> bool: + return true if boolstring == "true" else false + + +static func logical_convert(value:Variant) -> Variant: + if typeof(value) == TYPE_STRING: + if value.is_valid_int(): + return value.to_int() + if value.is_valid_float(): + return value.to_float() + if value == 'true': + return true + if value == 'false': + return false + return value + + +## Takes [param source] and builds a dictionary of keys only. +## The values are `null`. +static func str_to_hash_set(source: String) -> Dictionary: + var dictionary := Dictionary() + + for character in source: + dictionary[character] = null + + return dictionary + +#endregion + + +static func get_character_suggestions(_search_text:String, current_value:DialogicCharacter = null, allow_none := true, allow_all:= false, editor_node:Node = null) -> Dictionary: + var suggestions := {} + + var icon := load("res://addons/dialogic/Editor/Images/Resources/character.svg") + + if allow_none and current_value: + suggestions['(No one)'] = {'value':'', 'editor_icon':["GuiRadioUnchecked", "EditorIcons"]} + + if allow_all: + suggestions['ALL'] = {'value':'--All--', 'tooltip':'All currently joined characters leave', 'editor_icon':["GuiEllipsis", "EditorIcons"]} + + # Get characters in the current timeline and place them at the top of suggestions. + if editor_node: + var recent_characters := [] + var timeline_node := editor_node.get_parent().find_parent("Timeline") as DialogicEditor + for event_node in timeline_node.find_child("Timeline").get_children(): + if event_node == editor_node: + break + if event_node.resource is DialogicCharacterEvent or event_node.resource is DialogicTextEvent: + recent_characters.append(event_node.resource.character) + + recent_characters.reverse() + for character in recent_characters: + if character and not character.get_character_name() in suggestions: + suggestions[character.get_character_name()] = {'value': character.get_character_name(), 'tooltip': character.resource_path, 'icon': icon.duplicate()} + + var character_directory := DialogicResourceUtil.get_character_directory() + for resource in character_directory.keys(): + suggestions[resource] = {'value': resource, 'tooltip': character_directory[resource], 'icon': icon} + + return suggestions + + +static func get_portrait_suggestions(search_text:String, character:DialogicCharacter, allow_empty := false, empty_text := "Don't Change") -> Dictionary: + var icon := load("res://addons/dialogic/Editor/Images/Resources/portrait.svg") + var suggestions := {} + + if allow_empty: + suggestions[empty_text] = {'value':'', 'editor_icon':["GuiRadioUnchecked", "EditorIcons"]} + + if "{" in search_text: + suggestions[search_text] = {'value':search_text, 'editor_icon':["Variant", "EditorIcons"]} + + if character != null: + for portrait in character.portraits: + suggestions[portrait] = {'value':portrait, 'icon':icon} + + return suggestions + + +static func get_portrait_position_suggestions(search_text := "") -> Dictionary: + var icon := load(DialogicUtil.get_module_path("Character").path_join('portrait_position.svg')) + + var setting: String = ProjectSettings.get_setting('dialogic/portraits/position_suggestion_names', 'leftmost, left, center, right, rightmost') + + var suggestions := {} + + if not search_text.is_empty(): + suggestions[search_text] = {'value':search_text.strip_edges(), 'editor_icon':["GuiScrollArrowRight", "EditorIcons"]} + + for position_id in setting.split(','): + suggestions[position_id.strip_edges()] = {'value':position_id.strip_edges(), 'icon':icon} + if not search_text.is_empty() and position_id.strip_edges().begins_with(search_text): + suggestions.erase(search_text) + + return suggestions diff --git a/addons/dialogic-main/addons/dialogic/Core/Dialogic_Subsystem.gd b/addons/dialogic-main/addons/dialogic/Core/Dialogic_Subsystem.gd new file mode 100644 index 0000000..3ff55e6 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Core/Dialogic_Subsystem.gd @@ -0,0 +1,41 @@ +class_name DialogicSubsystem +extends Node + +var dialogic: DialogicGameHandler = null + +enum LoadFlags {FULL_LOAD, ONLY_DNODES} + +# To be overriden by sub-classes +# Called once after every subsystem has been added to the tree +func post_install() -> void: + pass + + +# To be overriden by sub-classes +# Fill in everything that should be cleared (for example before loading a different state) +func clear_game_state(_clear_flag:=DialogicGameHandler.ClearFlags.FULL_CLEAR) -> void: + pass + + +# To be overriden by sub-classes +# Fill in everything that should be loaded using the dialogic_game_handler.current_state_info +# This is called when a save is loaded +func load_game_state(_load_flag:=LoadFlags.FULL_LOAD) -> void: + pass + + +# To be overriden by sub-classes +# Fill in everything that should be saved into the dialogic_game_handler.current_state_info +# This is called when a save is saved +func save_game_state() -> void: + pass + + +# To be overriden by sub-classes +func pause() -> void: + pass + + +# To be overriden by sub-classes +func resume() -> void: + pass diff --git a/addons/dialogic-main/addons/dialogic/Core/index_class.gd b/addons/dialogic-main/addons/dialogic/Core/index_class.gd new file mode 100644 index 0000000..30c8fa0 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Core/index_class.gd @@ -0,0 +1,152 @@ +@tool +class_name DialogicIndexer +extends RefCounted + +## Script that indexes events, subsystems, settings pages and more. [br] +## Place a script of this type in every folder in "addons/Events". [br] +## Overwrite the methods to return the contents of that folder. + + +var this_folder: String = get_script().resource_path.get_base_dir() + +## Overwrite if this module contains any events. [br] +## Return an array with all the paths to the event scripts.[br] +## You can use the [property this_folder].path_join('my_event.gd') +func _get_events() -> Array: + if ResourceLoader.exists(this_folder.path_join('event.gd')): + return [this_folder.path_join('event.gd')] + return [] + + +## Overwrite if this module contains any subsystems. +## Should return an array of dictionaries each with the following keys: [br] +## "name" -> name for this subsystem[br] +## "script" -> array of preview images[br] +func _get_subsystems() -> Array[Dictionary]: + return [] + + +func _get_editors() -> Array[String]: + return [] + + +func _get_settings_pages() -> Array: + return [] + + +func _get_character_editor_sections() -> Array: + return [] + + +#region TEXT EFFECTS & MODIFIERS + +## Should return array of dictionaries with the following keys:[br] +## "command" -> the text e.g. "speed"[br] +## "node_path" or "subsystem" -> whichever contains your effect method[br] +## "method" -> name of the effect method[br] +func _get_text_effects() -> Array[Dictionary]: + return [] + + +## Should return array of dictionaries with the same arguments as _get_text_effects() +func _get_text_modifiers() -> Array[Dictionary]: + return [] + +#endregion + + +## Return a list of resources, scripts, etc. +## These can later be retrieved with DialogicResourceUtil. +## Each dictionary should contain (at least "type" and "path"). +## E.g. {"type":"Animation", "path": "res://..."} +func _get_special_resources() -> Dictionary: + return {} + + +## Return a list of dictionaries, each +func _get_portrait_scene_presets() -> Array[Dictionary]: + return [] + + +#region HELPERS +################################################################################ + +func list_dir(subdir:='') -> Array: + return Array(DirAccess.get_files_at(this_folder.path_join(subdir))).map(func(file):return this_folder.path_join(subdir).path_join(file)) + + +func list_special_resources(subdir:='', extension:="") -> Dictionary: + var dict := {} + for i in list_dir(subdir): + if extension.is_empty() or i.ends_with(extension): + dict[DialogicUtil.pretty_name(i).to_lower()] = {"path":i} + return dict + + +func list_animations(subdir := "") -> Dictionary: + var full_animation_list := {} + for path in list_dir(subdir): + if not path.ends_with(".gd") and not path.ends_with(".gdc"): + continue + var anim_object: DialogicAnimation = load(path).new() + var versions := anim_object._get_named_variations() + for version_name in versions: + full_animation_list[version_name] = versions[version_name] + full_animation_list[version_name]["path"] = path + anim_object.queue_free() + return full_animation_list + +#endregion + + +#region STYLES & LAYOUTS +################################################################################ + +func _get_style_presets() -> Array[Dictionary]: + return [] + + +## Should return an array of dictionaries with the following keys:[br] +## "path" -> the path to the scene[br] +## "name" -> name for this layout[br] +## "description"-> description of this layout. list what features/events are supported[br] +## "preview_image"-> array of preview images[br] +func _get_layout_parts() -> Array[Dictionary]: + return [] + + +## Helper that allows scanning sub directories that might be layout parts or styles +func scan_for_layout_parts() -> Array[Dictionary]: + var dir := DirAccess.open(this_folder) + var style_list: Array[Dictionary] = [] + if !dir: + return style_list + dir.list_dir_begin() + var dir_name := dir.get_next() + while dir_name != "": + if !dir.current_is_dir() or !dir.file_exists(dir_name.path_join('part_config.cfg')): + dir_name = dir.get_next() + continue + var config := ConfigFile.new() + config.load(this_folder.path_join(dir_name).path_join('part_config.cfg')) + var default_image_path: String = this_folder.path_join(dir_name).path_join('preview.png') + style_list.append( + { + 'type': config.get_value('style', 'type', 'Unknown type'), + 'name': config.get_value('style', 'name', 'Unnamed Layout'), + 'path': this_folder.path_join(dir_name).path_join(config.get_value('style', 'scene', '')), + 'author': config.get_value('style', 'author', 'Anonymous'), + 'description': config.get_value('style', 'description', 'No description'), + 'preview_image': [config.get_value('style', 'image', default_image_path)], + 'style_path':config.get_value('style', 'style_path', ''), + 'icon':this_folder.path_join(dir_name).path_join(config.get_value('style', 'icon', '')), + }) + + if not style_list[-1].style_path.begins_with('res://'): + style_list[-1].style_path = this_folder.path_join(dir_name).path_join(style_list[-1].style_path) + + dir_name = dir.get_next() + + return style_list + +#endregion diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_exports.gd b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_exports.gd new file mode 100644 index 0000000..9ad94cb --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_exports.gd @@ -0,0 +1,91 @@ +@tool +extends DialogicCharacterEditorPortraitSection + +## Section that allows setting values of exported scene variables +## for custom portrait scenes + +var current_portrait_data := {} +var last_scene := "" + +func _get_title() -> String: + return "Settings" + + +func _load_portrait_data(data:Dictionary) -> void: + _recheck(data, true) + + +## Recheck section visibility and reload export fields. +## This allows reacting to changes of the portrait_scene setting. +func _recheck(data: Dictionary, force:=false): + if last_scene == data.get("scene", "") and not force: + current_portrait_data = data + last_scene = data.get("scene", "") + return + + last_scene = data.get("scene", "") + current_portrait_data = data + + for child in $Grid.get_children(): + child.get_parent().remove_child(child) + child.queue_free() + + var scene: Variant = null + + if current_portrait_data.get('scene', '').is_empty(): + if ProjectSettings.get_setting('dialogic/portraits/default_portrait', '').is_empty(): + scene = load(character_editor.def_portrait_path) + else: + scene = load(ProjectSettings.get_setting('dialogic/portraits/default_portrait', '')) + else: + scene = load(current_portrait_data.get('scene')) + + if not scene: + return + + scene = scene.instantiate() + + var skip := false + for i in scene.script.get_script_property_list(): + if i['usage'] & PROPERTY_USAGE_EDITOR and !skip: + var label := Label.new() + label.text = i['name'].capitalize() + $Grid.add_child(label) + + var current_value: Variant = scene.get(i['name']) + if current_portrait_data.has('export_overrides') and current_portrait_data['export_overrides'].has(i['name']): + current_value = str_to_var(current_portrait_data.export_overrides[i['name']]) + if current_value == null and typeof(scene.get(i['name'])) == TYPE_STRING: + current_value = current_portrait_data['export_overrides'][i['name']] + + var input: Node = DialogicUtil.setup_script_property_edit_node(i, current_value, set_export_override) + input.size_flags_horizontal = SIZE_EXPAND_FILL + $Grid.add_child(input) + + if i['usage'] & PROPERTY_USAGE_GROUP: + if i['name'] == 'Main' or i["name"] == "Private": + skip = true + continue + else: + skip = false + + if $Grid.get_child_count(): + get_parent().get_child(get_index()-1).show() + show() + else: + hide() + get_parent().get_child(get_index()-1).hide() + get_parent().get_child(get_index()+1).hide() + + +## On any change, save the export override to the portrait items metadata. +func set_export_override(property_name:String, value:String = "") -> void: + var data: Dictionary = selected_item.get_metadata(0) + if !data.has('export_overrides'): + data['export_overrides'] = {} + if !value.is_empty(): + data.export_overrides[property_name] = value + else: + data.export_overrides.erase(property_name) + changed.emit() + update_preview.emit() diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_exports.tscn b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_exports.tscn new file mode 100644 index 0000000..1392a18 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_exports.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=2 format=3 uid="uid://cfcs7lb6gqnmd"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/CharacterEditor/char_edit_p_section_exports.gd" id="1_isys8"] + +[node name="Settings" type="VBoxContainer"] +custom_minimum_size = Vector2(0, 35) +offset_right = 367.0 +offset_bottom = 82.0 +script = ExtResource("1_isys8") + +[node name="Grid" type="GridContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/h_separation = 10 +columns = 2 diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_layout.gd b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_layout.gd new file mode 100644 index 0000000..03f4346 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_layout.gd @@ -0,0 +1,44 @@ +@tool +extends DialogicCharacterEditorPortraitSection + +## Tab that allows setting size, offset and mirror of a portrait. + + +func _get_title() -> String: + return "Scale, Offset & Mirror" + + +func _load_portrait_data(data:Dictionary) -> void: + %IgnoreScale.set_pressed_no_signal(data.get('ignore_char_scale', false)) + %PortraitScale.value = data.get('scale', 1.0)*100 + %PortraitOffset.set_value(data.get('offset', Vector2())) + %PortraitOffset._load_display_info({'step':1}) + %PortraitMirror.set_pressed_no_signal(data.get('mirror', false)) + + +func _on_portrait_scale_value_changed(value:float) -> void: + var data: Dictionary = selected_item.get_metadata(0) + data['scale'] = value/100.0 + update_preview.emit() + changed.emit() + + +func _on_portrait_mirror_toggled(button_pressed:bool)-> void: + var data: Dictionary = selected_item.get_metadata(0) + data['mirror'] = button_pressed + update_preview.emit() + changed.emit() + + +func _on_ignore_scale_toggled(button_pressed:bool) -> void: + var data: Dictionary = selected_item.get_metadata(0) + data['ignore_char_scale'] = button_pressed + update_preview.emit() + changed.emit() + + +func _on_portrait_offset_value_changed(property:String, value:Vector2) -> void: + var data: Dictionary = selected_item.get_metadata(0) + data['offset'] = value + update_preview.emit() + changed.emit() diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_layout.tscn b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_layout.tscn new file mode 100644 index 0000000..9fa25c2 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_layout.tscn @@ -0,0 +1,64 @@ +[gd_scene load_steps=3 format=3 uid="uid://crke8suvv52c6"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/CharacterEditor/char_edit_p_section_layout.gd" id="1_76vf2"] +[ext_resource type="PackedScene" uid="uid://dtimnsj014cu" path="res://addons/dialogic/Editor/Events/Fields/field_vector2.tscn" id="2_c8kyi"] + +[node name="Layout" type="HFlowContainer"] +offset_right = 428.0 +offset_bottom = 128.0 +size_flags_horizontal = 3 +script = ExtResource("1_76vf2") + +[node name="Label3" type="Label" parent="."] +layout_mode = 2 +text = "Ignore Main Scale: " + +[node name="IgnoreScale" type="CheckBox" parent="."] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "This portrait will ignore the main scale." + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Label" type="Label" parent="HBoxContainer"] +layout_mode = 2 +text = "Scale:" + +[node name="PortraitScale" type="SpinBox" parent="HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "A scale to be applied on top of the main scale +(unless ignore main scale is pressed)." +value = 100.0 +allow_greater = true +suffix = "%" + +[node name="HBoxContainer2" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Label2" type="Label" parent="HBoxContainer2"] +layout_mode = 2 +text = "Offset:" + +[node name="PortraitOffset" parent="HBoxContainer2" instance=ExtResource("2_c8kyi")] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Offset that is applied on top of the main portrait offset." + +[node name="MirrorOption" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Label" type="Label" parent="MirrorOption"] +layout_mode = 2 +text = "Mirror:" + +[node name="PortraitMirror" type="CheckBox" parent="MirrorOption"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Mirroring that is applied on top of the main portrait mirror." + +[connection signal="toggled" from="IgnoreScale" to="." method="_on_ignore_scale_toggled"] +[connection signal="value_changed" from="HBoxContainer/PortraitScale" to="." method="_on_portrait_scale_value_changed"] +[connection signal="value_changed" from="HBoxContainer2/PortraitOffset" to="." method="_on_portrait_offset_value_changed"] +[connection signal="toggled" from="MirrorOption/PortraitMirror" to="." method="_on_portrait_mirror_toggled"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main.gd b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main.gd new file mode 100644 index 0000000..80a96c8 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main.gd @@ -0,0 +1,101 @@ +@tool +extends DialogicCharacterEditorPortraitSection + +## Tab that allows setting a custom scene for a portrait. + +func _get_title() -> String: + return "Scene" + +func _init() -> void: + hint_text = "You can use a custom scene for this portrait." + +func _start_opened() -> bool: + return true + +func _ready() -> void: + %ChangeSceneButton.icon = get_theme_icon("Loop", "EditorIcons") + %ScenePicker.file_filter = "*.tscn, *.scn; Scenes" + %ScenePicker.resource_icon = get_theme_icon('PackedScene', 'EditorIcons') + %ScenePicker.placeholder = 'Default scene' + + %OpenSceneButton.icon = get_theme_icon("ExternalLink", "EditorIcons") + + +func _load_portrait_data(data:Dictionary) -> void: + reload_ui(data) + + +func _on_open_scene_button_pressed() -> void: + var data: Dictionary = selected_item.get_metadata(0) + if ResourceLoader.exists(data.get("scene", "")): + DialogicUtil.get_dialogic_plugin().get_editor_interface().open_scene_from_path(data.get("scene", "")) + await get_tree().process_frame + EditorInterface.set_main_screen_editor("2D") + + +func _on_change_scene_button_pressed() -> void: + %PortraitSceneBrowserWindow.popup_centered_ratio(0.6) + + +func _on_portrait_scene_browser_activate_part(part_info: Dictionary) -> void: + %PortraitSceneBrowserWindow.hide() + match part_info.type: + "General": + set_scene_path(part_info.path) + "Preset": + find_parent("EditorView").godot_file_dialog( + create_new_portrait_scene.bind(part_info), + '*.tscn,*.scn', + EditorFileDialog.FILE_MODE_SAVE_FILE, + "Select where to save the new scene", + part_info.path.get_file().trim_suffix("."+part_info.path.get_extension())+"_"+character_editor.current_resource.get_character_name().to_lower()) + "Custom": + find_parent("EditorView").godot_file_dialog( + set_scene_path, + '*.tscn, *.scn', + EditorFileDialog.FILE_MODE_OPEN_FILE, + "Select custom portrait scene",) + "Default": + set_scene_path("") + + +func create_new_portrait_scene(target_file: String, info: Dictionary) -> void: + var path := make_portrait_preset_custom(target_file, info) + set_scene_path(path) + + +func make_portrait_preset_custom(target_file:String, info: Dictionary) -> String: + var previous_file: String = info.path + + var result_path := DialogicUtil.make_file_custom(previous_file, target_file.get_base_dir(), target_file.get_file()) + + return result_path + + +func set_scene_path(path:String) -> void: + var data: Dictionary = selected_item.get_metadata(0) + data['scene'] = path + update_preview.emit() + changed.emit() + reload_ui(data) + + +func reload_ui(data: Dictionary) -> void: + var path: String = data.get('scene', '') + %OpenSceneButton.hide() + + if path.is_empty(): + %SceneLabel.text = "Default Portrait Scene" + %SceneLabel.tooltip_text = "Can be changed in the settings." + %SceneLabel.add_theme_color_override("font_color", get_theme_color("readonly_color", "Editor")) + + elif %PortraitSceneBrowser.is_premade_portrait_scene(path): + %SceneLabel.text = %PortraitSceneBrowser.portrait_scenes_info[path].name + %SceneLabel.tooltip_text = path + %SceneLabel.add_theme_color_override("font_color", get_theme_color("accent_color", "Editor")) + + else: + %SceneLabel.text = path.get_file() + %SceneLabel.tooltip_text = path + %SceneLabel.add_theme_color_override("font_color", get_theme_color("property_color_x", "Editor")) + %OpenSceneButton.show() diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main.tscn b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main.tscn new file mode 100644 index 0000000..41a38dd --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main.tscn @@ -0,0 +1,72 @@ +[gd_scene load_steps=6 format=3 uid="uid://djq4aasoihexj"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main.gd" id="1_ht8lu"] +[ext_resource type="PackedScene" uid="uid://7mvxuaulctcq" path="res://addons/dialogic/Editor/Events/Fields/field_file.tscn" id="2_k8xs0"] +[ext_resource type="PackedScene" uid="uid://b1wn8r84uh11b" path="res://addons/dialogic/Editor/CharacterEditor/portrait_scene_browser.tscn" id="3_ngvgq"] + +[sub_resource type="Image" id="Image_tg5pd"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_f5xt2"] +image = SubResource("Image_tg5pd") + +[node name="Scene" type="GridContainer"] +offset_right = 298.0 +offset_bottom = 86.0 +size_flags_horizontal = 3 +script = ExtResource("1_ht8lu") + +[node name="HBox" type="HBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="ChangeSceneButton" type="Button" parent="HBox"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Change Scene" +icon = SubResource("ImageTexture_f5xt2") + +[node name="SceneLabel" type="Label" parent="HBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +mouse_filter = 0 +theme_override_colors/font_color = Color(0, 0, 0, 1) +text = "asdsdasdasd" +clip_text = true + +[node name="ScenePicker" parent="HBox" instance=ExtResource("2_k8xs0")] +unique_name_in_owner = true +visible = false +layout_mode = 2 +size_flags_horizontal = 3 +file_filter = "*.tscn, *.scn; Scenes" +placeholder = "Default scene" + +[node name="OpenSceneButton" type="Button" parent="HBox"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Open/Edit Scene" +icon = SubResource("ImageTexture_f5xt2") + +[node name="PortraitSceneBrowserWindow" type="Window" parent="."] +unique_name_in_owner = true +title = "Portrait Scene Browser" +position = Vector2i(0, 36) +visible = false +wrap_controls = true +transient = true +popup_window = true + +[node name="PortraitSceneBrowser" parent="PortraitSceneBrowserWindow" instance=ExtResource("3_ngvgq")] +unique_name_in_owner = true + +[connection signal="pressed" from="HBox/ChangeSceneButton" to="." method="_on_change_scene_button_pressed"] +[connection signal="pressed" from="HBox/OpenSceneButton" to="." method="_on_open_scene_button_pressed"] +[connection signal="activate_part" from="PortraitSceneBrowserWindow/PortraitSceneBrowser" to="." method="_on_portrait_scene_browser_activate_part"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main_exports.gd b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main_exports.gd new file mode 100644 index 0000000..d9ff6e5 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main_exports.gd @@ -0,0 +1,80 @@ +@tool +extends DialogicCharacterEditorPortraitSection + +## Portrait Settings Section that only shows the MAIN settings of a portrait scene. + +var current_portrait_data := {} +var last_scene := "" + +func _show_title() -> bool: + return false + + +func _load_portrait_data(data:Dictionary) -> void: + _recheck(data, true) + + +func _recheck(data:Dictionary, force := false) -> void: + get_parent().get_child(get_index()+1).hide() + if last_scene == data.get("scene", "") and not force: + current_portrait_data = data + last_scene = data.get("scene", "") + return + + last_scene = data.get("scene", "") + current_portrait_data = data + + load_portrait_scene_export_variables() + + +func load_portrait_scene_export_variables() -> void: + for child in $Grid.get_children(): + child.queue_free() + + var scene: Variant = null + if current_portrait_data.get('scene', '').is_empty(): + if ProjectSettings.get_setting('dialogic/portraits/default_portrait', '').is_empty(): + scene = load(character_editor.def_portrait_path) + else: + scene = load(ProjectSettings.get_setting('dialogic/portraits/default_portrait', '')) + else: + scene = load(current_portrait_data.get('scene')) + + if not scene: + return + + scene = scene.instantiate() + var skip := true + for i in scene.script.get_script_property_list(): + if i['usage'] & PROPERTY_USAGE_EDITOR and !skip: + var label := Label.new() + label.text = i['name'].capitalize() + $Grid.add_child(label) + + var current_value: Variant = scene.get(i['name']) + if current_portrait_data.has('export_overrides') and current_portrait_data['export_overrides'].has(i['name']): + current_value = str_to_var(current_portrait_data['export_overrides'][i['name']]) + if current_value == null and typeof(scene.get(i['name'])) == TYPE_STRING: + current_value = current_portrait_data['export_overrides'][i['name']] + + var input: Node = DialogicUtil.setup_script_property_edit_node(i, current_value, set_export_override) + input.size_flags_horizontal = SIZE_EXPAND_FILL + $Grid.add_child(input) + + if i['usage'] & PROPERTY_USAGE_GROUP: + if i['name'] == 'Main': + skip = false + else: + skip = true + continue + +func set_export_override(property_name:String, value:String = "") -> void: + var data: Dictionary = selected_item.get_metadata(0) + if !data.has('export_overrides'): + data['export_overrides'] = {} + if !value.is_empty(): + data['export_overrides'][property_name] = value + else: + data['export_overrides'].erase(property_name) + changed.emit() + update_preview.emit() diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main_exports.tscn b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main_exports.tscn new file mode 100644 index 0000000..25b7d7c --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main_exports.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=2 format=3 uid="uid://ba5w02lm3ewkj"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main_exports.gd" id="1_mttrr"] + +[node name="MainExports" type="VBoxContainer"] +offset_right = 374.0 +offset_bottom = 82.0 +script = ExtResource("1_mttrr") + +[node name="Grid" type="GridContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/h_separation = 10 +columns = 2 diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_general.gd b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_general.gd new file mode 100644 index 0000000..a5fe514 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_general.gd @@ -0,0 +1,53 @@ +@tool +extends DialogicCharacterEditorMainSection + +var min_width := 200 + +## The general character settings tab +func _get_title() -> String: + return "General" + + +func _start_opened() -> bool: + return true + + +func _ready() -> void: + # Connecting all necessary signals + %ColorPickerButton.custom_minimum_size.x = DialogicUtil.get_editor_scale() * 30 + %ColorPickerButton.color_changed.connect(character_editor.something_changed) + %DisplayNameLineEdit.text_changed.connect(character_editor.something_changed) + %NicknameLineEdit.text_changed.connect(character_editor.something_changed) + %DescriptionTextEdit.text_changed.connect(character_editor.something_changed) + min_width = get_minimum_size().x + resized.connect(_on_resized) + +func _load_character(resource:DialogicCharacter) -> void: + %DisplayNameLineEdit.text = resource.display_name + %ColorPickerButton.color = resource.color + + %NicknameLineEdit.text = "" + for nickname in resource.nicknames: + %NicknameLineEdit.text += nickname +", " + %NicknameLineEdit.text = %NicknameLineEdit.text.trim_suffix(', ') + + %DescriptionTextEdit.text = resource.description + + +func _save_changes(resource:DialogicCharacter) -> DialogicCharacter: + resource.display_name = %DisplayNameLineEdit.text + resource.color = %ColorPickerButton.color + var nicknames := [] + for n_name in %NicknameLineEdit.text.split(','): + nicknames.append(n_name.strip_edges()) + resource.nicknames = nicknames + resource.description = %DescriptionTextEdit.text + + return resource + + +func _on_resized() -> void: + if size.x > min_width+20: + self.columns = 2 + else: + self.columns = 1 diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_general.tscn b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_general.tscn new file mode 100644 index 0000000..60f89a6 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_general.tscn @@ -0,0 +1,114 @@ +[gd_scene load_steps=5 format=3 uid="uid://bnkck3hocbkk5"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/CharacterEditor/char_edit_section_general.gd" id="1_3e1i1"] +[ext_resource type="PackedScene" uid="uid://dbpkta2tjsqim" path="res://addons/dialogic/Editor/Common/hint_tooltip_icon.tscn" id="2_cxfqm"] + +[sub_resource type="Image" id="Image_yiygw"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_hx3oq"] +image = SubResource("Image_yiygw") + +[node name="General" type="GridContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 7.5 +offset_top = 38.5 +offset_right = -7.5 +offset_bottom = -7.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/h_separation = 6 +theme_override_constants/v_separation = 6 +columns = 2 +script = ExtResource("1_3e1i1") + +[node name="HBox" type="HBoxContainer" parent="."] +layout_mode = 2 +size_flags_vertical = 0 + +[node name="Label2" type="Label" parent="HBox"] +layout_mode = 2 +size_flags_vertical = 0 +text = "Display Name" + +[node name="HintTooltip" parent="HBox" instance=ExtResource("2_cxfqm")] +layout_mode = 2 +tooltip_text = "This name will be displayed on the name label. You can use a dialogic variable. E.g. :{Player.name}" +texture = SubResource("ImageTexture_hx3oq") +hint_text = "This name will be displayed on the name label. You can use a dialogic variable. E.g. :{Player.name}" + +[node name="DisplayName" type="HBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="DisplayNameLineEdit" type="LineEdit" parent="DisplayName"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +caret_blink = true +caret_blink_interval = 0.5 + +[node name="HintTooltip4" parent="DisplayName" instance=ExtResource("2_cxfqm")] +layout_mode = 2 +tooltip_text = "This color can be used on the name label and for occurences of the characters name in text (autocolor names)." +texture = SubResource("ImageTexture_hx3oq") +hint_text = "This color can be used on the name label and for occurences of the characters name in text (autocolor names)." + +[node name="ColorPickerButton" type="ColorPickerButton" parent="DisplayName"] +unique_name_in_owner = true +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 +color = Color(1, 1, 1, 1) +edit_alpha = false + +[node name="HBox2" type="HBoxContainer" parent="."] +layout_mode = 2 +size_flags_vertical = 0 + +[node name="Label3" type="Label" parent="HBox2"] +layout_mode = 2 +size_flags_vertical = 0 +text = "Nicknames" + +[node name="HintTooltip2" parent="HBox2" instance=ExtResource("2_cxfqm")] +layout_mode = 2 +tooltip_text = "If autocolor names is enabled, these will be colored in the characters color as well." +texture = SubResource("ImageTexture_hx3oq") +hint_text = "If autocolor names is enabled, these will be colored in the characters color as well." + +[node name="NicknameLineEdit" type="LineEdit" parent="."] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +caret_blink = true +caret_blink_interval = 0.5 + +[node name="HBox3" type="HBoxContainer" parent="."] +layout_mode = 2 +size_flags_vertical = 0 + +[node name="Label4" type="Label" parent="HBox3"] +layout_mode = 2 +size_flags_vertical = 0 +text = "Description" + +[node name="HintTooltip3" parent="HBox3" instance=ExtResource("2_cxfqm")] +layout_mode = 2 +tooltip_text = "No effect, just for you." +texture = SubResource("ImageTexture_hx3oq") +hint_text = "No effect, just for you." + +[node name="DescriptionTextEdit" type="TextEdit" parent="."] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 65) +layout_mode = 2 +size_flags_horizontal = 3 +wrap_mode = 1 diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_portraits.gd b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_portraits.gd new file mode 100644 index 0000000..44f4ec3 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_portraits.gd @@ -0,0 +1,77 @@ +@tool +extends DialogicCharacterEditorMainSection + +## The general portrait settings section + +var loading := false + +func _get_title() -> String: + return "Portraits" + + +func _ready() -> void: + # Connecting all necessary signals + %DefaultPortraitPicker.value_changed.connect(default_portrait_changed) + %MainScale.value_changed.connect(main_portrait_settings_update) + %MainOffset._load_display_info({'step':1}) + %MainOffset.value_changed.connect(main_portrait_settings_update) + %MainMirror.toggled.connect(main_portrait_settings_update) + + # Setting up Default Portrait Picker + %DefaultPortraitPicker.resource_icon = load("res://addons/dialogic/Editor/Images/Resources/portrait.svg") + %DefaultPortraitPicker.get_suggestions_func = suggest_portraits + + +## Make sure preview get's updated when portrait settings change +func main_portrait_settings_update(_something=null, _value=null) -> void: + if loading: + return + character_editor.current_resource.scale = %MainScale.value/100.0 + character_editor.current_resource.offset = %MainOffset.current_value + character_editor.current_resource.mirror = %MainMirror.button_pressed + character_editor.update_preview() + character_editor.something_changed() + + +func default_portrait_changed(property:String, value:String) -> void: + character_editor.current_resource.default_portrait = value + character_editor.update_default_portrait_star(value) + + +func set_default_portrait(portrait_name:String) -> void: + %DefaultPortraitPicker.set_value(portrait_name) + default_portrait_changed("", portrait_name) + + +func _load_character(resource:DialogicCharacter) -> void: + loading = true + %DefaultPortraitPicker.set_value(resource.default_portrait) + + %MainScale.value = 100*resource.scale + %MainOffset.set_value(resource.offset) + %MainMirror.button_pressed = resource.mirror + loading = false + + +func _save_changes(resource:DialogicCharacter) -> DialogicCharacter: + # Portrait settings + if %DefaultPortraitPicker.current_value in resource.portraits.keys(): + resource.default_portrait = %DefaultPortraitPicker.current_value + elif !resource.portraits.is_empty(): + resource.default_portrait = resource.portraits.keys()[0] + else: + resource.default_portrait = "" + + resource.scale = %MainScale.value/100.0 + resource.offset = %MainOffset.current_value + resource.mirror = %MainMirror.button_pressed + return resource + + +## Get suggestions for DefaultPortraitPicker +func suggest_portraits(search:String) -> Dictionary: + var suggestions := {} + for portrait in character_editor.get_updated_portrait_dict().keys(): + suggestions[portrait] = {'value':portrait} + return suggestions + diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_portraits.tscn b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_portraits.tscn new file mode 100644 index 0000000..0f1874a --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/char_edit_section_portraits.tscn @@ -0,0 +1,59 @@ +[gd_scene load_steps=4 format=3 uid="uid://cmrgbo8qi145o"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/CharacterEditor/char_edit_section_portraits.gd" id="1_6sxsl"] +[ext_resource type="PackedScene" uid="uid://dpwhshre1n4t6" path="res://addons/dialogic/Editor/Events/Fields/field_options_dynamic.tscn" id="2_birla"] +[ext_resource type="PackedScene" uid="uid://dtimnsj014cu" path="res://addons/dialogic/Editor/Events/Fields/field_vector2.tscn" id="3_vcvin"] + +[node name="Portraits" type="GridContainer"] +offset_right = 453.0 +offset_bottom = 141.0 +theme_override_constants/h_separation = 1 +theme_override_constants/v_separation = 6 +columns = 2 +script = ExtResource("1_6sxsl") + +[node name="Label5" type="Label" parent="."] +layout_mode = 2 +size_flags_vertical = 0 +text = "Default" + +[node name="DefaultPortraitPicker" parent="." instance=ExtResource("2_birla")] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "Select Default Portrait" +fit_text_length = false + +[node name="Label" type="Label" parent="."] +layout_mode = 2 +size_flags_vertical = 0 +text = "Main Scale" + +[node name="MainScale" type="SpinBox" parent="."] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 8 +value = 100.0 +allow_greater = true +alignment = 1 +suffix = "%" + +[node name="Label2" type="Label" parent="."] +layout_mode = 2 +size_flags_vertical = 0 +text = "Main Offset" + +[node name="MainOffset" parent="." instance=ExtResource("3_vcvin")] +unique_name_in_owner = true +layout_mode = 2 +alignment = 2 + +[node name="Label3" type="Label" parent="."] +layout_mode = 2 +size_flags_vertical = 0 +text = "Main Mirror" + +[node name="MainMirror" type="CheckBox" parent="."] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 8 diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor.gd b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor.gd new file mode 100644 index 0000000..cc635cf --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor.gd @@ -0,0 +1,687 @@ +@tool +extends DialogicEditor + +## Editor for editing character resources. + +signal character_loaded(resource_path:String) +signal portrait_selected() + + +# Current state +var loading := false +var current_previewed_scene: Variant = null +var current_scene_path: String = "" + +# References +var selected_item: TreeItem +var def_portrait_path: String = DialogicUtil.get_module_path('Character').path_join('default_portrait.tscn') + + +######### EDITOR STUFF and LOADING/SAVING ###################################### + +#region Resource Logic +## Method is called once editors manager is ready to accept registers. +func _register() -> void: + ## Makes the editor open this when a .dch file is selected. + ## Then _open_resource() is called. + editors_manager.register_resource_editor("dch", self) + + ## Add an "add character" button + var add_character_button: Button = editors_manager.add_icon_button( + load("res://addons/dialogic/Editor/Images/Toolbar/add-character.svg"), + 'Add Character', + self) + add_character_button.pressed.connect(_on_create_character_button_pressed) + add_character_button.shortcut = Shortcut.new() + add_character_button.shortcut.events.append(InputEventKey.new()) + add_character_button.shortcut.events[0].keycode = KEY_2 + add_character_button.shortcut.events[0].ctrl_pressed = true + + ## By default show the no character screen + $NoCharacterScreen.show() + + +func _get_title() -> String: + return "Character" + + +func _get_icon() -> Texture: + return load("res://addons/dialogic/Editor/Images/Resources/character.svg") + + +## Called when a character is opened somehow +func _open_resource(resource:Resource) -> void: + if resource == null: + $NoCharacterScreen.show() + return + + ## Update resource + current_resource = (resource as DialogicCharacter) + + ## Make sure changes in the ui won't trigger saving + loading = true + + ## Load other main tabs + for child in %MainSettingsSections.get_children(): + if child is DialogicCharacterEditorMainSection: + child._load_character(current_resource) + + ## Clear and then load Portrait section + %PortraitSearch.text = "" + load_portrait_tree() + + loading = false + character_loaded.emit(resource.resource_path) + + %CharacterName.text = DialogicResourceUtil.get_unique_identifier(resource.resource_path) + + $NoCharacterScreen.hide() + %PortraitChangeInfo.hide() + + +## Called when the character is opened. +func _open(extra_info:Variant="") -> void: + if !ProjectSettings.get_setting('dialogic/portraits/default_portrait', '').is_empty(): + def_portrait_path = ProjectSettings.get_setting('dialogic/portraits/default_portrait', '') + else: + def_portrait_path = DialogicUtil.get_module_path('Character').path_join('default_portrait.tscn') + + if current_resource == null: + $NoCharacterScreen.show() + return + + update_preview(true) + %PortraitChangeInfo.hide() + + +func _clear() -> void: + current_resource = null + current_resource_state = ResourceStates.SAVED + $NoCharacterScreen.show() + + +func _save() -> void: + if ! visible or not current_resource: + return + + ## Portrait list + current_resource.portraits = get_updated_portrait_dict() + + ## Main tabs + for child in %MainSettingsSections.get_children(): + if child is DialogicCharacterEditorMainSection: + current_resource = child._save_changes(current_resource) + + ResourceSaver.save(current_resource, current_resource.resource_path) + current_resource_state = ResourceStates.SAVED + DialogicResourceUtil.update_directory('dch') + + +## Saves a new empty character to the given path +func new_character(path: String) -> void: + var resource := DialogicCharacter.new() + resource.resource_path = path + resource.display_name = path.get_file().trim_suffix("."+path.get_extension()) + resource.color = Color(1,1,1,1) + resource.default_portrait = "" + resource.custom_info = {} + ResourceSaver.save(resource, path) + DialogicResourceUtil.update_directory('dch') + editors_manager.edit_resource(resource) + +#endregion + + +######### INTERFACE ############################################################ + +#region Interface +func _ready() -> void: + if get_parent() is SubViewport: + return + + DialogicUtil.get_dialogic_plugin().resource_saved.connect(_on_some_resource_saved) + # NOTE: This check is required because up to 4.2 this signal is not exposed. + if DialogicUtil.get_dialogic_plugin().has_signal("scene_saved"): + DialogicUtil.get_dialogic_plugin().scene_saved.connect(_on_some_resource_saved) + + $NoCharacterScreen.color = get_theme_color("dark_color_2", "Editor") + $NoCharacterScreen.show() + setup_portrait_list_tab() + + _on_fit_preview_toggle_toggled(DialogicUtil.get_editor_setting('character_preview_fit', true)) + %PreviewLabel.add_theme_color_override("font_color", get_theme_color("readonly_color", "Editor")) + + %PortraitChangeWarning.add_theme_color_override("font_color", get_theme_color("warning_color", "Editor")) + + %RealPreviewPivot.texture = get_theme_icon("EditorPivot", "EditorIcons") + + %MainSettingsCollapse.icon = get_theme_icon("GuiVisibilityVisible", "EditorIcons") + + set_portrait_settings_position(DialogicUtil.get_editor_setting('portrait_settings_position', true)) + + await find_parent('EditorView').ready + + ## Add general tabs + add_settings_section(load("res://addons/dialogic/Editor/CharacterEditor/char_edit_section_general.tscn").instantiate(), %MainSettingsSections) + add_settings_section(load("res://addons/dialogic/Editor/CharacterEditor/char_edit_section_portraits.tscn").instantiate(), %MainSettingsSections) + + + add_settings_section(load("res://addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main_exports.tscn").instantiate(), %PortraitSettingsSection) + add_settings_section(load("res://addons/dialogic/Editor/CharacterEditor/char_edit_p_section_exports.tscn").instantiate(), %PortraitSettingsSection) + add_settings_section(load("res://addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main.tscn").instantiate(), %PortraitSettingsSection) + add_settings_section(load("res://addons/dialogic/Editor/CharacterEditor/char_edit_p_section_layout.tscn").instantiate(), %PortraitSettingsSection) + + ## Load custom sections from modules + for indexer in DialogicUtil.get_indexers(): + for path in indexer._get_character_editor_sections(): + var scene: Control = load(path).instantiate() + if scene is DialogicCharacterEditorMainSection: + add_settings_section(scene, %MainSettingsSections) + elif scene is DialogicCharacterEditorPortraitSection: + add_settings_section(scene, %PortraitSettingsSection) + + +## Add a section (a control) either to the given settings section (Main or Portraits) +## - sets up the title of the section +## - connects to various signals +func add_settings_section(edit:Control, parent:Node) -> void: + edit.changed.connect(something_changed) + edit.character_editor = self + if edit.has_signal('update_preview'): + edit.update_preview.connect(update_preview) + + var button: Button + if edit._show_title(): + var hbox := HBoxContainer.new() + hbox.name = edit._get_title()+"BOX" + button = Button.new() + button.flat = true + button.theme_type_variation = "DialogicSection" + button.alignment = HORIZONTAL_ALIGNMENT_LEFT + button.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN + button.text = edit._get_title() + button.icon_alignment = HORIZONTAL_ALIGNMENT_RIGHT + button.pressed.connect(_on_section_button_pressed.bind(button)) + button.focus_mode = Control.FOCUS_NONE + button.icon = get_theme_icon("CodeFoldDownArrow", "EditorIcons") + button.add_theme_color_override('icon_normal_color', get_theme_color("font_color", "DialogicSection")) + + hbox.size_flags_horizontal = Control.SIZE_EXPAND_FILL + hbox.add_child(button) + + if !edit.hint_text.is_empty(): + var hint: Node = load("res://addons/dialogic/Editor/Common/hint_tooltip_icon.tscn").instantiate() + hint.hint_text = edit.hint_text + hbox.add_child(hint) + + parent.add_child(hbox) + parent.add_child(edit) + parent.add_child(HSeparator.new()) + if button and !edit._start_opened(): + _on_section_button_pressed(button) + + +func get_settings_section_by_name(name:String, main:=true) -> Node: + var parent := %MainSettingsSections + if not main: + parent = %PortraitSettingsSection + + if parent.has_node(name): + return parent.get_node(name) + elif parent.has_node(name+"BOX/"+name): + return parent.get_node(name+"BOX/"+name) + else: + return null + + +func _on_section_button_pressed(button:Button) -> void: + var section_header := button.get_parent() + var section := section_header.get_parent().get_child(section_header.get_index()+1) + if section.visible: + button.icon = get_theme_icon("CodeFoldedRightArrow", "EditorIcons") + section.visible = false + else: + button.icon = get_theme_icon("CodeFoldDownArrow", "EditorIcons") + section.visible = true + + if section_header.get_parent().get_child_count() > section_header.get_index()+2 and section_header.get_parent().get_child(section_header.get_index()+2) is Separator: + section_header.get_parent().get_child(section_header.get_index()+2).visible = section_header.get_parent().get_child(section_header.get_index()+1).visible + + +func something_changed(fake_argument = "", fake_arg2 = null) -> void: + if not loading: + current_resource_state = ResourceStates.UNSAVED + + +func _on_main_settings_collapse_toggled(button_pressed:bool) -> void: + %MainSettingsTitle.visible = !button_pressed + %MainSettingsScroll.visible = !button_pressed + if button_pressed: + %MainSettings.hide() + %MainSettingsCollapse.icon = get_theme_icon("GuiVisibilityHidden", "EditorIcons") + else: + %MainSettings.show() + %MainSettingsCollapse.icon = get_theme_icon("GuiVisibilityVisible", "EditorIcons") + + +func _on_switch_portrait_settings_position_pressed() -> void: + set_portrait_settings_position(!%RightSection.vertical) + + +func set_portrait_settings_position(is_below:bool) -> void: + %RightSection.vertical = is_below + DialogicUtil.set_editor_setting('portrait_settings_position', is_below) + if is_below: + %SwitchPortraitSettingsPosition.icon = get_theme_icon("ControlAlignRightWide", "EditorIcons") + else: + %SwitchPortraitSettingsPosition.icon = get_theme_icon("ControlAlignBottomWide", "EditorIcons") + +#endregion + + +########## PORTRAIT SECTION #################################################### + +#region Portrait Section +func setup_portrait_list_tab() -> void: + %PortraitTree.editor = self + + ## Portrait section styling/connections + %AddPortraitButton.icon = get_theme_icon("Add", "EditorIcons") + %AddPortraitButton.pressed.connect(add_portrait) + %AddPortraitGroupButton.icon = load("res://addons/dialogic/Editor/Images/Pieces/add-folder.svg") + %AddPortraitGroupButton.pressed.connect(add_portrait_group) + %ImportPortraitsButton.icon = get_theme_icon("Load", "EditorIcons") + %ImportPortraitsButton.pressed.connect(open_portrait_folder_select) + %PortraitSearch.right_icon = get_theme_icon("Search", "EditorIcons") + %PortraitSearch.text_changed.connect(filter_portrait_list) + + %PortraitTree.item_selected.connect(load_selected_portrait) + %PortraitTree.item_edited.connect(_on_item_edited) + %PortraitTree.item_activated.connect(_on_item_activated) + + +func open_portrait_folder_select() -> void: + find_parent("EditorView").godot_file_dialog( + import_portraits_from_folder, "*.svg, *.png", + EditorFileDialog.FILE_MODE_OPEN_DIR) + + +func import_portraits_from_folder(path:String) -> void: + var parent: TreeItem = %PortraitTree.get_root() + + if %PortraitTree.get_selected() and %PortraitTree.get_selected() != parent and %PortraitTree.get_selected().get_metadata(0).has('group'): + parent = %PortraitTree.get_selected() + + var dir := DirAccess.open(path) + dir.list_dir_begin() + var file_name: String = dir.get_next() + var files := [] + while file_name != "": + if not dir.current_is_dir(): + var file_lower := file_name.to_lower() + if '.svg' in file_lower or '.png' in file_lower: + if not '.import' in file_lower: + files.append(file_name) + file_name = dir.get_next() + + var prefix: String = files[0] + for file in files: + while true: + if file.begins_with(prefix): + break + if prefix.is_empty(): + break + prefix = prefix.substr(0, len(prefix)-1) + + for file in files: + %PortraitTree.add_portrait_item(file.trim_prefix(prefix).trim_suffix('.'+file.get_extension()), + {'scene':"",'export_overrides':{'image':var_to_str(path.path_join(file))}, 'scale':1, 'offset':Vector2(), 'mirror':false}, parent) + + ## Handle selection + if parent.get_child_count(): + parent.get_first_child().select(0) + else: + # Call anyways to clear preview and hide portrait settings section + load_selected_portrait() + + something_changed() + + +func add_portrait(portrait_name:String='New portrait', portrait_data:Dictionary={'scene':"", 'export_overrides':{'image':''}, 'scale':1, 'offset':Vector2(), 'mirror':false}) -> void: + var parent: TreeItem = %PortraitTree.get_root() + if %PortraitTree.get_selected(): + if %PortraitTree.get_selected().get_metadata(0) and %PortraitTree.get_selected().get_metadata(0).has('group'): + parent = %PortraitTree.get_selected() + else: + parent = %PortraitTree.get_selected().get_parent() + var item: TreeItem = %PortraitTree.add_portrait_item(portrait_name, portrait_data, parent) + item.set_meta('new', true) + item.set_editable(0, true) + item.select(0) + %PortraitTree.call_deferred('edit_selected') + something_changed() + + +func add_portrait_group() -> void: + var parent_item: TreeItem = %PortraitTree.get_root() + if %PortraitTree.get_selected() and %PortraitTree.get_selected().get_metadata(0).has('group'): + parent_item = %PortraitTree.get_selected() + var item: TreeItem = %PortraitTree.add_portrait_group("Group", parent_item) + item.set_meta('new', true) + item.set_editable(0, true) + item.select(0) + %PortraitTree.call_deferred('edit_selected') + + +func load_portrait_tree() -> void: + %PortraitTree.clear_tree() + var root: TreeItem = %PortraitTree.create_item() + + for portrait in current_resource.portraits.keys(): + var portrait_label: String = portrait + var parent: TreeItem = %PortraitTree.get_root() + if '/' in portrait: + parent = %PortraitTree.create_necessary_group_items(portrait) + portrait_label = portrait.split('/')[-1] + + %PortraitTree.add_portrait_item(portrait_label, current_resource.portraits[portrait], parent) + + update_default_portrait_star(current_resource.default_portrait) + + if root.get_child_count(): + root.get_first_child().select(0) + while %PortraitTree.get_selected().get_child_count(): + %PortraitTree.get_selected().get_child(0).select(0) + else: + # Call anyways to clear preview and hide portrait settings section + load_selected_portrait() + + +func filter_portrait_list(filter_term := "") -> void: + filter_branch(%PortraitTree.get_root(), filter_term) + + +func filter_branch(parent: TreeItem, filter_term: String) -> bool: + var anything_visible := false + for item in parent.get_children(): + if item.get_metadata(0).has('group'): + item.visible = filter_branch(item, filter_term) + anything_visible = item.visible + elif filter_term.is_empty() or filter_term.to_lower() in item.get_text(0).to_lower(): + item.visible = true + anything_visible = true + else: + item.visible = false + return anything_visible + + +## This is used to save the portrait data +func get_updated_portrait_dict() -> Dictionary: + return list_portraits(%PortraitTree.get_root().get_children()) + + +func list_portraits(tree_items: Array[TreeItem], dict := {}, path_prefix := "") -> Dictionary: + for item in tree_items: + if item.get_metadata(0).has('group'): + dict = list_portraits(item.get_children(), dict, path_prefix+item.get_text(0)+"/") + else: + dict[path_prefix +item.get_text(0)] = item.get_metadata(0) + return dict + + +func load_selected_portrait() -> void: + if selected_item and is_instance_valid(selected_item): + selected_item.set_editable(0, false) + + selected_item = %PortraitTree.get_selected() + + if selected_item and selected_item.get_metadata(0) != null and !selected_item.get_metadata(0).has('group'): + %PortraitSettingsSection.show() + var current_portrait_data: Dictionary = selected_item.get_metadata(0) + portrait_selected.emit(%PortraitTree.get_full_item_name(selected_item), current_portrait_data) + + update_preview() + + for child in %PortraitSettingsSection.get_children(): + if child is DialogicCharacterEditorPortraitSection: + child.selected_item = selected_item + child._load_portrait_data(current_portrait_data) + + else: + %PortraitSettingsSection.hide() + update_preview() + + +func delete_portrait_item(item: TreeItem) -> void: + if item.get_next_visible(true) and item.get_next_visible(true) != item: + item.get_next_visible(true).select(0) + else: + selected_item = null + load_selected_portrait() + item.free() + something_changed() + + +func duplicate_item(item: TreeItem) -> void: + var new_item: TreeItem = %PortraitTree.add_portrait_item(item.get_text(0)+'_duplicated', item.get_metadata(0).duplicate(true), item.get_parent()) + new_item.set_meta('new', true) + new_item.select(0) + + +func _input(event: InputEvent) -> void: + if !is_visible_in_tree() or (get_viewport().gui_get_focus_owner()!= null and !name+'/' in str(get_viewport().gui_get_focus_owner().get_path())): + return + if event is InputEventKey and event.pressed: + if event.keycode == KEY_F2 and %PortraitTree.get_selected(): + %PortraitTree.get_selected().set_editable(0, true) + %PortraitTree.edit_selected() + get_viewport().set_input_as_handled() + elif event.keycode == KEY_DELETE and get_viewport().gui_get_focus_owner() is Tree and %PortraitTree.get_selected(): + delete_portrait_item(%PortraitTree.get_selected()) + get_viewport().set_input_as_handled() + + +func _on_portrait_right_click_menu_index_pressed(id: int) -> void: + # RENAME BUTTON + if id == 0: + _on_item_activated() + # DELETE BUTTON + if id == 2: + delete_portrait_item(%PortraitTree.get_selected()) + # DUPLICATE ITEM + elif id == 1: + duplicate_item(%PortraitTree.get_selected()) + elif id == 4: + get_settings_section_by_name("Portraits").set_default_portrait(%PortraitTree.get_full_item_name(%PortraitTree.get_selected())) + + +## This removes/and adds the DEFAULT star on the portrait list +func update_default_portrait_star(default_portrait_name: String) -> void: + var item_list: Array = %PortraitTree.get_root().get_children() + if item_list.is_empty() == false: + while true: + var item: TreeItem = item_list.pop_back() + if item.get_button_by_id(0, 2) != -1: + item.erase_button(0, item.get_button_by_id(0, 2)) + if %PortraitTree.get_full_item_name(item) == default_portrait_name: + item.add_button(0, get_theme_icon("Favorites", "EditorIcons"), 2, true, "Default") + item_list.append_array(item.get_children()) + if item_list.is_empty(): + break + + +func _on_item_edited() -> void: + selected_item = %PortraitTree.get_selected() + something_changed() + if selected_item: + if %PreviewLabel.text.trim_prefix('Preview of "').trim_suffix('"') == current_resource.default_portrait: + current_resource.default_portrait = %PortraitTree.get_full_item_name(selected_item) + selected_item.set_editable(0, false) + + if !selected_item.has_meta('new') and %PortraitTree.get_full_item_name(selected_item) != selected_item.get_meta('previous_name'): + report_name_change(selected_item) + %PortraitChangeInfo.show() + update_preview() + + +func _on_item_activated() -> void: + if %PortraitTree.get_selected() == null: + return + %PortraitTree.get_selected().set_editable(0, true) + %PortraitTree.edit_selected() + + +func report_name_change(item: TreeItem) -> void: + if item.get_metadata(0).has('group'): + for s_item in item.get_children(): + if s_item.get_metadata(0).has('group') or !s_item.has_meta('new'): + report_name_change(s_item) + else: + if item.get_meta('previous_name') == %PortraitTree.get_full_item_name(item): + return + editors_manager.reference_manager.add_portrait_ref_change( + item.get_meta('previous_name'), + %PortraitTree.get_full_item_name(item), + [DialogicResourceUtil.get_unique_identifier(current_resource.resource_path)]) + item.set_meta('previous_name', %PortraitTree.get_full_item_name(item)) + %PortraitChangeInfo.show() + +#endregion + +########### PREVIEW ############################################################ + +#region Preview +func update_preview(force := false, ignore_settings_reload := false) -> void: + %ScenePreviewWarning.hide() + + if selected_item and is_instance_valid(selected_item) and selected_item.get_metadata(0) != null and !selected_item.get_metadata(0).has('group'): + %PreviewLabel.text = 'Preview of "'+%PortraitTree.get_full_item_name(selected_item)+'"' + + var current_portrait_data: Dictionary = selected_item.get_metadata(0) + + if not force and current_previewed_scene != null \ + and scene_file_path == current_portrait_data.get('scene') \ + and current_previewed_scene.has_method('_should_do_portrait_update') \ + and is_instance_valid(current_previewed_scene.get_script()) \ + and current_previewed_scene._should_do_portrait_update(current_resource, selected_item.get_text(0)): + # We keep the same scene. + pass + else: + + for node in %RealPreviewPivot.get_children(): + node.queue_free() + + current_previewed_scene = null + current_scene_path = "" + + var scene_path := def_portrait_path + if not current_portrait_data.get('scene', '').is_empty(): + scene_path = current_portrait_data.get('scene') + + if ResourceLoader.exists(scene_path): + current_previewed_scene = load(scene_path).instantiate() + current_scene_path = scene_path + + if not current_previewed_scene == null: + %RealPreviewPivot.add_child(current_previewed_scene) + + if not current_previewed_scene == null: + var scene: Node = current_previewed_scene + + scene.show_behind_parent = true + DialogicUtil.apply_scene_export_overrides(scene, current_portrait_data.get('export_overrides', {})) + + var mirror: bool = current_portrait_data.get('mirror', false) != current_resource.mirror + var scale: float = current_portrait_data.get('scale', 1) * current_resource.scale + + if current_portrait_data.get('ignore_char_scale', false): + scale = current_portrait_data.get('scale', 1) + + var offset: Vector2 = current_portrait_data.get('offset', Vector2()) + current_resource.offset + + if is_instance_valid(scene.get_script()) and scene.script.is_tool(): + + if scene.has_method('_update_portrait'): + ## Create a fake duplicate resource that has all the portrait changes applied already + var preview_character := current_resource.duplicate() + preview_character.portraits = get_updated_portrait_dict() + scene._update_portrait(preview_character, %PortraitTree.get_full_item_name(selected_item)) + + if scene.has_method('_set_mirror'): + scene._set_mirror(mirror) + + if !%FitPreview_Toggle.button_pressed: + scene.position = Vector2() + offset + scene.scale = Vector2(1,1)*scale + else: + + if not scene.get_script() == null and scene.script.is_tool() and scene.has_method('_get_covered_rect'): + var rect: Rect2 = scene._get_covered_rect() + var available_rect: Rect2 = %FullPreviewAvailableRect.get_rect() + scene.scale = Vector2(1,1) * min(available_rect.size.x/rect.size.x, available_rect.size.y/rect.size.y) + %RealPreviewPivot.position = (rect.position)*-1*scene.scale + %RealPreviewPivot.position.x = %FullPreviewAvailableRect.size.x/2 + scene.position = Vector2() + + else: + %ScenePreviewWarning.show() + else: + %PreviewLabel.text = 'Nothing to preview' + + if not ignore_settings_reload: + for child in %PortraitSettingsSection.get_children(): + if child is DialogicCharacterEditorPortraitSection: + child._recheck(current_portrait_data) + + else: + %PreviewLabel.text = 'No portrait to preview.' + + for node in %RealPreviewPivot.get_children(): + node.queue_free() + + current_previewed_scene = null + current_scene_path = "" + + +func _on_some_resource_saved(file:Variant) -> void: + if current_previewed_scene == null: + return + + if file is Resource and file == current_previewed_scene.script: + update_preview(true) + + if typeof(file) == TYPE_STRING and file == current_previewed_scene.get_meta("path", ""): + update_preview(true) + + +func _on_full_preview_available_rect_resized() -> void: + if %FitPreview_Toggle.button_pressed: + update_preview(false, true) + + +func _on_create_character_button_pressed() -> void: + editors_manager.show_add_resource_dialog( + new_character, + '*.dch; DialogicCharacter', + 'Create new character', + 'character', + ) + + +func _on_fit_preview_toggle_toggled(button_pressed): + %FitPreview_Toggle.set_pressed_no_signal(button_pressed) + if button_pressed: + %FitPreview_Toggle.icon = get_theme_icon("ScrollContainer", "EditorIcons") + %FitPreview_Toggle.tooltip_text = "Real scale" + else: + %FitPreview_Toggle.tooltip_text = "Fit into preview" + %FitPreview_Toggle.icon = get_theme_icon("CenterContainer", "EditorIcons") + DialogicUtil.set_editor_setting('character_preview_fit', button_pressed) + update_preview(false, true) + +#endregion + +## Open the reference manager +func _on_reference_manger_button_pressed() -> void: + editors_manager.reference_manager.open() + %PortraitChangeInfo.hide() diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor.tscn b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor.tscn new file mode 100644 index 0000000..cef90fd --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor.tscn @@ -0,0 +1,456 @@ +[gd_scene load_steps=11 format=3 uid="uid://dlskc36c5hrwv"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/CharacterEditor/character_editor.gd" id="2"] +[ext_resource type="PackedScene" uid="uid://dbpkta2tjsqim" path="res://addons/dialogic/Editor/Common/hint_tooltip_icon.tscn" id="2_uhhqs"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/CharacterEditor/character_editor_portrait_tree.gd" id="2_vad0i"] +[ext_resource type="Texture2D" uid="uid://babwe22dqjta" path="res://addons/dialogic/Editor/Images/Pieces/add-folder.svg" id="3_v1qnr"] + +[sub_resource type="Image" id="Image_s4mcg"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_oab13"] +image = SubResource("Image_s4mcg") + +[sub_resource type="Image" id="Image_fnxud"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_u1a6g"] +image = SubResource("Image_fnxud") + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_es2rd"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_4xgdx"] + +[node name="CharacterEditor" type="Control"] +self_modulate = Color(0, 0, 0, 1) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("2") + +[node name="Scroll" type="ScrollContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="VBox" type="VBoxContainer" parent="Scroll"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.3 +theme_override_constants/separation = 0 + +[node name="TopSection" type="HBoxContainer" parent="Scroll/VBox"] +layout_mode = 2 + +[node name="NameContainer" type="HBoxContainer" parent="Scroll/VBox/TopSection"] +layout_mode = 2 + +[node name="CharacterName" type="Label" parent="Scroll/VBox/TopSection/NameContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"DialogicTitle" +text = "My Character" + +[node name="NameTooltip" parent="Scroll/VBox/TopSection/NameContainer" instance=ExtResource("2_uhhqs")] +layout_mode = 2 +tooltip_text = "This unique identifier is based on the file name. You can change it in the Reference Manager. +Use this name in timelines to reference this character." +texture = SubResource("ImageTexture_oab13") +hint_text = "This unique identifier is based on the file name. You can change it in the Reference Manager. +Use this name in timelines to reference this character." + +[node name="MainSettingsCollapse" type="Button" parent="Scroll/VBox/TopSection"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 10 +size_flags_vertical = 4 +toggle_mode = true +text = "Main Settings" +icon = SubResource("ImageTexture_u1a6g") + +[node name="MainHSplit" type="HSplitContainer" parent="Scroll/VBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="MainSettings" type="VBoxContainer" parent="Scroll/VBox/MainHSplit"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.2 + +[node name="MainSettingsTitle" type="Label" parent="Scroll/VBox/MainHSplit/MainSettings"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +theme_type_variation = &"DialogicSubTitle" +text = "Main Settings" + +[node name="MainSettingsScroll" type="ScrollContainer" parent="Scroll/VBox/MainHSplit/MainSettings"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = SubResource("StyleBoxEmpty_es2rd") +horizontal_scroll_mode = 0 + +[node name="MainSettingsSections" type="VBoxContainer" parent="Scroll/VBox/MainHSplit/MainSettings/MainSettingsScroll"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="Split" type="HSplitContainer" parent="Scroll/VBox/MainHSplit"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="HBoxContainer" type="HBoxContainer" parent="Scroll/VBox/MainHSplit/Split"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.2 +theme_override_constants/separation = 0 + +[node name="MarginContainer" type="MarginContainer" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.2 +theme_override_constants/margin_bottom = 10 + +[node name="PortraitListSection" type="PanelContainer" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +theme_type_variation = &"DialogicPanelA" + +[node name="Portraits" type="VBoxContainer" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection"] +layout_mode = 2 + +[node name="PortraitsTitle" type="Label" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits"] +layout_mode = 2 +theme_type_variation = &"DialogicSubTitle" +text = "Portraits" + +[node name="PortraitListTools" type="HBoxContainer" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits"] +layout_mode = 2 + +[node name="AddPortraitButton" type="Button" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits/PortraitListTools"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Add portrait" +icon = SubResource("ImageTexture_u1a6g") + +[node name="AddPortraitGroupButton" type="Button" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits/PortraitListTools"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Add Group" +icon = ExtResource("3_v1qnr") + +[node name="ImportPortraitsButton" type="Button" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits/PortraitListTools"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Import images from folder" +icon = SubResource("ImageTexture_u1a6g") + +[node name="PortraitSearch" type="LineEdit" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits/PortraitListTools"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 4 +placeholder_text = "Search" +expand_to_text_length = true +clear_button_enabled = true +right_icon = SubResource("ImageTexture_u1a6g") +caret_blink = true +caret_blink_interval = 0.5 + +[node name="PortraitTreePanel" type="PanelContainer" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = SubResource("StyleBoxEmpty_4xgdx") + +[node name="PortraitTree" type="Tree" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits/PortraitTreePanel"] +unique_name_in_owner = true +layout_mode = 2 +allow_rmb_select = true +hide_root = true +drop_mode_flags = 3 +script = ExtResource("2_vad0i") + +[node name="PortraitRightClickMenu" type="PopupMenu" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits/PortraitTreePanel/PortraitTree"] +size = Vector2i(118, 100) +item_count = 5 +item_0/text = "Rename" +item_0/icon = SubResource("ImageTexture_oab13") +item_0/id = 2 +item_1/text = "Duplicate" +item_1/icon = SubResource("ImageTexture_oab13") +item_1/id = 0 +item_2/text = "Delete" +item_2/icon = SubResource("ImageTexture_oab13") +item_2/id = 1 +item_3/text = "" +item_3/id = 3 +item_3/separator = true +item_4/text = "Make Default" +item_4/icon = SubResource("ImageTexture_oab13") +item_4/id = 4 + +[node name="PortraitChangeInfo" type="HBoxContainer" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="PortraitChangeWarning" type="Label" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits/PortraitChangeInfo"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_colors/font_color = Color(0, 0, 0, 1) +text = "Some portraits were renamed. Make sure no references broke!" +autowrap_mode = 3 + +[node name="ReferenceMangerButton" type="Button" parent="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits/PortraitChangeInfo"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 4 +text = "Reference +Manager" + +[node name="RightSection2" type="VBoxContainer" parent="Scroll/VBox/MainHSplit/Split"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.5 + +[node name="Spacer" type="Control" parent="Scroll/VBox/MainHSplit/Split/RightSection2"] +custom_minimum_size = Vector2(0, 10) +layout_mode = 2 + +[node name="RightSection" type="SplitContainer" parent="Scroll/VBox/MainHSplit/Split/RightSection2"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.5 +vertical = true + +[node name="PortraitPreviewSection" type="Panel" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection"] +unique_name_in_owner = true +show_behind_parent = true +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_type_variation = &"DialogicPanelB" + +[node name="ClipRect" type="Control" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/PortraitPreviewSection"] +clip_contents = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Node2D" type="Node2D" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/PortraitPreviewSection/ClipRect"] +position = Vector2(13, 17) + +[node name="RealPreviewPivot" type="Sprite2D" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/PortraitPreviewSection/ClipRect/Node2D"] +unique_name_in_owner = true +position = Vector2(326.5, 267) +texture = SubResource("ImageTexture_u1a6g") + +[node name="ScenePreviewWarning" type="Label" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/PortraitPreviewSection"] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -143.0 +offset_top = -44.5 +offset_right = 143.0 +offset_bottom = 85.5 +grow_horizontal = 2 +grow_vertical = 2 +text = "Custom scenes can only be viewed in \"Full mode\" if they are in @tool mode and override _get_covered_rect" +horizontal_alignment = 1 +vertical_alignment = 1 +autowrap_mode = 3 +metadata/_edit_layout_mode = 1 + +[node name="PreviewReal" type="CenterContainer" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/PortraitPreviewSection"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -302.0 +offset_top = -80.0 +offset_right = 302.0 +grow_horizontal = 2 +grow_vertical = 0 +mouse_filter = 2 +metadata/_edit_layout_mode = 1 + +[node name="Control" type="Control" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/PortraitPreviewSection/PreviewReal"] +layout_mode = 2 + +[node name="RealSizeRemotePivotTransform" type="RemoteTransform2D" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/PortraitPreviewSection/PreviewReal/Control"] +unique_name_in_owner = true +remote_path = NodePath("../../../ClipRect/Node2D/RealPreviewPivot") +update_rotation = false +update_scale = false + +[node name="FullPreviewAvailableRect" type="Control" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/PortraitPreviewSection"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 10.0 +offset_top = 28.0 +offset_right = -10.0 +offset_bottom = -16.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +metadata/_edit_layout_mode = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/PortraitPreviewSection"] +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_left = 6.0 +offset_top = 7.0 +offset_right = -6.0 +offset_bottom = 43.0 +grow_horizontal = 2 +mouse_filter = 2 + +[node name="PreviewLabel" type="Label" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/PortraitPreviewSection/HBoxContainer"] +unique_name_in_owner = true +show_behind_parent = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 0 +theme_override_colors/font_color = Color(0, 0, 0, 1) +text = "No portrait to preview." +text_overrun_behavior = 1 + +[node name="FitPreview_Toggle" type="Button" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/PortraitPreviewSection/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 0 +tooltip_text = "Real scale" +focus_mode = 0 +toggle_mode = true +button_pressed = true +icon = SubResource("ImageTexture_u1a6g") +flat = true +metadata/_edit_layout_mode = 1 + +[node name="VBox" type="VBoxContainer" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.75 + +[node name="Hbox" type="HBoxContainer" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/VBox"] +layout_mode = 2 + +[node name="PortraitSettingsTitle" type="Label" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/VBox/Hbox"] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"DialogicSubTitle" +text = "Portrait Settings" + +[node name="SwitchPortraitSettingsPosition" type="Button" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/VBox/Hbox"] +unique_name_in_owner = true +modulate = Color(1, 1, 1, 0.647059) +layout_mode = 2 +tooltip_text = "Switch position" +focus_mode = 0 +icon = SubResource("ImageTexture_u1a6g") +flat = true + +[node name="Scroll" type="ScrollContainer" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/VBox"] +layout_mode = 2 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.4 + +[node name="PortraitSettingsSection" type="VBoxContainer" parent="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/VBox/Scroll"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.3 + +[node name="Spacer2" type="Control" parent="Scroll/VBox/MainHSplit/Split/RightSection2"] +custom_minimum_size = Vector2(0, 20) +layout_mode = 2 + +[node name="NoCharacterScreen" type="ColorRect" parent="."] +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +color = Color(0, 0, 0, 1) + +[node name="CenterContainer" type="CenterContainer" parent="NoCharacterScreen"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="NoCharacterScreen/CenterContainer"] +custom_minimum_size = Vector2(250, 0) +layout_mode = 2 + +[node name="Label" type="Label" parent="NoCharacterScreen/CenterContainer/VBoxContainer"] +layout_mode = 2 +text = "No character opened. +Create a character or double-click one in the file system dock." +horizontal_alignment = 1 +autowrap_mode = 3 + +[node name="CreateCharacterButton" type="Button" parent="NoCharacterScreen/CenterContainer/VBoxContainer"] +layout_mode = 2 +text = "Create New Character" + +[connection signal="toggled" from="Scroll/VBox/TopSection/MainSettingsCollapse" to="." method="_on_main_settings_collapse_toggled"] +[connection signal="item_mouse_selected" from="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits/PortraitTreePanel/PortraitTree" to="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits/PortraitTreePanel/PortraitTree" method="_on_item_mouse_selected"] +[connection signal="index_pressed" from="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits/PortraitTreePanel/PortraitTree/PortraitRightClickMenu" to="." method="_on_portrait_right_click_menu_index_pressed"] +[connection signal="pressed" from="Scroll/VBox/MainHSplit/Split/HBoxContainer/MarginContainer/PortraitListSection/Portraits/PortraitChangeInfo/ReferenceMangerButton" to="." method="_on_reference_manger_button_pressed"] +[connection signal="resized" from="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/PortraitPreviewSection/FullPreviewAvailableRect" to="." method="_on_full_preview_available_rect_resized"] +[connection signal="toggled" from="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/PortraitPreviewSection/HBoxContainer/FitPreview_Toggle" to="." method="_on_fit_preview_toggle_toggled"] +[connection signal="pressed" from="Scroll/VBox/MainHSplit/Split/RightSection2/RightSection/VBox/Hbox/SwitchPortraitSettingsPosition" to="." method="_on_switch_portrait_settings_position_pressed"] +[connection signal="pressed" from="NoCharacterScreen/CenterContainer/VBoxContainer/CreateCharacterButton" to="." method="_on_create_character_button_pressed"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor_main_settings_section.gd b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor_main_settings_section.gd new file mode 100644 index 0000000..d329d06 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor_main_settings_section.gd @@ -0,0 +1,41 @@ +@tool +class_name DialogicCharacterEditorMainSection +extends Control + +## Base class for all character editor main sections. Methods should be overriden. + +## Emit this, if something changed +signal changed + +## Reference to the character editor, set when instantiated +var character_editor: Control + +## If not empty, a hint icon is added to the section title. +var hint_text := "" + + +## Overwrite to set the title of this section +func _get_title() -> String: + return "MainSection" + + +## Overwrite to set the visibility of the section title +func _show_title() -> bool: + return true + + +## Overwrite to set whether this should initially be opened. +func _start_opened() -> bool: + return false + + +## Overwrite to load all the information from the character into this section. +func _load_character(resource:DialogicCharacter) -> void: + pass + + +## Overwrite to save all changes made in this section to the resource. +## In custom sections you will mostly likely save to the [resource.custom_info] +## dictionary. +func _save_changes(resource:DialogicCharacter) -> DialogicCharacter: + return resource diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor_portrait_settings_section.gd b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor_portrait_settings_section.gd new file mode 100644 index 0000000..920f8a5 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor_portrait_settings_section.gd @@ -0,0 +1,48 @@ +@tool +class_name DialogicCharacterEditorPortraitSection +extends Control + +## Base class for all portrait settings sections. Methods should be overriden. +## Changes made through fields in such a section should instantly be "saved" +## to the portrait_items metadata from where they will be saved to the resource. + +## Emit this, if something changed +signal changed +## Emit this if the preview should reload +signal update_preview + +## Reference to the character editor, set when instantiated +var character_editor: Control +## Reference to the selected portrait item. +## `selected_item.get_metadata(0)` can access the portraits data +var selected_item: TreeItem = null + +## If not empty a hint icon is added to the section title +var hint_text := "" + + +## Overwrite to set the title of this section +func _get_title() -> String: + return "CustomSection" + + +## Overwrite to set the visibility of the section title +func _show_title() -> bool: + return true + + +## Overwrite to set whether this should initially be opened. +func _start_opened() -> bool: + return false + + +## Overwrite to load all the information from the character into this section. +func _load_portrait_data(data:Dictionary) -> void: + pass + + +## Overwrite to recheck visibility of your section and the content of your fields. +## This is called whenever the preview is updated so it allows reacting to major +## changes in other portrait sections. +func _recheck(data:Dictionary) -> void: + pass diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor_portrait_tree.gd b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor_portrait_tree.gd new file mode 100644 index 0000000..c6fcf46 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/character_editor_portrait_tree.gd @@ -0,0 +1,138 @@ +@tool +extends Tree + +## Tree that displays the portrait list as a hirarchy + +var editor := find_parent('Character Editor') +var current_group_nodes := {} + + +func _ready() -> void: + $PortraitRightClickMenu.set_item_icon(0, get_theme_icon('Rename', 'EditorIcons')) + $PortraitRightClickMenu.set_item_icon(1, get_theme_icon('Duplicate', 'EditorIcons')) + $PortraitRightClickMenu.set_item_icon(2, get_theme_icon('Remove', 'EditorIcons')) + $PortraitRightClickMenu.set_item_icon(4, get_theme_icon("Favorites", "EditorIcons")) + + +func clear_tree() -> void: + clear() + current_group_nodes = {} + + +func add_portrait_item(portrait_name: String, portrait_data: Dictionary, parent_item: TreeItem, previous_name := "") -> TreeItem: + var item: TreeItem = %PortraitTree.create_item(parent_item) + item.set_text(0, portrait_name) + item.set_metadata(0, portrait_data) + if previous_name.is_empty(): + item.set_meta('previous_name', get_full_item_name(item)) + else: + item.set_meta('previous_name', previous_name) + if portrait_name == editor.current_resource.default_portrait: + item.add_button(0, get_theme_icon('Favorites', 'EditorIcons'), 2, true, 'Default') + return item + + +func add_portrait_group(goup_name := "Group", parent_item: TreeItem = get_root(), previous_name := "") -> TreeItem: + var item: TreeItem = %PortraitTree.create_item(parent_item) + item.set_icon(0, get_theme_icon("Folder", "EditorIcons")) + item.set_text(0, goup_name) + item.set_metadata(0, {'group':true}) + if previous_name.is_empty(): + item.set_meta('previous_name', get_full_item_name(item)) + else: + item.set_meta('previous_name', previous_name) + return item + + +func get_full_item_name(item: TreeItem) -> String: + var item_name := item.get_text(0) + while item.get_parent() != get_root() and item != get_root(): + item_name = item.get_parent().get_text(0)+"/"+item_name + item = item.get_parent() + return item_name + + +## Will create all not yet existing folders in the given path. +## Returns the last folder (the parent of the portrait item of this path). +func create_necessary_group_items(path: String) -> TreeItem: + var last_item := get_root() + var item_path := "" + + for i in Array(path.split('/')).slice(0, -1): + item_path += "/"+i + item_path = item_path.trim_prefix('/') + if current_group_nodes.has(item_path+"/"+i): + last_item = current_group_nodes[item_path+"/"+i] + else: + var new_item: TreeItem = add_portrait_group(i, last_item) + current_group_nodes[item_path+"/"+i] = new_item + last_item = new_item + return last_item + + +func _on_item_mouse_selected(pos: Vector2, mouse_button_index: int) -> void: + if mouse_button_index == MOUSE_BUTTON_RIGHT: + $PortraitRightClickMenu.set_item_disabled(1, get_selected().get_metadata(0).has('group')) + $PortraitRightClickMenu.popup_on_parent(Rect2(get_global_mouse_position(),Vector2())) + + +################################################################################ +## DRAG AND DROP +################################################################################ + +func _get_drag_data(position: Vector2) -> Variant: + drop_mode_flags = DROP_MODE_INBETWEEN + var preview := Label.new() + preview.text = " "+get_selected().get_text(0) + preview.add_theme_stylebox_override('normal', get_theme_stylebox("Background", "EditorStyles")) + set_drag_preview(preview) + + return get_selected() + + +func _can_drop_data(position: Vector2, data: Variant) -> bool: + return data is TreeItem + + +func _drop_data(position: Vector2, item: Variant) -> void: + var to_item := get_item_at_position(position) + if to_item: + var test_item := to_item + while true: + if test_item == item: + return + test_item = test_item.get_parent() + if test_item == get_root(): + break + + var drop_section := get_drop_section_at_position(position) + var parent := get_root() + if to_item: + parent = to_item.get_parent() + + if to_item and to_item.get_metadata(0).has('group') and drop_section == 1: + parent = to_item + + var new_item := copy_branch_or_item(item, parent) + + if to_item and !to_item.get_metadata(0).has('group') and drop_section == 1: + new_item.move_after(to_item) + + if drop_section == -1: + new_item.move_before(to_item) + + editor.report_name_change(new_item) + + item.free() + + +func copy_branch_or_item(item: TreeItem, new_parent: TreeItem) -> TreeItem: + var new_item: TreeItem = null + if item.get_metadata(0).has('group'): + new_item = add_portrait_group(item.get_text(0), new_parent, item.get_meta('previous_name')) + else: + new_item = add_portrait_item(item.get_text(0), item.get_metadata(0), new_parent, item.get_meta('previous_name')) + + for child in item.get_children(): + copy_branch_or_item(child, new_item) + return new_item diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/portrait_scene_browser.gd b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/portrait_scene_browser.gd new file mode 100644 index 0000000..119f813 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/portrait_scene_browser.gd @@ -0,0 +1,126 @@ +@tool +extends Control + +var ListItem := load("res://addons/dialogic/Editor/Common/BrowserItem.tscn") + +enum Types {ALL, GENERAL, PRESET} +var current_type := Types.ALL +var current_info := {} + +var portrait_scenes_info := {} + +signal activate_part(part_info:Dictionary) + + +func _ready() -> void: + collect_portrait_scenes() + + %Search.right_icon = get_theme_icon("Search", "EditorIcons") + %CloseButton.icon = get_theme_icon("Close", "EditorIcons") + + get_parent().close_requested.connect(_on_close_button_pressed) + get_parent().visibility_changed.connect(func():if get_parent().visible: open()) + + +func collect_portrait_scenes() -> void: + for indexer in DialogicUtil.get_indexers(): + for element in indexer._get_portrait_scene_presets(): + portrait_scenes_info[element.get('path', '')] = element + + +func open() -> void: + collect_portrait_scenes() + load_parts() + + +func is_premade_portrait_scene(scene_path:String) -> bool: + return scene_path in portrait_scenes_info + + +func load_parts() -> void: + for i in %PartGrid.get_children(): + i.queue_free() + + %Search.placeholder_text = "Search for " + %Search.text = "" + match current_type: + Types.GENERAL: %Search.placeholder_text += "general portrait scenes" + Types.PRESET: %Search.placeholder_text += "portrait scene presets" + Types.ALL: %Search.placeholder_text += "general portrait scenes and presets" + + for info in portrait_scenes_info.values(): + var type: String = info.get('type', '_') + if (current_type == Types.GENERAL and type != "General") or (current_type == Types.PRESET and type != "Preset"): + continue + + var item: Node = ListItem.instantiate() + item.load_info(info) + %PartGrid.add_child(item) + item.set_meta('info', info) + item.clicked.connect(_on_item_clicked.bind(item, info)) + item.focused.connect(_on_item_clicked.bind(item, info)) + item.double_clicked.connect(emit_signal.bind('activate_part', info)) + + await get_tree().process_frame + + if %PartGrid.get_child_count() > 0: + %PartGrid.get_child(0).clicked.emit() + %PartGrid.get_child(0).grab_focus() + + +func _on_item_clicked(item: Node, info:Dictionary) -> void: + load_part_info(info) + + +func load_part_info(info:Dictionary) -> void: + current_info = info + %PartTitle.text = info.get('name', 'Unknown Part') + %PartAuthor.text = "by "+info.get('author', 'Anonymus') + %PartDescription.text = info.get('description', '') + + if info.get('preview_image', null) and ResourceLoader.exists(info.preview_image[0]): + %PreviewImage.texture = load(info.preview_image[0]) + %PreviewImage.show() + else: + %PreviewImage.hide() + + match info.type: + "General": + %ActivateButton.text = "Use this scene" + %TypeDescription.text = "This is a general use scene, it can be used directly." + "Preset": + %ActivateButton.text = "Customize this scene" + %TypeDescription.text = "This is a preset you can use for a custom portrait scene. Dialogic will promt you to save a copy of this scene that you can then use and customize." + "Default": + %ActivateButton.text = "Use default scene" + %TypeDescription.text = "" + "Custom": + %ActivateButton.text = "Select a custom scene" + %TypeDescription.text = "" + + if info.get("documentation", ""): + %DocumentationButton.show() + %DocumentationButton.uri = info.documentation + else: + %DocumentationButton.hide() + + +func _on_activate_button_pressed() -> void: + activate_part.emit(current_info) + + +func _on_close_button_pressed() -> void: + get_parent().hide() + + +func _on_search_text_changed(new_text: String) -> void: + for item in %PartGrid.get_children(): + if new_text.is_empty(): + item.show() + continue + + if new_text.to_lower() in item.get_meta('info').name.to_lower(): + item.show() + continue + + item.hide() diff --git a/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/portrait_scene_browser.tscn b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/portrait_scene_browser.tscn new file mode 100644 index 0000000..3e4ecc1 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/CharacterEditor/portrait_scene_browser.tscn @@ -0,0 +1,260 @@ +[gd_scene load_steps=11 format=3 uid="uid://b1wn8r84uh11b"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/CharacterEditor/portrait_scene_browser.gd" id="1_an6nc"] + +[sub_resource type="Gradient" id="Gradient_0o1u0"] +colors = PackedColorArray(0.100572, 0.303996, 0.476999, 1, 0.296448, 0.231485, 0.52887, 1) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_gxpvv"] +gradient = SubResource("Gradient_0o1u0") +fill = 2 +fill_from = Vector2(0.478632, 1) +fill_to = Vector2(0, 0) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_we8bq"] +content_margin_left = 6.0 +content_margin_top = 3.0 +content_margin_right = 6.0 +content_margin_bottom = 3.0 +draw_center = false +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(1, 1, 1, 0.615686) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3x0xw"] +content_margin_left = 6.0 +content_margin_top = 3.0 +content_margin_right = 6.0 +content_margin_bottom = 3.0 +draw_center = false +border_width_left = 3 +border_width_top = 3 +border_width_right = 3 +border_width_bottom = 3 +border_color = Color(1, 1, 1, 1) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 +expand_margin_left = 2.0 +expand_margin_top = 2.0 +expand_margin_right = 2.0 +expand_margin_bottom = 2.0 + +[sub_resource type="Image" id="Image_lwe0k"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_d2gam"] +image = SubResource("Image_lwe0k") + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lf1ht"] +bg_color = Color(0.0588235, 0.0313726, 0.0980392, 1) +border_width_left = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_a5iyu"] +bg_color = Color(1, 1, 1, 1) +draw_center = false +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 +shadow_color = Color(0.992157, 0.992157, 0.992157, 0.101961) +shadow_size = 10 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_htwsp"] +bg_color = Color(1, 1, 1, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[node name="PortraitSceneBrowser" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_an6nc") + +[node name="BGColor" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = SubResource("GradientTexture2D_gxpvv") + +[node name="HSplitContainer" type="HSplitContainer" parent="."] +clip_contents = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_vertical = 3 + +[node name="Margin" type="MarginContainer" parent="HSplitContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 1.5 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 + +[node name="VBox" type="VBoxContainer" parent="HSplitContainer/Margin"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="BrowserTitle" type="Label" parent="HSplitContainer/Margin/VBox"] +layout_mode = 2 +theme_type_variation = &"DialogicSubTitle" +theme_override_font_sizes/font_size = 25 +text = "Dialogic Portrait Scene Browser" + +[node name="HBox" type="HBoxContainer" parent="HSplitContainer/Margin/VBox"] +layout_mode = 2 + +[node name="Search" type="LineEdit" parent="HSplitContainer/Margin/VBox/HBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_styles/normal = SubResource("StyleBoxFlat_we8bq") +theme_override_styles/focus = SubResource("StyleBoxFlat_3x0xw") +placeholder_text = "Search" +right_icon = SubResource("ImageTexture_d2gam") + +[node name="ScrollContainer" type="ScrollContainer" parent="HSplitContainer/Margin/VBox"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="PartGrid" type="HFlowContainer" parent="HSplitContainer/Margin/VBox/ScrollContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="Buttons" type="HBoxContainer" parent="HSplitContainer/Margin/VBox"] +layout_mode = 2 +alignment = 1 + +[node name="CloseButton" type="Button" parent="HSplitContainer/Margin/VBox/Buttons"] +unique_name_in_owner = true +layout_mode = 2 +text = "Close" +icon = SubResource("ImageTexture_d2gam") + +[node name="PanelContainer" type="PanelContainer" parent="HSplitContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_lf1ht") + +[node name="Control" type="Control" parent="HSplitContainer/PanelContainer"] +layout_mode = 2 + +[node name="Panel" type="Panel" parent="HSplitContainer/PanelContainer/Control"] +layout_mode = 1 +anchors_preset = 9 +anchor_bottom = 1.0 +offset_left = -4.0 +offset_right = 40.0 +offset_bottom = 71.0 +grow_vertical = 2 +rotation = 0.0349066 +theme_override_styles/panel = SubResource("StyleBoxFlat_lf1ht") + +[node name="MarginContainer" type="MarginContainer" parent="HSplitContainer/PanelContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 5 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 + +[node name="VBox" type="VBoxContainer" parent="HSplitContainer/PanelContainer/MarginContainer"] +layout_mode = 2 +alignment = 1 + +[node name="Panel" type="PanelContainer" parent="HSplitContainer/PanelContainer/MarginContainer/VBox"] +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_a5iyu") + +[node name="Panel" type="PanelContainer" parent="HSplitContainer/PanelContainer/MarginContainer/VBox/Panel"] +clip_children = 1 +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_htwsp") + +[node name="PreviewImage" type="TextureRect" parent="HSplitContainer/PanelContainer/MarginContainer/VBox/Panel/Panel"] +unique_name_in_owner = true +layout_mode = 2 +expand_mode = 5 +stretch_mode = 6 + +[node name="HFlowContainer" type="HFlowContainer" parent="HSplitContainer/PanelContainer/MarginContainer/VBox"] +layout_mode = 2 + +[node name="PartTitle" type="Label" parent="HSplitContainer/PanelContainer/MarginContainer/VBox/HFlowContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 8 +theme_type_variation = &"DialogicTitle" +text = "Cool Style Part" + +[node name="PartAuthor" type="Label" parent="HSplitContainer/PanelContainer/MarginContainer/VBox/HFlowContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 8 +theme_type_variation = &"DialogicHintText" +text = "by Jowan" + +[node name="PartType" type="Label" parent="HSplitContainer/PanelContainer/MarginContainer/VBox/HFlowContainer"] +visible = false +layout_mode = 2 +size_flags_vertical = 8 +theme_type_variation = &"DialogicHintText" +text = "a style" + +[node name="PartDescription" type="Label" parent="HSplitContainer/PanelContainer/MarginContainer/VBox"] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"DialogicHintText2" +text = "A cool textbox layer" +autowrap_mode = 3 + +[node name="DocumentationButton" type="LinkButton" parent="HSplitContainer/PanelContainer/MarginContainer/VBox"] +unique_name_in_owner = true +layout_mode = 2 +text = "Learn more" + +[node name="HSeparator" type="HSeparator" parent="HSplitContainer/PanelContainer/MarginContainer/VBox"] +layout_mode = 2 + +[node name="ActivateButton" type="Button" parent="HSplitContainer/PanelContainer/MarginContainer/VBox"] +unique_name_in_owner = true +layout_mode = 2 +text = "Use" + +[node name="TypeDescription" type="Label" parent="HSplitContainer/PanelContainer/MarginContainer/VBox"] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"DialogicHintText" +text = "A cool textbox layer" +autowrap_mode = 3 + +[connection signal="text_changed" from="HSplitContainer/Margin/VBox/HBox/Search" to="." method="_on_search_text_changed"] +[connection signal="pressed" from="HSplitContainer/Margin/VBox/Buttons/CloseButton" to="." method="_on_close_button_pressed"] +[connection signal="pressed" from="HSplitContainer/PanelContainer/MarginContainer/VBox/ActivateButton" to="." method="_on_activate_button_pressed"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/BrowserItem.gd b/addons/dialogic-main/addons/dialogic/Editor/Common/BrowserItem.gd new file mode 100644 index 0000000..7bfb3cf --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/BrowserItem.gd @@ -0,0 +1,86 @@ +@tool +extends Container + +signal clicked +signal middle_clicked +signal double_clicked +signal focused + +var base_size := 1 + + +func _ready() -> void: + if get_parent() is SubViewport: + return + + %Name.add_theme_font_override("font", get_theme_font("bold", "EditorFonts")) + custom_minimum_size = base_size * Vector2(200, 150) * DialogicUtil.get_editor_scale() + %CurrentIcon.texture = get_theme_icon("Favorites", "EditorIcons") + if %Image.texture == null: + %Image.texture = get_theme_icon("ImportFail", "EditorIcons") + %Image.stretch_mode = TextureRect.STRETCH_KEEP_CENTERED + + +func load_info(info:Dictionary) -> void: + %Name.text = info.name + if not info.has("preview_image"): + pass + elif info.preview_image[0] == 'custom': + await ready + %Image.texture = get_theme_icon("CreateNewSceneFrom", "EditorIcons") + %Image.stretch_mode = TextureRect.STRETCH_KEEP_CENTERED + %Panel.self_modulate = get_theme_color("property_color_z", "Editor") + elif info.preview_image[0].ends_with('scn'): + DialogicUtil.get_dialogic_plugin().get_editor_interface().get_resource_previewer().queue_resource_preview(info.preview_image[0], self, 'set_scene_preview', null) + elif ResourceLoader.exists(info.preview_image[0]): + %Image.texture = load(info.preview_image[0]) + elif info.preview_image[0].is_valid_html_color(): + %Image.texture = null + %Panel.self_modulate = Color(info.preview_image[0]) + + if ResourceLoader.exists(info.get('icon', '')): + %Icon.get_parent().show() + %Icon.texture = load(info.get('icon')) + else: + %Icon.get_parent().hide() + + tooltip_text = info.description + + +func set_scene_preview(path:String, preview:Texture2D, thumbnail:Texture2D, userdata:Variant) -> void: + if preview: + %Image.texture = preview + else: + %Image.texture = get_theme_icon("PackedScene", "EditorIcons") + + + +func set_current(current:bool): + %CurrentIcon.visible = current + + +func _on_mouse_entered() -> void: + %HoverBG.show() + + +func _on_mouse_exited() -> void: + %HoverBG.hide() + + +func _on_gui_input(event): + if event.is_action_pressed('ui_accept') or event.is_action_pressed("ui_select") or ( + event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT): + clicked.emit() + if not event is InputEventMouseButton or event.double_click: + double_clicked.emit() + elif event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_MIDDLE: + middle_clicked.emit() + + +func _on_focus_entered() -> void: + $FocusFG.show() + focused.emit() + + +func _on_focus_exited() -> void: + $FocusFG.hide() diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/BrowserItem.tscn b/addons/dialogic-main/addons/dialogic/Editor/Common/BrowserItem.tscn new file mode 100644 index 0000000..4abc87b --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/BrowserItem.tscn @@ -0,0 +1,154 @@ +[gd_scene load_steps=6 format=3 uid="uid://ddlxjde1cx035"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Common/BrowserItem.gd" id="1_s3kf0"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_pfw08"] +bg_color = Color(1, 1, 1, 0.32549) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 +expand_margin_left = 4.0 +expand_margin_top = 4.0 +expand_margin_right = 4.0 +expand_margin_bottom = 4.0 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ab24c"] +bg_color = Color(1, 1, 1, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qnehp"] +bg_color = Color(0, 0, 0, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 +shadow_color = Color(0.847059, 0.847059, 0.847059, 0.384314) +shadow_size = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nxx8t"] +bg_color = Color(0.435294, 0.435294, 0.435294, 0.211765) +draw_center = false +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 +expand_margin_left = 4.0 +expand_margin_top = 4.0 +expand_margin_right = 4.0 +expand_margin_bottom = 4.0 + +[node name="BrowserItem" type="MarginContainer"] +custom_minimum_size = Vector2(200, 150) +offset_left = 1.0 +offset_top = 1.0 +offset_right = 128.0 +offset_bottom = 102.0 +size_flags_horizontal = 0 +focus_mode = 2 +theme_override_constants/margin_left = 4 +theme_override_constants/margin_top = 4 +theme_override_constants/margin_right = 4 +theme_override_constants/margin_bottom = 4 +script = ExtResource("1_s3kf0") + +[node name="HoverBG" type="Panel" parent="."] +unique_name_in_owner = true +visible = false +layout_mode = 2 +mouse_filter = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_pfw08") + +[node name="VBox" type="VBoxContainer" parent="."] +layout_mode = 2 +mouse_filter = 2 +theme_override_constants/separation = 0 +alignment = 1 + +[node name="Panel" type="PanelContainer" parent="VBox"] +unique_name_in_owner = true +self_modulate = Color(0.0705882, 0.0705882, 0.0705882, 1) +clip_children = 2 +layout_mode = 2 +size_flags_vertical = 3 +mouse_filter = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_ab24c") + +[node name="Image" type="TextureRect" parent="VBox/Panel"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +mouse_filter = 2 +expand_mode = 1 +stretch_mode = 6 + +[node name="CurrentIcon" type="TextureRect" parent="VBox/Panel/Image"] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -22.0 +offset_top = 5.0 +offset_right = -6.0 +offset_bottom = 21.0 +grow_horizontal = 0 +tooltip_text = "Currently in use" +stretch_mode = 2 + +[node name="Panel" type="Panel" parent="VBox/Panel/Image"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -37.0 +offset_top = -36.0 +offset_right = -7.0 +offset_bottom = -6.0 +grow_horizontal = 0 +grow_vertical = 0 +theme_override_styles/panel = SubResource("StyleBoxFlat_qnehp") + +[node name="Icon" type="TextureRect" parent="VBox/Panel/Image/Panel"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 4.0 +offset_top = 4.0 +offset_right = -4.0 +offset_bottom = -4.0 +grow_horizontal = 2 +grow_vertical = 2 +expand_mode = 1 +stretch_mode = 5 + +[node name="Name" type="Label" parent="VBox"] +unique_name_in_owner = true +layout_mode = 2 +text = "Dialogic Theme" +horizontal_alignment = 1 + +[node name="FocusFG" type="Panel" parent="."] +unique_name_in_owner = true +visible = false +layout_mode = 2 +mouse_filter = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_nxx8t") + +[connection signal="focus_entered" from="." to="." method="_on_focus_entered"] +[connection signal="focus_exited" from="." to="." method="_on_focus_exited"] +[connection signal="gui_input" from="." to="." method="_on_gui_input"] +[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"] +[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/DCSS.gd b/addons/dialogic-main/addons/dialogic/Editor/Common/DCSS.gd new file mode 100644 index 0000000..2a1f95a --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/DCSS.gd @@ -0,0 +1,47 @@ +@tool +class_name DCSS + +static func inline(style: Dictionary) -> StyleBoxFlat: + var scale: float = DialogicUtil.get_editor_scale() + var s := StyleBoxFlat.new() + for property in style.keys(): + match property: + 'border-left': + s.set('border_width_left', style[property] * scale) + 'border-radius': + var radius: float = style[property] * scale + s.set('corner_radius_top_left', radius) + s.set('corner_radius_top_right', radius) + s.set('corner_radius_bottom_left', radius) + s.set('corner_radius_bottom_right', radius) + 'background': + if typeof(style[property]) == TYPE_STRING and style[property] == "none": + s.set('draw_center', false) + else: + s.set('bg_color', style[property]) + 'border': + var width: float = style[property] * scale + s.set('border_width_left', width) + s.set('border_width_right', width) + s.set('border_width_top', width) + s.set('border_width_bottom', width) + 'border-color': + s.set('border_color', style[property]) + 'padding': + var value_v: float = 0.0 + var value_h: float = 0.0 + if style[property] is int: + value_v = style[property] * scale + value_h = value_v + else: + value_v = style[property][0] * scale + value_h = style[property][1] * scale + s.set('content_margin_top', value_v) + s.set('content_margin_bottom', value_v) + s.set('content_margin_left', value_h) + s.set('content_margin_right', value_h) + 'padding-right': + s.set('content_margin_right', style[property] * scale) + 'padding-left': + s.set('content_margin_left', style[property] * scale) + return s diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/ReferenceManager_AddReplacementPanel.gd b/addons/dialogic-main/addons/dialogic/Editor/Common/ReferenceManager_AddReplacementPanel.gd new file mode 100644 index 0000000..2262619 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/ReferenceManager_AddReplacementPanel.gd @@ -0,0 +1,119 @@ +@tool +extends PanelContainer + + +enum Modes {EDIT, ADD} + +var mode := Modes.EDIT +var item: TreeItem = null + + +func _ready() -> void: + hide() + %Character.resource_icon = load("res://addons/dialogic/Editor/Images/Resources/character.svg") + %Character.get_suggestions_func = get_character_suggestions + + %WholeWords.icon = get_theme_icon("FontItem", "EditorIcons") + %MatchCase.icon = get_theme_icon("MatchCase", "EditorIcons") + +func _on_add_pressed() -> void: + if visible: + if mode == Modes.ADD: + hide() + return + elif mode == Modes.EDIT: + save() + + %AddButton.text = "Add" + mode = Modes.ADD + show() + %Type.selected = 0 + _on_type_item_selected(0) + %Where.selected = 2 + _on_where_item_selected(2) + %Old.text = "" + %New.text = "" + + +func open_existing(_item:TreeItem, info:Dictionary): + mode = Modes.EDIT + item = _item + show() + %AddButton.text = "Update" + %Type.selected = info.type + _on_type_item_selected(info.type) + if !info.character_names.is_empty(): + %Where.selected = 1 + %Character.set_value(info.character_names[0]) + else: + %Where.selected = 0 + _on_where_item_selected(%Where.selected) + + %Old.text = info.what + %New.text = info.forwhat + +func _on_type_item_selected(index:int) -> void: + match index: + 0: + %Where.select(0) + %Where.set_item_disabled(0, false) + %Where.set_item_disabled(1, false) + %Where.set_item_disabled(2, true) + 1: + %Where.select(0) + %Where.set_item_disabled(0, false) + %Where.set_item_disabled(1, false) + %Where.set_item_disabled(2, true) + 2: + %Where.select(1) + %Where.set_item_disabled(0, true) + %Where.set_item_disabled(1, false) + %Where.set_item_disabled(2, true) + 3,4: + %Where.select(0) + %Where.set_item_disabled(0, false) + %Where.set_item_disabled(1, true) + %Where.set_item_disabled(2, true) + %PureTextFlags.visible = index == 0 + _on_where_item_selected(%Where.selected) + + +func _on_where_item_selected(index:int) -> void: + %Character.visible = index == 1 + + +func get_character_suggestions(search_text:String) -> Dictionary: + var suggestions := {} + + #override the previous _character_directory with the meta, specifically for searching otherwise new nodes wont work + var _character_directory := DialogicResourceUtil.get_character_directory() + + var icon := load("res://addons/dialogic/Editor/Images/Resources/character.svg") + suggestions['(No one)'] = {'value':null, 'editor_icon':["GuiRadioUnchecked", "EditorIcons"]} + + for resource in _character_directory.keys(): + suggestions[resource] = { + 'value' : resource, + 'tooltip' : _character_directory[resource], + 'icon' : icon.duplicate()} + return suggestions + + +func save() -> void: + if %Old.text.is_empty() or %New.text.is_empty(): + return + if %Where.selected == 1 and %Character.current_value == null: + return + + var previous := {} + if mode == Modes.EDIT: + previous = item.get_metadata(0) + item.get_parent() + item.free() + + var ref_manager := find_parent('ReferenceManager') + var character_names := [] + if %Character.current_value != null: + character_names = [%Character.current_value] + ref_manager.add_ref_change(%Old.text, %New.text, %Type.selected, %Where.selected, character_names, %WholeWords.button_pressed, %MatchCase.button_pressed, previous) + hide() diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/TitleBgStylebox.tres b/addons/dialogic-main/addons/dialogic/Editor/Common/TitleBgStylebox.tres new file mode 100644 index 0000000..f08bb2c --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/TitleBgStylebox.tres @@ -0,0 +1,8 @@ +[gd_resource type="StyleBoxFlat" format=3 uid="uid://dmsjhgv22dns8"] + +[resource] +content_margin_left = 5.0 +content_margin_top = 5.0 +content_margin_right = 5.0 +content_margin_bottom = 5.0 +bg_color = Color(0.545098, 0.545098, 0.545098, 0.211765) diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/broken_reference_manager.gd b/addons/dialogic-main/addons/dialogic/Editor/Common/broken_reference_manager.gd new file mode 100644 index 0000000..b0d11cc --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/broken_reference_manager.gd @@ -0,0 +1,363 @@ +@tool +extends VSplitContainer + +## This manager shows a list of changed references and allows searching for them and replacing them. + +var reference_changes: Array[Dictionary] = []: + set(changes): + reference_changes = changes + update_indicator() + +var search_regexes: Array[Array] +var finder_thread: Thread +var progress_mutex: Mutex +var progress_percent: float = 0.0 +var progress_message: String = "" + + +func _ready() -> void: + if owner.get_parent() is SubViewport: + return + + %TabA.text = "Broken References" + %TabA.icon = get_theme_icon("Unlinked", "EditorIcons") + + owner.get_parent().visibility_changed.connect(func(): if is_visible_in_tree(): open()) + + %ReplacementSection.hide() + + %CheckButton.icon = get_theme_icon("Search", "EditorIcons") + %Replace.icon = get_theme_icon("ArrowRight", "EditorIcons") + + %State.add_theme_color_override("font_color", get_theme_color("warning_color", "Editor")) + visibility_changed.connect(func(): if !visible: close()) + await get_parent().ready + + var tab_button: Control = %TabA + var dot := Sprite2D.new() + dot.texture = get_theme_icon("GuiGraphNodePort", "EditorIcons") + dot.scale = Vector2(0.8, 0.8) + dot.z_index = 10 + dot.position = Vector2(tab_button.size.x, tab_button.size.y*0.25) + dot.modulate = get_theme_color("warning_color", "Editor").lightened(0.5) + + tab_button.add_child(dot) + update_indicator() + + +func open() -> void: + %ReplacementEditPanel.hide() + %ReplacementSection.hide() + %ChangeTree.clear() + %ChangeTree.create_item() + %ChangeTree.set_column_expand(0, false) + %ChangeTree.set_column_expand(2, false) + %ChangeTree.set_column_custom_minimum_width(2, 50) + var categories := {null:%ChangeTree.get_root()} + for i in reference_changes: + var parent: TreeItem = null + if !i.get('category', null) in categories: + parent = %ChangeTree.create_item() + parent.set_text(1, i.category) + parent.set_custom_color(1, get_theme_color("disabled_font_color", "Editor")) + categories[i.category] = parent + else: + parent = categories[i.get('category')] + + var item: TreeItem = %ChangeTree.create_item(parent) + item.set_text(1, i.what+" -> "+i.forwhat) + item.add_button(1, get_theme_icon("Edit", "EditorIcons"), 1, false, 'Edit') + item.add_button(1, get_theme_icon("Remove", "EditorIcons"), 0, false, 'Remove Change from List') + item.set_cell_mode(0, TreeItem.CELL_MODE_CHECK) + item.set_checked(0, true) + item.set_editable(0, true) + item.set_metadata(0, i) + %CheckButton.disabled = reference_changes.is_empty() + + +func _on_change_tree_button_clicked(item:TreeItem, column:int, id:int, mouse_button_index:int) -> void: + if id == 0: + reference_changes.erase(item.get_metadata(0)) + if item.get_parent().get_child_count() == 1: + item.get_parent().free() + else: + item.free() + update_indicator() + %CheckButton.disabled = reference_changes.is_empty() + + if id == 1: + %ReplacementEditPanel.open_existing(item, item.get_metadata(0)) + + %ReplacementSection.hide() + + +func _on_change_tree_item_edited() -> void: + if !%ChangeTree.get_selected(): + return + %CheckButton.disabled = false + + +func _on_check_button_pressed() -> void: + var to_be_checked: Array[Dictionary]= [] + var item: TreeItem = %ChangeTree.get_root() + while item.get_next_visible(): + item = item.get_next_visible() + + if item.get_child_count(): + continue + + if item.is_checked(0): + to_be_checked.append(item.get_metadata(0)) + to_be_checked[-1]['item'] = item + to_be_checked[-1]['count'] = 0 + + open_finder(to_be_checked) + %CheckButton.disabled = true + + +func open_finder(replacements:Array[Dictionary]) -> void: + %ReplacementSection.show() + %Progress.show() + %ReferenceTree.hide() + + search_regexes = [] + for i in replacements: + if i.has('character_names') and !i.character_names.is_empty(): + i['character_regex'] = RegEx.create_from_string("(?m)^(join|update|leave)?\\s*("+str(i.character_names).replace('"', '').replace(', ', '|').trim_suffix(']').trim_prefix('[').replace('/', '\\/')+")(?(1).*|.*:)") + + for regex_string in i.regex: + var regex := RegEx.create_from_string(regex_string) + search_regexes.append([regex, i]) + + finder_thread = Thread.new() + progress_mutex = Mutex.new() + finder_thread.start(search_timelines.bind(search_regexes)) + + +func _process(delta: float) -> void: + if finder_thread and finder_thread.is_started(): + if finder_thread.is_alive(): + progress_mutex.lock() + %State.text = progress_message + %Progress.value = progress_percent + progress_mutex.unlock() + else: + var finds: Variant = finder_thread.wait_to_finish() + display_search_results(finds) + + + +func display_search_results(finds:Array[Dictionary]) -> void: + %Progress.hide() + %ReferenceTree.show() + for regex_info in search_regexes: + regex_info[1]['item'].set_text(2, str(regex_info[1]['count'])) + + update_count_coloring() + %State.text = str(len(finds))+ " occurrences found" + + %ReferenceTree.clear() + %ReferenceTree.set_column_expand(0, false) + %ReferenceTree.create_item() + + var timelines := {} + var height := 0 + for i in finds: + var parent: TreeItem = null + if !i.timeline in timelines: + parent = %ReferenceTree.create_item() + parent.set_text(1, i.timeline) + parent.set_custom_color(1, get_theme_color("disabled_font_color", "Editor")) + timelines[i.timeline] = parent + height += %ReferenceTree.get_item_area_rect(parent).size.y+10 + else: + parent = timelines[i.timeline] + + var item: TreeItem = %ReferenceTree.create_item(parent) + item.set_text(1, 'Line '+str(i.line_number)+': '+i.line) + item.set_tooltip_text(1, i.info.what+' -> '+i.info.forwhat) + item.set_cell_mode(0, TreeItem.CELL_MODE_CHECK) + item.set_checked(0, true) + item.set_editable(0, true) + item.set_metadata(0, i) + height += %ReferenceTree.get_item_area_rect(item).size.y+10 + var change_item: TreeItem = i.info.item + change_item.set_meta('found_items', change_item.get_meta('found_items', [])+[item]) + + %ReferenceTree.custom_minimum_size.y = min(height, 200) + + %ReferenceTree.visible = !finds.is_empty() + %Replace.disabled = finds.is_empty() + if finds.is_empty(): + %State.text = "Nothing found" + else: + %Replace.grab_focus() + + +func search_timelines(regexes:Array[Array]) -> Array[Dictionary]: + var finds: Array[Dictionary] = [] + + var timeline_paths := DialogicResourceUtil.list_resources_of_type('.dtl') + + var progress := 0 + var progress_max: float = len(timeline_paths)*len(regexes) + + for timeline_path:String in timeline_paths: + + var timeline_file := FileAccess.open(timeline_path, FileAccess.READ) + var timeline_text: String = timeline_file.get_as_text() + var timeline_event: PackedStringArray = timeline_text.split('\n') + timeline_file.close() + + for regex_info in regexes: + progress += 1 + progress_mutex.lock() + progress_percent = 1/progress_max*progress + progress_message = "Searching '"+timeline_path+"' for "+regex_info[1].what+' -> '+regex_info[1].forwhat + progress_mutex.unlock() + for i in regex_info[0].search_all(timeline_text): + if regex_info[1].has('character_regex'): + if regex_info[1].character_regex.search(get_line(timeline_text, i.get_start()+1)) == null: + continue + + var line_number := timeline_text.count('\n', 0, i.get_start()+1)+1 + var line := timeline_text.get_slice('\n', line_number-1) + finds.append({ + 'match':i, + 'timeline':timeline_path, + 'info': regex_info[1], + 'line_number': line_number, + 'line': line, + 'line_start': timeline_text.rfind('\n', i.get_start()) + }) + regex_info[1]['count'] += 1 + return finds + + +func _exit_tree() -> void: + # Shutting of + if finder_thread and finder_thread.is_alive(): + finder_thread.wait_to_finish() + + +func get_line(string:String, at_index:int) -> String: + return string.substr(max(string.rfind('\n', at_index), 0), string.find('\n', at_index)-string.rfind('\n', at_index)) + + +func update_count_coloring() -> void: + var item: TreeItem = %ChangeTree.get_root() + while item.get_next_visible(): + item = item.get_next_visible() + + if item.get_child_count(): + continue + if int(item.get_text(2)) > 0: + item.set_custom_bg_color(1, get_theme_color("warning_color", "Editor").darkened(0.8)) + item.set_custom_color(1, get_theme_color("warning_color", "Editor")) + item.set_custom_color(2, get_theme_color("warning_color", "Editor")) + else: + item.set_custom_color(2, get_theme_color("success_color", "Editor")) + item.set_custom_color(1, get_theme_color("readonly_font_color", "Editor")) + if item.get_button_count(1): + item.erase_button(1, 1) + item.add_button(1, get_theme_icon("Eraser", "EditorIcons"), -1, true, "This reference was not found anywhere and will be removed from this list.") + + +func _on_replace_pressed() -> void: + var to_be_replaced: Array[Dictionary]= [] + var item: TreeItem = %ReferenceTree.get_root() + var affected_timelines: Array[String]= [] + + while item.get_next_visible(): + item = item.get_next_visible() + + if item.get_child_count(): + continue + + if item.is_checked(0): + to_be_replaced.append(item.get_metadata(0)) + to_be_replaced[-1]['f_item'] = item + if !item.get_metadata(0).timeline in affected_timelines: + affected_timelines.append(item.get_metadata(0).timeline) + replace(affected_timelines, to_be_replaced) + + +func replace(timelines:Array[String], replacement_info:Array[Dictionary]) -> void: + var reopen_timeline := "" + var timeline_editor: DialogicEditor = find_parent('EditorView').editors_manager.editors['Timeline'].node + if timeline_editor.current_resource != null and timeline_editor.current_resource.resource_path in timelines: + reopen_timeline = timeline_editor.current_resource.resource_path + find_parent('EditorView').editors_manager.clear_editor(timeline_editor) + + replacement_info.sort_custom(func(a,b): return a.match.get_start() < b.match.get_start()) + + for timeline_path in timelines: + %State.text = "Loading '"+timeline_path+"'" + + var timeline_file := FileAccess.open(timeline_path, FileAccess.READ_WRITE) + var timeline_text: String = timeline_file.get_as_text() + var timeline_events := timeline_text.split('\n') + timeline_file.close() + + var idx := 1 + var offset_correction := 0 + for replacement in replacement_info: + if replacement.timeline != timeline_path: + continue + + %State.text = "Replacing in '"+timeline_path + "' ("+str(idx)+"/"+str(len(replacement_info))+")" + var group := 'replace' + if not 'replace' in replacement.match.names: + group = '' + + + timeline_text = timeline_text.substr(0, replacement.match.get_start(group) + offset_correction) + \ + replacement.info.regex_replacement + \ + timeline_text.substr(replacement.match.get_end(group) + offset_correction) + offset_correction += len(replacement.info.regex_replacement)-len(replacement.match.get_string(group)) + + replacement.info.count -= 1 + replacement.info.item.set_text(2, str(replacement.info.count)) + replacement.f_item.set_custom_bg_color(1, get_theme_color("success_color", "Editor").darkened(0.8)) + + timeline_file = FileAccess.open(timeline_path, FileAccess.WRITE) + timeline_file.store_string(timeline_text.strip_edges(false, true)) + timeline_file.close() + + if ResourceLoader.has_cached(timeline_path): + var tml := load(timeline_path) + tml.from_text(timeline_text) + + if !reopen_timeline.is_empty(): + find_parent('EditorView').editors_manager.edit_resource(load(reopen_timeline), false, true) + + update_count_coloring() + + %Replace.disabled = true + %CheckButton.disabled = false + %State.text = "Done Replacing" + + +func update_indicator() -> void: + %TabA.get_child(0).visible = !reference_changes.is_empty() + + +func close() -> void: + var item: TreeItem = %ChangeTree.get_root() + if item: + while item.get_next_visible(): + item = item.get_next_visible() + + if item.get_child_count(): + continue + if item.get_text(2) != "" and int(item.get_text(2)) == 0: + reference_changes.erase(item.get_metadata(0)) + for i in reference_changes: + i.item = null + DialogicUtil.set_editor_setting('reference_changes', reference_changes) + update_indicator() + find_parent("ReferenceManager").update_indicator() + + +func _on_add_button_pressed() -> void: + %ReplacementEditPanel._on_add_pressed() diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/hint_tooltip_icon.gd b/addons/dialogic-main/addons/dialogic/Editor/Common/hint_tooltip_icon.gd new file mode 100644 index 0000000..702fe98 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/hint_tooltip_icon.gd @@ -0,0 +1,12 @@ +@tool +extends TextureRect + +@export_multiline var hint_text := "" + +func _ready() -> void: + if owner and owner.get_parent() is SubViewport: + texture = null + return + texture = get_theme_icon("NodeInfo", "EditorIcons") + modulate = get_theme_color("contrast_color_1", "Editor") + tooltip_text = hint_text diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/hint_tooltip_icon.tscn b/addons/dialogic-main/addons/dialogic/Editor/Common/hint_tooltip_icon.tscn new file mode 100644 index 0000000..3ee10fb --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/hint_tooltip_icon.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=4 format=3 uid="uid://dbpkta2tjsqim"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Common/hint_tooltip_icon.gd" id="1_x8t45"] + +[sub_resource type="Image" id="Image_eiyxd"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_lseut"] +image = SubResource("Image_eiyxd") + +[node name="HintTooltip" type="TextureRect"] +modulate = Color(0, 0, 0, 1) +texture = SubResource("ImageTexture_lseut") +stretch_mode = 3 +script = ExtResource("1_x8t45") diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/reference_manager.gd b/addons/dialogic-main/addons/dialogic/Editor/Common/reference_manager.gd new file mode 100644 index 0000000..915e594 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/reference_manager.gd @@ -0,0 +1,38 @@ +@tool +extends PanelContainer + + +func _ready() -> void: + if get_parent() is SubViewport: + return + + add_theme_stylebox_override("panel", get_theme_stylebox("Background", "EditorStyles")) + $Tabs/Close.icon = get_theme_icon("Close", "EditorIcons") + + for tab in $Tabs/Tabs.get_children(): + tab.add_theme_color_override("font_selected_color", get_theme_color("accent_color", "Editor")) + tab.add_theme_font_override("font", get_theme_font("main", "EditorFonts")) + tab.toggled.connect(tab_changed.bind(tab.get_index()+1)) + + +func tab_changed(enabled:bool, index:int) -> void: + for child in $Tabs.get_children(): + if child.get_index() == 0 or child.get_index() == index or child is Button: + child.show() + if child.get_index() == index: + child.open() + else: + if child.visible: + child.close() + child.hide() + for child in $Tabs/Tabs.get_children(): + child.set_pressed_no_signal(index-1 == child.get_index()) + + +func open() -> void: + show() + $Tabs/BrokenReferences.update_indicator() + + +func _on_close_pressed() -> void: + get_parent()._on_close_requested() diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/reference_manager.tscn b/addons/dialogic-main/addons/dialogic/Editor/Common/reference_manager.tscn new file mode 100644 index 0000000..0bd6073 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/reference_manager.tscn @@ -0,0 +1,324 @@ +[gd_scene load_steps=13 format=3 uid="uid://c7lmt5cp7bxcm"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Common/reference_manager.gd" id="1_3t531"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/Common/broken_reference_manager.gd" id="1_agmg4"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/Common/ReferenceManager_AddReplacementPanel.gd" id="2_tt4jd"] +[ext_resource type="PackedScene" uid="uid://dpwhshre1n4t6" path="res://addons/dialogic/Editor/Events/Fields/field_options_dynamic.tscn" id="3_yomsc"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/Common/unique_identifiers_manager.gd" id="5_wnvbq"] + +[sub_resource type="ButtonGroup" id="ButtonGroup_l6uiy"] + +[sub_resource type="Image" id="Image_36731"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_a0gfq"] +image = SubResource("Image_36731") + +[sub_resource type="Image" id="Image_0rvkq"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_mr0fw"] +image = SubResource("Image_0rvkq") + +[sub_resource type="Image" id="Image_5fmdt"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_lce2m"] +image = SubResource("Image_5fmdt") + +[node name="Manager" type="PanelContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_3t531") + +[node name="Tabs" type="VBoxContainer" parent="."] +layout_mode = 2 + +[node name="Tabs" type="HBoxContainer" parent="Tabs"] +layout_mode = 2 +alignment = 1 + +[node name="TabA" type="Button" parent="Tabs/Tabs"] +unique_name_in_owner = true +layout_mode = 2 +toggle_mode = true +button_pressed = true +text = "Broken References" +flat = true + +[node name="TabB" type="Button" parent="Tabs/Tabs"] +unique_name_in_owner = true +layout_mode = 2 +toggle_mode = true +button_group = SubResource("ButtonGroup_l6uiy") +text = "Unique Identifiers" +flat = true + +[node name="BrokenReferences" type="VSplitContainer" parent="Tabs"] +layout_mode = 2 +size_flags_vertical = 3 +script = ExtResource("1_agmg4") + +[node name="ChangesList" type="PanelContainer" parent="Tabs/BrokenReferences"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +theme_type_variation = &"DialogicPanelA" + +[node name="VBox" type="VBoxContainer" parent="Tabs/BrokenReferences/ChangesList"] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="Tabs/BrokenReferences/ChangesList/VBox"] +layout_mode = 2 + +[node name="SectionTitle" type="Label" parent="Tabs/BrokenReferences/ChangesList/VBox/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_font_sizes/font_size = 16 +text = "Recent renames" + +[node name="AddButton" type="Button" parent="Tabs/BrokenReferences/ChangesList/VBox/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 2 +tooltip_text = "Add custom rename" +icon = SubResource("ImageTexture_a0gfq") + +[node name="ReplacementEditPanel" type="PanelContainer" parent="Tabs/BrokenReferences/ChangesList/VBox"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +script = ExtResource("2_tt4jd") + +[node name="VBox" type="HFlowContainer" parent="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel"] +layout_mode = 2 + +[node name="HBoxContainer3" type="HBoxContainer" parent="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox"] +layout_mode = 2 + +[node name="Type" type="OptionButton" parent="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox/HBoxContainer3"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "This decides the regexes for searching. Pure text allows you to enter your own regex into into \"Old\". " +item_count = 5 +selected = 0 +popup/item_0/text = "Pure Text" +popup/item_0/id = 0 +popup/item_1/text = "Variable" +popup/item_1/id = 1 +popup/item_2/text = "Portrait" +popup/item_2/id = 2 +popup/item_3/text = "Character (Ref)" +popup/item_3/id = 3 +popup/item_4/text = "Timeline (Ref)" +popup/item_4/id = 4 + +[node name="HBoxContainer" type="HBoxContainer" parent="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="Old" type="LineEdit" parent="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "Old" + +[node name="Label2" type="Label" parent="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox/HBoxContainer"] +layout_mode = 2 +text = "->" + +[node name="New" type="LineEdit" parent="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "New" + +[node name="PureTextFlags" type="HBoxContainer" parent="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +alignment = 2 + +[node name="MatchCase" type="Button" parent="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox/PureTextFlags"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Match Case" +toggle_mode = true +icon = SubResource("ImageTexture_mr0fw") + +[node name="WholeWords" type="Button" parent="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox/PureTextFlags"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Whole World" +toggle_mode = true +icon = SubResource("ImageTexture_mr0fw") + +[node name="HBoxContainer4" type="HBoxContainer" parent="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox"] +layout_mode = 2 + +[node name="Where" type="OptionButton" parent="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox/HBoxContainer4"] +unique_name_in_owner = true +layout_mode = 2 +item_count = 3 +selected = 0 +fit_to_longest_item = false +popup/item_0/text = "Everywhere" +popup/item_0/id = 0 +popup/item_1/text = "Only for Character" +popup/item_1/id = 1 +popup/item_2/text = "Texts only" +popup/item_2/id = 2 + +[node name="Character" parent="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox/HBoxContainer4" instance=ExtResource("3_yomsc")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="AddButton" type="Button" parent="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +text = "Add/Save" + +[node name="ChangeTree" type="Tree" parent="Tabs/BrokenReferences/ChangesList/VBox"] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 50) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/draw_relationship_lines = 1 +columns = 3 +hide_root = true + +[node name="CheckButton" type="Button" parent="Tabs/BrokenReferences/ChangesList/VBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +tooltip_text = "Search timelines for occurences of these renames" +text = "Check Selected" +icon = SubResource("ImageTexture_lce2m") + +[node name="ReplacementSection" type="PanelContainer" parent="Tabs/BrokenReferences"] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"DialogicPanelA" + +[node name="FindList" type="VBoxContainer" parent="Tabs/BrokenReferences/ReplacementSection"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 + +[node name="HBox" type="HBoxContainer" parent="Tabs/BrokenReferences/ReplacementSection/FindList"] +layout_mode = 2 + +[node name="SectionTitle2" type="Label" parent="Tabs/BrokenReferences/ReplacementSection/FindList/HBox"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_font_sizes/font_size = 16 +text = "Found references" + +[node name="State" type="Label" parent="Tabs/BrokenReferences/ReplacementSection/FindList/HBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 8 +theme_override_colors/font_color = Color(0, 0, 0, 1) +text = "State" + +[node name="ReferenceTree" type="Tree" parent="Tabs/BrokenReferences/ReplacementSection/FindList"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +theme_override_constants/draw_relationship_lines = 1 +columns = 2 +hide_root = true + +[node name="Progress" type="ProgressBar" parent="Tabs/BrokenReferences/ReplacementSection/FindList"] +unique_name_in_owner = true +layout_mode = 2 +max_value = 1.0 + +[node name="Replace" type="Button" parent="Tabs/BrokenReferences/ReplacementSection/FindList"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +tooltip_text = "Replace all selected findings (Careful, no undo!)" +text = "Replace Selected" +icon = SubResource("ImageTexture_lce2m") + +[node name="UniqueIdentifiers" type="PanelContainer" parent="Tabs"] +visible = false +layout_mode = 2 +size_flags_vertical = 3 +theme_type_variation = &"DialogicPanelA" +script = ExtResource("5_wnvbq") + +[node name="VBox" type="VBoxContainer" parent="Tabs/UniqueIdentifiers"] +layout_mode = 2 + +[node name="Tools" type="HBoxContainer" parent="Tabs/UniqueIdentifiers/VBox"] +layout_mode = 2 +alignment = 1 + +[node name="Search" type="LineEdit" parent="Tabs/UniqueIdentifiers/VBox/Tools"] +unique_name_in_owner = true +custom_minimum_size = Vector2(400, 0) +layout_mode = 2 +placeholder_text = "Search" + +[node name="IdentifierTable" type="Tree" parent="Tabs/UniqueIdentifiers/VBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +columns = 2 +column_titles_visible = true +hide_root = true + +[node name="RenameNotification" type="Label" parent="Tabs/UniqueIdentifiers/VBox"] +unique_name_in_owner = true +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +text = "You've renamed some identifier(s)! Use the \"Broken References\" tab to check if you have used this identifier (and fix it if so)." +autowrap_mode = 3 + +[node name="Close" type="Button" parent="Tabs"] +layout_mode = 2 +size_flags_horizontal = 4 +text = "Close" + +[node name="HelpButton" type="LinkButton" parent="."] +layout_mode = 2 +size_flags_horizontal = 8 +size_flags_vertical = 0 +text = "Documentation" +uri = "https://docs.dialogic.pro/reference-manager.html" + +[connection signal="pressed" from="Tabs/BrokenReferences/ChangesList/VBox/HBoxContainer/AddButton" to="Tabs/BrokenReferences" method="_on_add_button_pressed"] +[connection signal="item_selected" from="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox/HBoxContainer3/Type" to="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel" method="_on_type_item_selected"] +[connection signal="item_selected" from="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox/HBoxContainer4/Where" to="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel" method="_on_where_item_selected"] +[connection signal="pressed" from="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel/VBox/AddButton" to="Tabs/BrokenReferences/ChangesList/VBox/ReplacementEditPanel" method="save"] +[connection signal="button_clicked" from="Tabs/BrokenReferences/ChangesList/VBox/ChangeTree" to="Tabs/BrokenReferences" method="_on_change_tree_button_clicked"] +[connection signal="item_edited" from="Tabs/BrokenReferences/ChangesList/VBox/ChangeTree" to="Tabs/BrokenReferences" method="_on_change_tree_item_edited"] +[connection signal="pressed" from="Tabs/BrokenReferences/ChangesList/VBox/CheckButton" to="Tabs/BrokenReferences" method="_on_check_button_pressed"] +[connection signal="pressed" from="Tabs/BrokenReferences/ReplacementSection/FindList/Replace" to="Tabs/BrokenReferences" method="_on_replace_pressed"] +[connection signal="text_changed" from="Tabs/UniqueIdentifiers/VBox/Tools/Search" to="Tabs/UniqueIdentifiers" method="_on_search_text_changed"] +[connection signal="button_clicked" from="Tabs/UniqueIdentifiers/VBox/IdentifierTable" to="Tabs/UniqueIdentifiers" method="_on_identifier_table_button_clicked"] +[connection signal="item_edited" from="Tabs/UniqueIdentifiers/VBox/IdentifierTable" to="Tabs/UniqueIdentifiers" method="_on_identifier_table_item_edited"] +[connection signal="pressed" from="Tabs/Close" to="." method="_on_close_pressed"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/reference_manager_window.gd b/addons/dialogic-main/addons/dialogic/Editor/Common/reference_manager_window.gd new file mode 100644 index 0000000..7bb42ec --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/reference_manager_window.gd @@ -0,0 +1,191 @@ +@tool +extends Window + +## This window manages communication with the replacement manager it contains. +## Other scripts can call the add_ref_change() method to register changes directly +## or use the helpers add_variable_ref_change() and add_portrait_ref_change() + +@onready var editors_manager := get_node("../EditorsManager") +@onready var broken_manager := get_node("Manager/Tabs/BrokenReferences") +enum Where {EVERYWHERE, BY_CHARACTER, TEXTS_ONLY} +enum Types {TEXT, VARIABLE, PORTRAIT, CHARACTER_NAME, TIMELINE_NAME} + +var icon_button: Button = null + + +func _ready() -> void: + if owner.get_parent() is SubViewport: + return + + $Manager.theme = owner.get_theme() + + icon_button = editors_manager.add_icon_button(get_theme_icon("Unlinked", "EditorIcons"), 'Reference Manager') + icon_button.pressed.connect(open) + + var dot := Sprite2D.new() + dot.texture = get_theme_icon("GuiGraphNodePort", "EditorIcons") + dot.scale = Vector2(0.8, 0.8) + dot.z_index = 10 + dot.position = Vector2(icon_button.size.x*0.8, icon_button.size.x*0.2) + dot.modulate = get_theme_color("warning_color", "Editor").lightened(0.5) + + icon_button.add_child(dot) + + var old_changes: Array = DialogicUtil.get_editor_setting('reference_changes', []) + if !old_changes.is_empty(): + broken_manager.reference_changes = old_changes + + update_indicator() + + hide() + + get_parent().plugin_reference.get_editor_interface().get_file_system_dock().files_moved.connect(_on_file_moved) + get_parent().plugin_reference.get_editor_interface().get_file_system_dock().file_removed.connect(_on_file_removed) + get_parent().get_node('ResourceRenameWarning').confirmed.connect(open) + + +func add_ref_change(old_name:String, new_name:String, type:Types, where:=Where.TEXTS_ONLY, character_names:=[], + whole_words:=false, case_sensitive:=false, previous:Dictionary = {}) -> void: + var regexes := [] + var category_name := "" + match type: + Types.TEXT: + category_name = "Texts" + if '' in old_name: + regexes = [old_name] + else: + regexes = [ + r'(?%s)' % old_name.replace('/', '\\/') + ] + if !case_sensitive: + regexes[0] = '(?i)'+regexes[0] + if whole_words: + regexes = ['\\b'+regexes[0]+'\\b'] + + Types.VARIABLE: + regexes = [ + r'{(?\s*%s\s*)}' % old_name.replace("/", "\\/"), + r'var\s*=\s*"(?\s*%s\s*)"' % old_name.replace("/", "\\/") + ] + category_name = "Variables" + + Types.PORTRAIT: + regexes = [ + r'(?m)^[^:(\n]*\((?%s)\)' % old_name.replace('/', '\\/'), + r'\[\s*portrait\s*=(?\s*%s\s*)\]' % old_name.replace('/', '\\/') + ] + category_name = "Portraits by "+character_names[0] + + Types.CHARACTER_NAME: + # for reference: ((join|leave|update) )?(?NAME)(?!\B)(?(1)|(?!([^:\n]|\\:)*(\n|$))) + regexes = [ + r'((join|leave|update) )?(?%s)(?!\B)(?(1)|(?!([^:\n]|\\:)*(\n|$)))' % old_name + ] + category_name = "Renamed Character Files" + + Types.TIMELINE_NAME: + regexes = [ + r'timeline ?= ?" ?(?%s) ?"' % old_name + ] + category_name = "Renamed Timeline Files" + + if where != Where.BY_CHARACTER: + character_names = [] + + # previous is only given when an existing item is edited + # in that case the old one is removed first + var idx := len(broken_manager.reference_changes) + if previous in broken_manager.reference_changes: + idx = broken_manager.reference_changes.find(previous) + broken_manager.reference_changes.erase(previous) + + if _check_for_ref_change_cycle(old_name, new_name, category_name): + update_indicator() + return + + broken_manager.reference_changes.insert(idx, + {'what':old_name, + 'forwhat':new_name, + 'regex': regexes, + 'regex_replacement':new_name, + 'category':category_name, + 'character_names':character_names, + 'texts_only':where == Where.TEXTS_ONLY, + 'type':type + }) + + update_indicator() + + if visible: + $Manager.open() + broken_manager.open() + + +## Checks for reference cycles or chains. +## E.g. if you first rename a portrait from "happy" to "happy1" and then to "Happy/happy1" +## This will make sure only a change "happy" -> "Happy/happy1" is remembered +## This is very important for correct replacement +func _check_for_ref_change_cycle(old_name:String, new_name:String, category:String) -> bool: + for ref in broken_manager.reference_changes: + if ref['forwhat'] == old_name and ref['category'] == category: + if new_name == ref['what']: + broken_manager.reference_changes.erase(ref) + else: + broken_manager.reference_changes[broken_manager.reference_changes.find(ref)]['forwhat'] = new_name + broken_manager.reference_changes[broken_manager.reference_changes.find(ref)]['regex_replacement'] = new_name + return true + return false + + +## Helper for adding variable ref changes +func add_variable_ref_change(old_name:String, new_name:String) -> void: + add_ref_change(old_name, new_name, Types.VARIABLE, Where.EVERYWHERE) + + +## Helper for adding portrait ref changes +func add_portrait_ref_change(old_name:String, new_name:String, character_names:PackedStringArray) -> void: + add_ref_change(old_name, new_name, Types.PORTRAIT, Where.BY_CHARACTER, character_names) + + +## Helper for adding character name ref changes +func add_character_name_ref_change(old_name:String, new_name:String) -> void: + add_ref_change(old_name, new_name, Types.CHARACTER_NAME, Where.EVERYWHERE) + + +## Helper for adding timeline name ref changes +func add_timeline_name_ref_change(old_name:String, new_name:String) -> void: + add_ref_change(old_name, new_name, Types.TIMELINE_NAME, Where.EVERYWHERE) + + +func open() -> void: + DialogicResourceUtil.update_directory('dch') + DialogicResourceUtil.update_directory('dtl') + popup_centered_ratio(0.5) + move_to_foreground() + grab_focus() + + +func _on_close_requested() -> void: + hide() + broken_manager.close() + + +func update_indicator() -> void: + icon_button.get_child(0).visible = !broken_manager.reference_changes.is_empty() + + +## FILE MANAGEMENT: +func _on_file_moved(old_file:String, new_file:String) -> void: + if old_file.ends_with('.dch') and new_file.ends_with('.dch'): + DialogicResourceUtil.change_resource_path(old_file, new_file) + if old_file.get_file() != new_file.get_file(): + get_parent().get_node('ResourceRenameWarning').popup_centered() + elif old_file.ends_with('.dtl') and new_file.ends_with('.dtl'): + DialogicResourceUtil.change_resource_path(old_file, new_file) + if old_file.get_file() != new_file.get_file(): + get_parent().get_node('ResourceRenameWarning').popup_centered() + + +func _on_file_removed(file:String) -> void: + if file.get_extension() in ['dch', 'dtl']: + DialogicResourceUtil.remove_resource(file) diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/side_bar.tscn b/addons/dialogic-main/addons/dialogic/Editor/Common/side_bar.tscn new file mode 100644 index 0000000..72f82cd --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/side_bar.tscn @@ -0,0 +1,175 @@ +[gd_scene load_steps=7 format=3 uid="uid://cwe3r2tbh2og1"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Common/sidebar.gd" id="1_jnq65"] +[ext_resource type="Texture2D" uid="uid://bff65e82555qr" path="res://addons/dialogic/Editor/Images/Pieces/close-icon.svg" id="2_54pks"] +[ext_resource type="Texture2D" uid="uid://dx3o2ild56i76" path="res://addons/dialogic/Editor/Images/Pieces/closed-icon.svg" id="2_ilyps"] + +[sub_resource type="Theme" id="Theme_pn0f4"] +VBoxContainer/constants/separation = 4 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_gxwm6"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_n8rql"] + +[node name="SideBar" type="VSplitContainer"] +custom_minimum_size = Vector2(100, 130) +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = SubResource("Theme_pn0f4") +split_offset = 100 +script = ExtResource("1_jnq65") + +[node name="VBoxHidden" type="VBoxContainer" parent="."] +unique_name_in_owner = true +visible = false +layout_mode = 2 + +[node name="OpenButton" type="Button" parent="VBoxHidden"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 3 +tooltip_text = "Show Sidebar" +theme_override_constants/icon_max_width = 20 +icon = ExtResource("2_ilyps") +flat = true +icon_alignment = 1 + +[node name="VBoxPrimary" type="VBoxContainer" parent="."] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 + +[node name="Margin" type="MarginContainer" parent="VBoxPrimary"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_constants/margin_left = 5 +theme_override_constants/margin_bottom = 5 + +[node name="VSplitContainer" type="VSplitContainer" parent="VBoxPrimary/Margin"] +layout_mode = 2 + +[node name="VBox" type="VBoxContainer" parent="VBoxPrimary/Margin/VSplitContainer"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="Logo" type="TextureRect" parent="VBoxPrimary/Margin/VSplitContainer/VBox"] +unique_name_in_owner = true +modulate = Color(1, 1, 1, 0.623529) +texture_filter = 6 +custom_minimum_size = Vector2(0, 25) +layout_mode = 2 +expand_mode = 3 +stretch_mode = 4 + +[node name="HBox" type="HBoxContainer" parent="VBoxPrimary/Margin/VSplitContainer/VBox"] +layout_mode = 2 + +[node name="CurrentResource" type="LineEdit" parent="VBoxPrimary/Margin/VSplitContainer/VBox/HBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +text = "No resource" +alignment = 1 +editable = false + +[node name="CloseButton" type="Button" parent="VBoxPrimary/Margin/VSplitContainer/VBox/HBox"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Hide Sidebar" +text = " " +icon = ExtResource("2_54pks") +flat = true +icon_alignment = 1 +expand_icon = true + +[node name="HBoxSearchSort" type="HBoxContainer" parent="VBoxPrimary/Margin/VSplitContainer/VBox"] +layout_mode = 2 + +[node name="Search" type="LineEdit" parent="VBoxPrimary/Margin/VSplitContainer/VBox/HBoxSearchSort"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +tooltip_text = "Filter Resources" +placeholder_text = "Filter Resources" +caret_blink = true +caret_blink_interval = 0.5 + +[node name="SortOption" type="OptionButton" parent="VBoxPrimary/Margin/VSplitContainer/VBox/HBoxSearchSort"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Sort +- Default: Sort alphabetically split into Characters & Timeilnes. +- Folder: Sort alphabetically by parent directory. +- Path: Display full path relative to res://. +- None: Sort alphabetically with no categories." +text_overrun_behavior = 1 +clip_text = true +selected = 0 +item_count = 4 +popup/item_0/text = "Type" +popup/item_1/text = "Folder" +popup/item_1/id = 1 +popup/item_2/text = "Path" +popup/item_2/id = 2 +popup/item_3/text = "None" +popup/item_3/id = 3 + +[node name="ResourceTree" type="Tree" parent="VBoxPrimary/Margin/VSplitContainer/VBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +allow_rmb_select = true +hide_root = true +scroll_horizontal_enabled = false + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxPrimary/Margin/VSplitContainer/VBox"] +visible = false +layout_mode = 2 + +[node name="Label" type="Label" parent="VBoxPrimary/Margin/VSplitContainer/VBox/HBoxContainer"] +layout_mode = 2 +size_flags_vertical = 1 +text = "Sort Order" +vertical_alignment = 1 + +[node name="SortOption" type="OptionButton" parent="VBoxPrimary/Margin/VSplitContainer/VBox/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +item_count = 1 +popup/item_0/text = "Alphabetical (All)" + +[node name="ContentListSection" type="VBoxContainer" parent="VBoxPrimary/Margin/VSplitContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 + +[node name="ContentList" type="ItemList" parent="VBoxPrimary/Margin/VSplitContainer/ContentListSection"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +tooltip_text = "Label events in your timeline will appear here, allowing you to jump to them." +theme_override_styles/selected = SubResource("StyleBoxEmpty_gxwm6") +theme_override_styles/selected_focus = SubResource("StyleBoxEmpty_n8rql") +allow_reselect = true +same_column_width = true + +[node name="CurrentVersion" type="Button" parent="VBoxPrimary"] +unique_name_in_owner = true +layout_mode = 2 +text = "Some Version" +flat = true +clip_text = true + +[node name="RightClickMenu" type="PopupMenu" parent="."] +unique_name_in_owner = true +size = Vector2i(164, 100) + +[connection signal="gui_input" from="VBoxPrimary/Margin/VSplitContainer/VBox/Logo" to="." method="_on_logo_gui_input"] +[connection signal="text_changed" from="VBoxPrimary/Margin/VSplitContainer/VBox/HBoxSearchSort/Search" to="." method="_on_search_text_changed"] +[connection signal="text_submitted" from="VBoxPrimary/Margin/VSplitContainer/VBox/HBoxSearchSort/Search" to="." method="_on_search_text_submitted"] +[connection signal="pressed" from="VBoxPrimary/CurrentVersion" to="." method="_on_current_version_pressed"] +[connection signal="id_pressed" from="RightClickMenu" to="." method="_on_right_click_menu_id_pressed"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/sidebar.gd b/addons/dialogic-main/addons/dialogic/Editor/Common/sidebar.gd new file mode 100644 index 0000000..339b618 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/sidebar.gd @@ -0,0 +1,480 @@ +@tool +class_name DialogicSidebar extends Control + +## Script that handles the editor sidebar. + +signal file_activated(file_path) + +signal content_item_activated(item_name) + +signal show_sidebar(show: bool) + +@onready var editors_manager = get_parent().get_parent() +@onready var resource_tree: Tree = %ResourceTree +var current_resource_list: Array = [] +enum SortMode { + TYPE, + FOLDER, + PATH, + NONE, +} + + +var sort_mode: SortMode = SortMode.TYPE + + +func _ready() -> void: + if owner != null and owner.get_parent() is SubViewport: + return + if editors_manager is SubViewportContainer: + return + + ## CONNECTIONS + editors_manager.resource_opened.connect(_on_editors_resource_opened) + editors_manager.editor_changed.connect(_on_editors_editor_changed) + + resource_tree.item_activated.connect(_on_resources_tree_item_activated) + resource_tree.item_mouse_selected.connect(_on_resources_tree_item_clicked) + + + + %ContentList.item_selected.connect( + func(idx: int): content_item_activated.emit(%ContentList.get_item_text(idx)) + ) + + (%OpenButton as Button).pressed.connect(_show_sidebar) + (%CloseButton as Button).pressed.connect(_hide_sidebar) + + var editor_scale := DialogicUtil.get_editor_scale() + ## ICONS + %Logo.texture = load("res://addons/dialogic/Editor/Images/dialogic-logo.svg") + %Logo.custom_minimum_size.y = 30 * editor_scale + %Search.right_icon = get_theme_icon("Search", "EditorIcons") + + %ContentList.add_theme_color_override( + "font_hovered_color", get_theme_color("warning_color", "Editor") + ) + %ContentList.add_theme_color_override( + "font_selected_color", get_theme_color("property_color_z", "Editor") + ) + + ## MARGINS + %VBoxPrimary/Margin.set( + "theme_override_constants/margin_left", + get_theme_constant("base_margin", "Editor") * editor_scale + ) + %VBoxPrimary/Margin.set( + "theme_override_constants/margin_bottom", + get_theme_constant("base_margin", "Editor") * editor_scale + ) + + ## RIGHT CLICK MENU + %RightClickMenu.clear() + %RightClickMenu.add_icon_item(get_theme_icon("Remove", "EditorIcons"), "Remove From List", 1) + %RightClickMenu.add_separator() + %RightClickMenu.add_icon_item(get_theme_icon("ActionCopy", "EditorIcons"), "Copy Identifier", 4) + %RightClickMenu.add_separator() + %RightClickMenu.add_icon_item( + get_theme_icon("Filesystem", "EditorIcons"), "Show in FileSystem", 2 + ) + %RightClickMenu.add_icon_item( + get_theme_icon("ExternalLink", "EditorIcons"), "Open in External Program", 3 + ) + + ## SORT MENU + %SortOption.set_item_icon(0, get_theme_icon("AnimationTrackGroup", "EditorIcons")) + %SortOption.set_item_icon(1, get_theme_icon("Folder", "EditorIcons")) + %SortOption.set_item_icon(2, get_theme_icon("FolderBrowse", "EditorIcons")) + %SortOption.set_item_icon(3, get_theme_icon("AnimationTrackList", "EditorIcons")) + %SortOption.item_selected.connect(_on_sort_changed) + + await get_tree().process_frame + if DialogicUtil.get_editor_setting("sidebar_collapsed", false): + _hide_sidebar() + + %SortOption.select(DialogicUtil.get_editor_setting("sidebar_sort_mode", 0)) + sort_mode = DialogicUtil.get_editor_setting("sidebar_sort_mode", 0) + update_resource_list() + + +################################################################################ +## SHOW/HIDE SIDEBAR +################################################################################ + + +func _show_sidebar() -> void: + %VBoxPrimary.show() + %VBoxHidden.hide() + DialogicUtil.set_editor_setting("sidebar_collapsed", false) + show_sidebar.emit(true) + + +func _hide_sidebar() -> void: + %VBoxPrimary.hide() + %VBoxHidden.show() + DialogicUtil.set_editor_setting("sidebar_collapsed", true) + show_sidebar.emit(false) + + +################################################################################ +## RESOURCE LIST +################################################################################ + + +func _on_editors_resource_opened(resource: Resource) -> void: + update_resource_list() + pass + + +func _on_editors_editor_changed(previous: DialogicEditor, current: DialogicEditor) -> void: + %ContentListSection.visible = current.current_resource is DialogicTimeline + update_resource_list() + + +func clean_resource_list(resources_list: Array = []) -> PackedStringArray: + return PackedStringArray(resources_list.filter(func(x): return ResourceLoader.exists(x))) + + +func update_resource_list(resources_list: PackedStringArray = []) -> void: + var filter: String = %Search.text + var current_file := "" + if editors_manager.current_editor and editors_manager.current_editor.current_resource: + current_file = editors_manager.current_editor.current_resource.resource_path + + var character_directory: Dictionary = DialogicResourceUtil.get_character_directory() + var timeline_directory: Dictionary = DialogicResourceUtil.get_timeline_directory() + if resources_list.is_empty(): + resources_list = DialogicUtil.get_editor_setting("last_resources", []) + if !current_file in resources_list: + resources_list.append(current_file) + + resources_list = clean_resource_list(resources_list) + + %CurrentResource.text = "No Resource" + %CurrentResource.add_theme_color_override( + "font_uneditable_color", get_theme_color("disabled_font_color", "Editor") + ) + + resource_tree.clear() + var resource_list_items := [] + + var get_directory_items := func(directory:Dictionary, filter:String, icon:Texture2D) -> Array: + var items := [] + for item_name in directory: + if (directory[item_name] in resources_list) and (filter.is_empty() or filter.to_lower() in item_name.to_lower()): + var item := ResourceListItem.new() + item.text = item_name + item.icon = icon + item.metadata = directory[item_name] + item.tooltip = directory[item_name] + items.append(item) + return items + + var character_items: Array = get_directory_items.call(character_directory, filter, load("res://addons/dialogic/Editor/Images/Resources/character.svg")) + var timeline_items: Array = get_directory_items.call(timeline_directory, filter, get_theme_icon("TripleBar", "EditorIcons")) + + + # BUILD TREE + var root: TreeItem = resource_tree.create_item() + + if sort_mode == SortMode.TYPE: + character_items.sort_custom(_sort_by_item_text) + timeline_items.sort_custom(_sort_by_item_text) + if character_items.size() > 0: + var character_tree := add_folder_item("Characters", root) + for item in character_items: + add_item(item, character_tree, current_file) + + if timeline_items.size() > 0: + var timeline_tree := add_folder_item("Timelines", root) + for item in timeline_items: + add_item(item, timeline_tree, current_file) + + if sort_mode == SortMode.NONE: + var all_items := character_items + timeline_items + all_items.sort_custom(_sort_by_item_text) + for item in all_items: + var tree_item = resource_tree.create_item(root) + tree_item.set_text(0, item.text) + tree_item.set_icon(0, item.icon) + tree_item.set_metadata(0, item.metadata) + tree_item.set_tooltip_text(0, item.tooltip) + if item.metadata == current_file: + %CurrentResource.text = item.metadata.get_file() + resource_tree.set_selected(tree_item, 0) + + if sort_mode == SortMode.FOLDER: + var all_items := character_items + timeline_items + var dirs := {} + for item in all_items: + var dir := item.get_parent_directory() as String + if !dirs.has(dir): + dirs[dir] = [] + dirs[dir].append(item) + for dir in dirs: + var dir_item = resource_tree.create_item(root) + dir_item.set_text(0, dir) + dir_item.set_icon(0, get_theme_icon("Folder", "EditorIcons")) + dir_item.set_custom_bg_color(0, get_theme_color("base_color", "Editor")) + for item in dirs[dir]: + var tree_item = resource_tree.create_item(dir_item) + tree_item.set_text(0, item.text) + tree_item.set_icon(0, item.icon) + tree_item.set_metadata(0, item.metadata) + tree_item.set_tooltip_text(0, item.tooltip) + if item.metadata == current_file: + %CurrentResource.text = item.metadata.get_file() + resource_tree.set_selected(tree_item, 0) + + if sort_mode == SortMode.PATH: + var all_items := character_items + timeline_items + var dirs := {} + var regex := RegEx.new() + for item in all_items: + var path := (item.metadata.get_base_dir() as String).replace("res://", "") + regex.compile("(\\w+\\/)?\\w+$") + if !dirs.has(path): + dirs[path] = [] + dirs[path].append(item) + + for dir in dirs: + var dir_display := regex.search(dir).get_string(0) + var dir_item = resource_tree.create_item(root) + var dir_color = ProjectSettings.get_setting("file_customization/folder_colors").get("res://" + dir + "/", get_theme_color("base_color", "Editor")) + var default_color_used = true; + if dir_color as Color != null and Color(dir_color) != get_theme_color("base_color", "Editor"): + dir_color = Color(dir_color) + dir_color.a = 0.2 + dir_color = (dir_color as Color).to_html(true) + default_color_used = false + dir_item.set_text(0, dir_display) + dir_item.set_icon(0, get_theme_icon("Folder", "EditorIcons")) + dir_item.set_custom_bg_color(0, dir_color) + for item in dirs[dir]: + var tree_item = resource_tree.create_item(dir_item) + tree_item.set_text(0, item.text) + tree_item.set_icon(0, item.icon) + tree_item.set_metadata(0, item.metadata) + if !default_color_used: + dir_color = Color(dir_color) + dir_color.a = 0.1 + dir_color = (dir_color as Color).to_html(true) + tree_item.set_custom_bg_color(0, dir_color) + tree_item.set_tooltip_text(0, item.tooltip) + if item.metadata == current_file: + %CurrentResource.text = item.metadata.get_file() + resource_tree.set_selected(tree_item, 0) + + if %CurrentResource.text != "No Resource": + %CurrentResource.add_theme_color_override( + "font_uneditable_color", get_theme_color("font_color", "Editor") + ) + + DialogicUtil.set_editor_setting("last_resources", resources_list) + + +func add_item(item:ResourceListItem, parent:TreeItem, current_file := "") -> TreeItem: + var tree_item := resource_tree.create_item(parent) + tree_item.set_text(0, item.text) + tree_item.set_icon(0, item.icon) + tree_item.set_metadata(0, item.metadata) + tree_item.set_tooltip_text(0, item.tooltip) + if item.metadata == current_file: + %CurrentResource.text = item.metadata.get_file() + resource_tree.set_selected(tree_item, 0) + return tree_item + + +func add_folder_item(label: String, parent:TreeItem) -> TreeItem: + var folder_item := resource_tree.create_item(parent) + folder_item.set_text(0, label) + folder_item.set_icon(0, get_theme_icon("Folder", "EditorIcons")) + folder_item.set_custom_bg_color(0, get_theme_color("base_color", "Editor")) + return folder_item + + +func _on_resources_tree_item_activated() -> void: + if resource_tree.get_selected() == null: + return + var item := resource_tree.get_selected() + if item.get_metadata(0) == null: + return + edit_resource(item.get_metadata(0)) + + +func _on_resources_tree_item_clicked(_pos: Vector2, mouse_button_index: int) -> void: + if mouse_button_index == MOUSE_BUTTON_LEFT: + var selected_item := resource_tree.get_selected() + if selected_item == null: + return + if selected_item.get_metadata(0) == null: + return + var resource_item := load(selected_item.get_metadata(0)) + call_deferred("edit_resource", resource_item) + return + if mouse_button_index == MOUSE_BUTTON_MIDDLE: + remove_item_from_list(resource_tree.get_selected()) + return + if mouse_button_index == MOUSE_BUTTON_RIGHT: + if resource_tree.get_selected().get_metadata(0): + %RightClickMenu.popup_on_parent(Rect2(get_global_mouse_position(), Vector2())) + (%RightClickMenu as PopupMenu).set_meta("item_clicked", resource_tree.get_selected()) + return + + +func _on_search_text_changed(new_text: String) -> void: + update_resource_list() + var tree_root := resource_tree.get_root() + var tree_items := tree_root.get_children() + if tree_items.size() == 0: + return + for item in tree_items: + if item.get_children().size() > 0: + resource_tree.set_selected(item.get_child(0), 0) + break + + +func _on_search_text_submitted(new_text: String) -> void: + if resource_tree.get_selected() == null: + return + var item := resource_tree.get_selected() + if item.get_metadata(0) == null: + return + edit_resource(item.get_metadata(0)) + %Search.clear() + + +func set_unsaved_indicator(saved: bool = true) -> void: + if saved and %CurrentResource.text.ends_with("(*)"): + %CurrentResource.text = %CurrentResource.text.trim_suffix("(*)") + if not saved and not %CurrentResource.text.ends_with("(*)"): + %CurrentResource.text = %CurrentResource.text + "(*)" + + +func _on_logo_gui_input(event: InputEvent) -> void: + if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: + editors_manager.open_editor(editors_manager.editors["HomePage"].node) + + +func update_content_list(list: PackedStringArray) -> void: + var prev_selected := "" + if %ContentList.is_anything_selected(): + prev_selected = %ContentList.get_item_text(%ContentList.get_selected_items()[0]) + %ContentList.clear() + %ContentList.add_item("~ Top") + for i in list: + if i.is_empty(): + continue + %ContentList.add_item(i) + if i == prev_selected: + %ContentList.select(%ContentList.item_count - 1) + if list.is_empty(): + return + + var current_resource: Resource = editors_manager.get_current_editor().current_resource + + var timeline_directory := DialogicResourceUtil.get_timeline_directory() + var label_directory := DialogicResourceUtil.get_label_cache() + if current_resource != null: + for i in timeline_directory: + if timeline_directory[i] == current_resource.resource_path: + label_directory[i] = list + + # also always store the current timelines labels for easy access + label_directory[""] = list + + DialogicResourceUtil.set_label_cache(label_directory) + + +func remove_item_from_list(item: TreeItem) -> void: + var new_list := [] + for entry in DialogicUtil.get_editor_setting("last_resources", []): + if entry != item.get_metadata(0): + new_list.append(entry) + DialogicUtil.set_editor_setting("last_resources", new_list) + update_resource_list(new_list) + + +func _on_right_click_menu_id_pressed(id: int) -> void: + match id: + 1: # REMOVE ITEM FROM LIST + remove_item_from_list(%RightClickMenu.get_meta("item_clicked")) + 2: # OPEN IN FILESYSTEM + EditorInterface.get_file_system_dock().navigate_to_path( + %RightClickMenu.get_meta("item_clicked").get_metadata(0) + ) + 3: # OPEN IN EXTERNAL EDITOR + OS.shell_open( + ProjectSettings.globalize_path( + %RightClickMenu.get_meta("item_clicked").get_metadata(0) + ) + ) + 4: # COPY IDENTIFIER + DisplayServer.clipboard_set( + DialogicResourceUtil.get_unique_identifier( + %RightClickMenu.get_meta("item_clicked").get_metadata(0) + ) + ) + + +func _on_sort_changed(idx: int) -> void: + if (SortMode as Dictionary).values().has(idx): + sort_mode = idx + DialogicUtil.set_editor_setting("sidebar_sort_mode", idx) + update_resource_list() + else: + sort_mode = SortMode.TYPE + print("Invalid sort mode: ", idx) + + +func _sort_by_item_text(a: ResourceListItem, b: ResourceListItem) -> bool: + return a.text < b.text + + +func edit_resource(resource_item: Variant) -> void: + if resource_item is Resource: + editors_manager.edit_resource(resource_item) + else: + editors_manager.edit_resource(load(resource_item)) + + + + +class ResourceListItem: + extends Object + + var text: String + var index: int = -1 + var icon: Texture + var metadata: String + var tooltip: String + + func _to_string() -> String: + return JSON.stringify( + { + "text": text, + "index": index, + "icon": icon.resource_path, + "metadata": metadata, + "tooltip": tooltip, + "parent_dir": get_parent_directory() + }, + "\t", + false + ) + + func add_to_item_list(item_list: ItemList, current_file: String) -> void: + item_list.add_item(text, icon) + item_list.set_item_metadata(item_list.item_count - 1, metadata) + item_list.set_item_tooltip(item_list.item_count - 1, tooltip) + + func get_parent_directory() -> String: + return (metadata.get_base_dir() as String).split("/")[-1] + + func current_file(sidebar: Control, resource_list: ItemList, current_file: String) -> void: + if metadata == current_file: + resource_list.select(index) + resource_list.set_item_custom_fg_color( + index, resource_list.get_theme_color("accent_color", "Editor") + ) + sidebar.find_child("CurrentResource").text = metadata.get_file() diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/toolbar.gd b/addons/dialogic-main/addons/dialogic/Editor/Common/toolbar.gd new file mode 100644 index 0000000..e49c1ea --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/toolbar.gd @@ -0,0 +1,49 @@ +@tool +extends HBoxContainer + +# Dialogic Editor toolbar. Works together with editors_mangager. + +################################################################################ +## EDITOR BUTTONS/LABELS +################################################################################ +func _ready() -> void: + if owner.get_parent() is SubViewport: + return + %CustomButtons.custom_minimum_size.y = 33 * DialogicUtil.get_editor_scale() + + for child in get_children(): + if child is Button: + child.queue_free() + + +func add_icon_button(icon: Texture, tooltip: String) -> Button: + var button := Button.new() + button.icon = icon + button.tooltip_text = tooltip + button.flat = true + button.size_flags_vertical = Control.SIZE_SHRINK_BEGIN + button.add_theme_color_override('icon_hover_color', get_theme_color('warning_color', 'Editor')) + button.add_theme_stylebox_override('focus', StyleBoxEmpty.new()) + add_child(button) + move_child(button, -2) + return button + + +func add_custom_button(label:String, icon:Texture) -> Button: + var button := Button.new() + button.text = label + button.icon = icon +# button.flat = true + + button.size_flags_vertical = Control.SIZE_SHRINK_BEGIN + %CustomButtons.add_child(button) +# custom_minimum_size.y = button.size.y + return button + + +func hide_all_custom_buttons() -> void: + for button in %CustomButtons.get_children(): + button.hide() + + + diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/unique_identifiers_manager.gd b/addons/dialogic-main/addons/dialogic/Editor/Common/unique_identifiers_manager.gd new file mode 100644 index 0000000..fc7c993 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/unique_identifiers_manager.gd @@ -0,0 +1,95 @@ +@tool +extends PanelContainer + + +func _ready() -> void: + if owner.get_parent() is SubViewport: + return + + %TabB.text = "Unique Identifiers" + %TabB.icon = get_theme_icon("CryptoKey", "EditorIcons") + + owner.get_parent().visibility_changed.connect(func(): if is_visible_in_tree(): open()) + + %RenameNotification.add_theme_color_override("font_color", get_theme_color("warning_color", "Editor")) + + +func open() -> void: + fill_table() + %RenameNotification.hide() + + +func close() -> void: + pass + +func fill_table() -> void: + var t: Tree = %IdentifierTable + t.set_column_expand(1, true) + t.clear() + t.set_column_title(1, "Identifier") + t.set_column_title(0, "Resource Path") + t.set_column_title_alignment(0, 0) + t.set_column_title_alignment(1, 0) + t.create_item() + + for d in [["Characters", 'dch'], ["Timelines", "dtl"]]: + var directory := DialogicResourceUtil.get_directory(d[1]) + var directory_item := t.create_item() + directory_item.set_text(0, d[0]) + directory_item.set_metadata(0, d[1]) + for key in directory: + var item: TreeItem = t.create_item(directory_item) + item.set_text(0, directory[key]) + item.set_text(1, key) + item.set_editable(1, true) + item.set_metadata(1, key) + item.add_button(1, get_theme_icon("Edit", "EditorIcons"), 0, false, "Edit") + + +func _on_identifier_table_item_edited() -> void: + var item: TreeItem = %IdentifierTable.get_edited() + var new_identifier: String = item.get_text(1) + + + if new_identifier == item.get_metadata(1): + return + + if new_identifier.is_empty() or not DialogicResourceUtil.is_identifier_unused(item.get_parent().get_metadata(0), new_identifier): + item.set_text(1, item.get_metadata(1)) + return + + DialogicResourceUtil.change_unique_identifier(item.get_text(0), new_identifier) + + match item.get_parent().get_metadata(0): + 'dch': + owner.get_parent().add_character_name_ref_change(item.get_metadata(1), new_identifier) + 'dtl': + owner.get_parent().add_timeline_name_ref_change(item.get_metadata(1), new_identifier) + + %RenameNotification.show() + item.set_metadata(1, new_identifier) + + +func _on_identifier_table_button_clicked(item: TreeItem, column: int, id: int, mouse_button_index: int) -> void: + item.select(column) + %IdentifierTable.edit_selected(true) + + +func filter_tree(filter:String= "", item:TreeItem = null) -> bool: + if item == null: + item = %IdentifierTable.get_root() + + var any := false + for child in item.get_children(): + if child.get_child_count() > 0: + child.visible = filter_tree(filter, child) + if child.visible: any = true + else: + child.visible = filter.is_empty() or filter.to_lower() in child.get_text(0).to_lower() or filter.to_lower() in child.get_text(1).to_lower() + if child.visible: any = true + + return any + + +func _on_search_text_changed(new_text: String) -> void: + filter_tree(new_text) diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/update_install_window.gd b/addons/dialogic-main/addons/dialogic/Editor/Common/update_install_window.gd new file mode 100644 index 0000000..0d5a498 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/update_install_window.gd @@ -0,0 +1,180 @@ +@tool +extends Control + +var current_info := {} +@onready var editor_view := find_parent('EditorView') + + +func _ready() -> void: + await editor_view.ready + theme = editor_view.theme + + %Install.icon = editor_view.get_theme_icon("AssetLib", "EditorIcons") + %LoadingIcon.texture = editor_view.get_theme_icon("KeyTrackScale", "EditorIcons") + %InstallWarning.modulate = editor_view.get_theme_color("warning_color", "Editor") + %CloseButton.icon = editor_view.get_theme_icon("Close", "EditorIcons") + DialogicUtil.get_dialogic_plugin().get_editor_interface().get_resource_filesystem().resources_reimported.connect(_on_resources_reimported) + + +func open() -> void: + get_parent().popup_centered_ratio(0.5) + get_parent().mode = Window.MODE_WINDOWED + get_parent().move_to_foreground() + get_parent().grab_focus() + + +func load_info(info:Dictionary, update_type:int) -> void: + current_info = info + if update_type == 2: + %State.text = "No Information Available" + %UpdateName.text = "Unable to access versions." + %UpdateName.add_theme_color_override("font_color", editor_view.get_theme_color("readonly_color", "Editor")) + %Content.text = "You are probably not connected to the internet. Fair enough." + %ShortInfo.text = "Huh, what happened here?" + %ReadFull.hide() + %Install.disabled = true + return + + # If we are up to date (or beyond): + if info.is_empty(): + info['name'] = "You are in the future, Marty!" + info["body"] = "# 😎 You are using the WIP branch!\nSeems like you are using a version that isn't even released yet. Be careful and give us your feedback ;)" + info["published_at"] = "????T" + info["author"] = {'login':"???"} + %State.text = "Where are we Doc?" + %UpdateName.add_theme_color_override("font_color", editor_view.get_theme_color("property_color_z", "Editor")) + %Install.disabled = true + + elif update_type == 0: + %State.text = "Update Available!" + %UpdateName.add_theme_color_override("font_color", editor_view.get_theme_color("warning_color", "Editor")) + %Install.disabled = false + else: + %State.text = "You are up to date:" + %UpdateName.add_theme_color_override("font_color", editor_view.get_theme_color("success_color", "Editor")) + %Install.disabled = true + + %UpdateName.text = info.name + %Content.text = markdown_to_bbcode(info.body).get_slice("\n[font_size", 0).strip_edges() + %ShortInfo.text = "Published on "+info.published_at.substr(0, info.published_at.find('T'))+" by "+info.author.login + if info.has("html_url"): + %ReadFull.uri = info.html_url + %ReadFull.show() + else: + %ReadFull.hide() + if info.has('reactions'): + %Reactions.show() + var reactions := {"laugh":"😂", "hooray":"🎉", "confused":"😕", "heart":"❤️", "rocket":"🚀", "eyes":"👀"} + for i in reactions: + %Reactions.get_node(i.capitalize()).visible = info.reactions[i] > 0 + %Reactions.get_node(i.capitalize()).text = reactions[i]+" "+str(info.reactions[i]) if info.reactions[i] > 0 else reactions[i] + if info.reactions['+1']+info.reactions['-1'] > 0: + %Reactions.get_node("Likes").visible = true + %Reactions.get_node("Likes").text = "👍 "+str(info.reactions['+1']+info.reactions['-1']) + else: + %Reactions.get_node("Likes").visible = false + else: + %Reactions.hide() + +func _on_window_close_requested() -> void: + get_parent().visible = false + + +func _on_install_pressed() -> void: + find_parent('UpdateManager').request_update_download() + + %InfoLabel.text = "Downloading. This can take a moment." + %Loading.show() + %LoadingIcon.create_tween().set_loops().tween_property(%LoadingIcon, 'rotation', 2*PI, 1).from(0) + + +func _on_refresh_pressed() -> void: + find_parent('UpdateManager').request_update_check() + + +func _on_update_manager_downdload_completed(result:int): + %Loading.hide() + match result: + 0: # success + %InfoLabel.text = "Installed successfully. Restart needed!" + %InfoLabel.modulate = editor_view.get_theme_color("success_color", "Editor") + %Restart.show() + %Restart.grab_focus() + 1: # failure + %InfoLabel.text = "Download failed." + %InfoLabel.modulate = editor_view.get_theme_color("readonly_color", "Editor") + + +func _on_resources_reimported(resources:Array) -> void: + if is_inside_tree(): + await get_tree().process_frame + get_parent().move_to_foreground() + + +func markdown_to_bbcode(text:String) -> String: + var font_sizes := {1:20, 2:16, 3:16,4:14, 5:14} + var title_regex := RegEx.create_from_string('(^|\n)((?#+)(?.*))\\n') + var res := title_regex.search(text) + while res: + text = text.replace(res.get_string(2), '[font_size='+str(font_sizes[len(res.get_string('level'))])+']'+res.get_string('title').strip_edges()+'[/font_size]') + res = title_regex.search(text) + + var link_regex := RegEx.create_from_string('(?<!\\!)\\[(?<text>[^\\]]*)]\\((?<link>[^)]*)\\)') + res = link_regex.search(text) + while res: + text = text.replace(res.get_string(), '[url='+res.get_string('link')+']'+res.get_string('text').strip_edges()+'[/url]') + res = link_regex.search(text) + + var image_regex := RegEx.create_from_string('\\!\\[(?<text>[^\\]]*)]\\((?<link>[^)]*)\\)\n*') + res = image_regex.search(text) + while res: + text = text.replace(res.get_string(), '[url='+res.get_string('link')+']'+res.get_string('text').strip_edges()+'[/url]') + res = image_regex.search(text) + + var italics_regex := RegEx.create_from_string('\\*(?<text>[^\\*\\n]*)\\*') + res = italics_regex.search(text) + while res: + text = text.replace(res.get_string(), '[i]'+res.get_string('text').strip_edges()+'[/i]') + res = italics_regex.search(text) + + var bullets_regex := RegEx.create_from_string('(?<=\\n)(\\*|-)(?<text>[^\\*\\n]*)\\n') + res = bullets_regex.search(text) + while res: + text = text.replace(res.get_string(), '[ul]'+res.get_string('text').strip_edges()+'[/ul]\n') + res = bullets_regex.search(text) + + var small_code_regex := RegEx.create_from_string('(?<!`)`(?<text>[^`]+)`') + res = small_code_regex.search(text) + while res: + text = text.replace(res.get_string(), '[code][color='+get_theme_color("accent_color", "Editor").to_html()+']'+res.get_string('text').strip_edges()+'[/color][/code]') + res = small_code_regex.search(text) + + var big_code_regex := RegEx.create_from_string('(?<!`)```(?<text>[^`]+)```') + res = big_code_regex.search(text) + while res: + text = text.replace(res.get_string(), '[code][bgcolor='+get_theme_color("box_selection_fill_color", "Editor").to_html()+']'+res.get_string('text').strip_edges()+'[/bgcolor][/code]') + res = big_code_regex.search(text) + + return text + + + +func _on_content_meta_clicked(meta:Variant) -> void: + OS.shell_open(str(meta)) + + +func _on_install_mouse_entered() -> void: + if not %Install.disabled: + %InstallWarning.show() + + +func _on_install_mouse_exited() -> void: + %InstallWarning.hide() + + +func _on_restart_pressed() -> void: + DialogicUtil.get_dialogic_plugin().get_editor_interface().restart_editor(true) + + +func _on_close_button_pressed() -> void: + get_parent().hide() diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/update_install_window.tscn b/addons/dialogic-main/addons/dialogic/Editor/Common/update_install_window.tscn new file mode 100644 index 0000000..9c7788f --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/update_install_window.tscn @@ -0,0 +1,308 @@ +[gd_scene load_steps=9 format=3 uid="uid://vv3m5m68fwg7"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Common/update_install_window.gd" id="1_p1pbx"] +[ext_resource type="Texture2D" uid="uid://dybg3l5pwetne" path="res://addons/dialogic/Editor/Images/plugin-icon.svg" id="2_20ke0"] + +[sub_resource type="Gradient" id="Gradient_lt7uf"] +colors = PackedColorArray(0.296484, 0.648457, 1, 1, 0.732014, 0.389374, 1, 1) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_nl8ke"] +gradient = SubResource("Gradient_lt7uf") +fill_from = Vector2(0.151515, 0.272727) +fill_to = Vector2(1, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1g1am"] +content_margin_left = 0.0 +content_margin_top = 15.0 +content_margin_right = 15.0 +content_margin_bottom = 15.0 +bg_color = Color(0.0627451, 0.0627451, 0.0627451, 0.407843) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 +expand_margin_left = 20.0 +expand_margin_right = 20.0 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_j1mw2"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_h4v2s"] +content_margin_left = 5.0 +content_margin_top = 3.0 +content_margin_right = 5.0 +content_margin_bottom = 3.0 +bg_color = Color(0, 0, 0, 0.631373) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_utju1"] +content_margin_left = 5.0 +content_margin_top = 3.0 +content_margin_right = 5.0 +content_margin_bottom = 3.0 +bg_color = Color(0.0470588, 0.0470588, 0.0470588, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[node name="UpdateInstallWindow" type="ColorRect"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0.207843, 0.129412, 0.372549, 1) +script = ExtResource("1_p1pbx") + +[node name="TextureRect" type="TextureRect" parent="."] +modulate = Color(0.447059, 0.447059, 0.447059, 1) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = SubResource("GradientTexture2D_nl8ke") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 14.0 +offset_top = 13.0 +offset_right = -14.0 +offset_bottom = -13.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="Control" type="Control" parent="VBoxContainer/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 7 + +[node name="VBox" type="VBoxContainer" parent="VBoxContainer/HBoxContainer2"] +custom_minimum_size = Vector2(450, 0) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 3.74 +alignment = 1 + +[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer/HBoxContainer2/VBox"] +clip_contents = false +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +alignment = 1 + +[node name="Panel" type="PanelContainer" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer"] +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_1g1am") + +[node name="VBox" type="VBoxContainer" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Panel"] +layout_mode = 2 +theme_override_constants/separation = -8 + +[node name="State" type="Label" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Panel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"DialogicSubTitle" +text = "Update Available!" + +[node name="UpdateName" type="Label" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Panel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"DialogicTitle" +theme_override_font_sizes/font_size = 25 +text = "Dialogic 2.0 - alpha 9" +uppercase = true + +[node name="ShortInfo" type="Label" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Panel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"DialogicHintText2" +theme_override_font_sizes/font_size = 10 +text = "12/31/23" + +[node name="Refresh" type="Button" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Panel"] +layout_mode = 2 +size_flags_horizontal = 8 +size_flags_vertical = 0 +text = "Refresh +" +flat = true + +[node name="Content" type="RichTextLabel" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_font_sizes/normal_font_size = 14 +theme_override_styles/normal = SubResource("StyleBoxEmpty_j1mw2") +bbcode_enabled = true +text = "[font_size=25]🎉 New alpha, new stuff![/font_size] +If you are using dialogic 2 alphas then we've got an exciting update. It's not the beta yet, but we are getting closer! As always if you have questions or feedback it's best to reach out on [url=https://discord.gg/2hHQzkf2pX]emilios discord[/url]. + +This alpha brings a couple of very useful new features to dialogic as well as some syntax changes and a design overhaul (and many, many bug fixes). +" +fit_content = true + +[node name="Reactions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="Likes" type="Label" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Reactions"] +layout_mode = 2 +theme_override_font_sizes/font_size = 14 +theme_override_styles/normal = SubResource("StyleBoxFlat_h4v2s") +text = "👍12" + +[node name="Hooray" type="Label" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Reactions"] +layout_mode = 2 +theme_override_font_sizes/font_size = 14 +theme_override_styles/normal = SubResource("StyleBoxFlat_h4v2s") +text = "🎉12" + +[node name="Laugh" type="Label" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Reactions"] +layout_mode = 2 +theme_override_font_sizes/font_size = 14 +theme_override_styles/normal = SubResource("StyleBoxFlat_h4v2s") +text = "👀12" + +[node name="Heart" type="Label" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Reactions"] +layout_mode = 2 +theme_override_font_sizes/font_size = 14 +theme_override_styles/normal = SubResource("StyleBoxFlat_h4v2s") +text = "❤️12" + +[node name="Rocket" type="Label" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Reactions"] +layout_mode = 2 +theme_override_font_sizes/font_size = 14 +theme_override_styles/normal = SubResource("StyleBoxFlat_h4v2s") +text = "😕12" + +[node name="Eyes" type="Label" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Reactions"] +layout_mode = 2 +theme_override_font_sizes/font_size = 14 +theme_override_styles/normal = SubResource("StyleBoxFlat_h4v2s") +text = "🚀12" + +[node name="Confused" type="Label" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Reactions"] +layout_mode = 2 +theme_override_font_sizes/font_size = 14 +theme_override_styles/normal = SubResource("StyleBoxFlat_h4v2s") +text = "😂12" + +[node name="ReadFull" type="LinkButton" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Reactions"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 10 +text = "Read Full Announcement" + +[node name="Control" type="Control" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer"] +custom_minimum_size = Vector2(0, 20) +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer"] +layout_mode = 2 +alignment = 2 + +[node name="InfoLabel" type="Label" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +horizontal_alignment = 2 +autowrap_mode = 3 + +[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/HBoxContainer"] +self_modulate = Color(0, 0, 0, 1) +layout_mode = 2 +size_flags_horizontal = 4 +theme_override_styles/panel = SubResource("StyleBoxFlat_h4v2s") + +[node name="HBox" type="HBoxContainer" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/HBoxContainer/PanelContainer"] +layout_mode = 2 +alignment = 2 + +[node name="Loading" type="CenterContainer" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/HBoxContainer/PanelContainer/HBox"] +unique_name_in_owner = true +visible = false +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 + +[node name="Control" type="Control" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/HBoxContainer/PanelContainer/HBox/Loading"] +layout_mode = 2 + +[node name="LoadingIcon" type="Sprite2D" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/HBoxContainer/PanelContainer/HBox/Loading/Control"] +unique_name_in_owner = true +texture = ExtResource("2_20ke0") + +[node name="Restart" type="Button" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/HBoxContainer/PanelContainer/HBox"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +size_flags_vertical = 4 +text = "Restart Now" +flat = true + +[node name="Install" type="Button" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/HBoxContainer/PanelContainer/HBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 4 +text = "Install" +flat = true + +[node name="InstallWarning" type="PanelContainer" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/HBoxContainer/PanelContainer/HBox/Install"] +unique_name_in_owner = true +visible = false +self_modulate = Color(0, 0, 0, 1) +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -493.0 +offset_top = -92.0 +offset_right = 5.0 +offset_bottom = -8.0 +grow_horizontal = 0 +theme_override_styles/panel = SubResource("StyleBoxFlat_utju1") + +[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/HBoxContainer/PanelContainer/HBox/Install/InstallWarning"] +layout_mode = 2 +theme_override_font_sizes/font_size = 14 +text = "Be careful. This will delete the addons/dialogic folder and install the new version. Any custom changes in that folder will be lost. +To be on the save side, use version control!" +autowrap_mode = 3 + +[node name="Control2" type="Control" parent="VBoxContainer/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 7 + +[node name="Close" type="HBoxContainer" parent="VBoxContainer"] +layout_mode = 2 +alignment = 1 + +[node name="CloseButton" type="Button" parent="VBoxContainer/Close"] +unique_name_in_owner = true +layout_mode = 2 +text = "Close" + +[connection signal="pressed" from="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Panel/Refresh" to="." method="_on_refresh_pressed"] +[connection signal="meta_clicked" from="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/Content" to="." method="_on_content_meta_clicked"] +[connection signal="pressed" from="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/HBoxContainer/PanelContainer/HBox/Restart" to="." method="_on_restart_pressed"] +[connection signal="mouse_entered" from="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/HBoxContainer/PanelContainer/HBox/Install" to="." method="_on_install_mouse_entered"] +[connection signal="mouse_exited" from="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/HBoxContainer/PanelContainer/HBox/Install" to="." method="_on_install_mouse_exited"] +[connection signal="pressed" from="VBoxContainer/HBoxContainer2/VBox/ScrollContainer/VBoxContainer/HBoxContainer/PanelContainer/HBox/Install" to="." method="_on_install_pressed"] +[connection signal="pressed" from="VBoxContainer/Close/CloseButton" to="." method="_on_close_button_pressed"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Common/update_manager.gd b/addons/dialogic-main/addons/dialogic/Editor/Common/update_manager.gd new file mode 100644 index 0000000..36a116e --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Common/update_manager.gd @@ -0,0 +1,192 @@ +@tool +extends Node + +## Script that checks for new versions and can install them. + +signal update_check_completed(result:UpdateCheckResult) +signal downdload_completed(result:DownloadResult) + +enum UpdateCheckResult {UPDATE_AVAILABLE, UP_TO_DATE, NO_ACCESS} +enum DownloadResult {SUCCESS, FAILURE} +enum ReleaseState {ALPHA, BETA, STABLE} + +const REMOTE_RELEASES_URL := "https://api.github.com/repos/dialogic-godot/dialogic/releases" +const TEMP_FILE_NAME := "user://temp.zip" + +var current_version := "" +var update_info: Dictionary +var current_info: Dictionary + +var version_indicator: Button + +func _ready() -> void: + request_update_check() + + setup_version_indicator() + + + +func get_current_version() -> String: + var plugin_cfg := ConfigFile.new() + plugin_cfg.load("res://addons/dialogic/plugin.cfg") + return plugin_cfg.get_value('plugin', 'version', 'unknown version') + + +func request_update_check() -> void: + if $UpdateCheckRequest.get_http_client_status() == HTTPClient.STATUS_DISCONNECTED: + $UpdateCheckRequest.request(REMOTE_RELEASES_URL) + + +func _on_UpdateCheck_request_completed(result:int, response_code:int, headers:PackedStringArray, body:PackedByteArray) -> void: + if result != HTTPRequest.RESULT_SUCCESS: + update_check_completed.emit(UpdateCheckResult.NO_ACCESS) + return + + # Work out the next version from the releases information on GitHub + var response: Variant = JSON.parse_string(body.get_string_from_utf8()) + if typeof(response) != TYPE_ARRAY: return + + + var current_release_info := get_release_tag_info(get_current_version()) + + # GitHub releases are in order of creation, not order of version + var versions: Array = (response as Array).filter(compare_versions.bind(current_release_info)) + if versions.size() > 0: + update_info = versions[0] + update_check_completed.emit(UpdateCheckResult.UPDATE_AVAILABLE) + else: + update_info = current_info + update_check_completed.emit(UpdateCheckResult.UP_TO_DATE) + + +func compare_versions(release, current_release_info:Dictionary) -> bool: + var checked_release_info := get_release_tag_info(release.tag_name) + + if checked_release_info.major < current_release_info.major: + return false + + if checked_release_info.minor < current_release_info.minor: + return false + + if checked_release_info.state < current_release_info.state: + return false + + elif checked_release_info.state == current_release_info.state: + if checked_release_info.state_version < current_release_info.state_version: + return false + + if checked_release_info.state_version == current_release_info.state_version: + current_info = release + return false + + if checked_release_info.state == ReleaseState.STABLE: + if checked_release_info.minor == current_release_info.minor: + current_info = release + return false + + return true + + +func get_release_tag_info(release_tag:String) -> Dictionary: + release_tag = release_tag.strip_edges().trim_prefix('v') + release_tag = release_tag.substr(0, release_tag.find('(')) + release_tag = release_tag.to_lower() + + var regex := RegEx.create_from_string(r"(?<major>\d+\.\d+)(-(?<state>alpha|beta)-)?(?(2)(?<stateversion>\d*)|\.(?<minor>\d*))?") + + var result: RegExMatch = regex.search(release_tag) + if !result: + return {} + + var info: Dictionary = {'tag':release_tag} + info['major'] = float(result.get_string('major')) + info['minor'] = int(result.get_string('minor')) + + match result.get_string('state'): + 'alpha': + info['state'] = ReleaseState.ALPHA + 'beta': + info['state'] = ReleaseState.BETA + _: + info['state'] = ReleaseState.STABLE + + info['state_version'] = int(result.get_string('stateversion')) + + return info + + +func request_update_download() -> void: + # Safeguard the actual dialogue manager repo from accidentally updating itself + if DirAccess.dir_exists_absolute("res://test-project/"): + prints("[Dialogic] Looks like you are working on the addon. You can't update the addon from within itself.") + downdload_completed.emit(DownloadResult.FAILURE) + return + + $DownloadRequest.request(update_info.zipball_url) + + +func _on_DownloadRequest_completed(result:int, response_code:int, headers:PackedStringArray, body:PackedByteArray): + if result != HTTPRequest.RESULT_SUCCESS: + downdload_completed.emit(DownloadResult.FAILURE) + return + + # Save the downloaded zip + var zip_file: FileAccess = FileAccess.open(TEMP_FILE_NAME, FileAccess.WRITE) + zip_file.store_buffer(body) + zip_file.close() + + OS.move_to_trash(ProjectSettings.globalize_path("res://addons/dialogic")) + + var zip_reader: ZIPReader = ZIPReader.new() + zip_reader.open(TEMP_FILE_NAME) + var files: PackedStringArray = zip_reader.get_files() + + var base_path: String = files[0].path_join('addons/') + for path in files: + if not "dialogic/" in path: + continue + + var new_file_path: String = path.replace(base_path, "") + if path.ends_with("/"): + DirAccess.make_dir_recursive_absolute("res://addons/".path_join(new_file_path)) + else: + var file: FileAccess = FileAccess.open("res://addons/".path_join(new_file_path), FileAccess.WRITE) + file.store_buffer(zip_reader.read_file(path)) + + zip_reader.close() + DirAccess.remove_absolute(TEMP_FILE_NAME) + + downdload_completed.emit(DownloadResult.SUCCESS) + + +###################### SOME UI MANAGEMENT ##################################### +################################################################################ + +func setup_version_indicator() -> void: + version_indicator = %Sidebar.get_node('%CurrentVersion') + version_indicator.pressed.connect($Window/UpdateInstallWindow.open) + version_indicator.text = get_current_version() + + +func _on_update_check_completed(result:int): + var result_color: Color + match result: + UpdateCheckResult.UPDATE_AVAILABLE: + result_color = version_indicator.get_theme_color("warning_color", "Editor") + version_indicator.icon = version_indicator.get_theme_icon("StatusWarning", "EditorIcons") + $Window/UpdateInstallWindow.load_info(update_info, result) + UpdateCheckResult.UP_TO_DATE: + result_color = version_indicator.get_theme_color("success_color", "Editor") + version_indicator.icon = version_indicator.get_theme_icon("StatusSuccess", "EditorIcons") + $Window/UpdateInstallWindow.load_info(current_info, result) + UpdateCheckResult.NO_ACCESS: + result_color = version_indicator.get_theme_color("success_color", "Editor") + version_indicator.icon = version_indicator.get_theme_icon("GuiRadioCheckedDisabled", "EditorIcons") + $Window/UpdateInstallWindow.load_info(update_info, result) + + version_indicator.add_theme_color_override('font_color', result_color) + version_indicator.add_theme_color_override('font_hover_color', result_color.lightened(0.5)) + version_indicator.add_theme_color_override('font_pressed_color', result_color) + version_indicator.add_theme_color_override('font_focus_color', result_color) + + diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/BranchEnd.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/BranchEnd.gd new file mode 100644 index 0000000..d43ebe3 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/BranchEnd.gd @@ -0,0 +1,85 @@ +@tool +extends Control +## A scene shown at the end of events that contain other events + +var resource: DialogicEndBranchEvent + +# References +var parent_node: Control = null +var end_control: Control = null + +# Indent +var indent_size := 22 +var current_indent_level := 1 + +var selected := false + +func _ready() -> void: + $Icon.icon = get_theme_icon("GuiSpinboxUpdown", "EditorIcons") + $Spacer.custom_minimum_size.x = 90 * DialogicUtil.get_editor_scale() + visual_deselect() + parent_node_changed() + + +## Called by the visual timeline editor +func visual_select() -> void: + modulate = get_theme_color("highlighted_font_color", "Editor") + selected = true + + +## Called by the visual timeline editor +func visual_deselect() -> void: + if !parent_node:return + selected = false + modulate = parent_node.resource.event_color.lerp(get_theme_color("font_color", "Editor"), 0.3) + + +func is_selected() -> bool: + return selected + + +## Called by the visual timeline editor +func highlight() -> void: + if !parent_node:return + modulate = parent_node.resource.event_color.lerp(get_theme_color("font_color", "Editor"), 0.6) + + +## Called by the visual timeline editor +func unhighlight() -> void: + modulate = parent_node.resource.event_color + + +func update_hidden_events_indicator(hidden_events_count:int = 0) -> void: + $HiddenEventsLabel.visible = hidden_events_count > 0 + if hidden_events_count == 1: + $HiddenEventsLabel.text = "[1 event hidden]" + else: + $HiddenEventsLabel.text = "["+str(hidden_events_count)+ " events hidden]" + + +## Called by the visual timeline editor +func set_indent(indent: int) -> void: + $Indent.custom_minimum_size = Vector2(indent_size * indent * DialogicUtil.get_editor_scale(), 0) + $Indent.visible = indent != 0 + current_indent_level = indent + queue_redraw() + + +## Called by the visual timeline editor if something was edited on the parent event block +func parent_node_changed() -> void: + if parent_node and end_control and end_control.has_method('refresh'): + end_control.refresh() + + +## Called on creation if the parent event provides an end control +func add_end_control(control:Control) -> void: + if !control: + return + add_child(control) + control.size_flags_vertical = SIZE_SHRINK_CENTER + if "parent_resource" in control: + control.parent_resource = parent_node.resource + if control.has_method('refresh'): + control.refresh() + end_control = control + diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/BranchEnd.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/BranchEnd.tscn new file mode 100644 index 0000000..9f4147b --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/BranchEnd.tscn @@ -0,0 +1,48 @@ +[gd_scene load_steps=4 format=3 uid="uid://de13fdeebrkcb"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/BranchEnd.gd" id="1"] + +[sub_resource type="Image" id="Image_8jrl8"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_44ap0"] +image = SubResource("Image_8jrl8") + +[node name="EndBranch" type="HBoxContainer"] +anchors_preset = 10 +anchor_right = 1.0 +offset_bottom = 24.0 +grow_horizontal = 2 +mouse_filter = 0 +script = ExtResource("1") + +[node name="Indent" type="Control" parent="."] +layout_mode = 2 +size_flags_vertical = 0 + +[node name="Spacer" type="Control" parent="."] +custom_minimum_size = Vector2(90, 0) +layout_mode = 2 +size_flags_vertical = 0 + +[node name="Icon" type="Button" parent="."] +unique_name_in_owner = true +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +size_flags_vertical = 4 +tooltip_text = "Click and drag" +focus_mode = 0 +mouse_filter = 1 +icon = SubResource("ImageTexture_44ap0") +flat = true + +[node name="HiddenEventsLabel" type="Label" parent="."] +visible = false +layout_mode = 2 +text = "XX Events hidden" diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/EventBlock/event_block.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/EventBlock/event_block.gd new file mode 100644 index 0000000..f5c39d3 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/EventBlock/event_block.gd @@ -0,0 +1,419 @@ +@tool +extends MarginContainer + +## Scene that represents an event in the visual timeline editor. + +signal content_changed() + +## REFERENCES +var resource: DialogicEvent +var editor_reference +# for choice and condition +var end_node: Node = null: + get: + return end_node + set(node): + end_node = node + %ToggleChildrenVisibilityButton.visible = true if end_node else false + + +## FLAGS +var selected := false +# Whether the body is visible +var expanded := true +var body_was_build := false +var has_any_enabled_body_content := false +# Whether contained events (e.g. in choices) are visible +var collapsed := false + + +## CONSTANTS +const icon_size := 28 +const indent_size := 22 + +## STATE +# List that stores visibility conditions +var field_list := [] +var current_indent_level := 1 + + +#region UI AND LOGIC INITIALIZATION +################################################################################ + +func _ready() -> void: + if get_parent() is SubViewport: + return + + if not resource: + printerr("[Dialogic] Event block was added without a resource specified.") + return + + initialize_ui() + initialize_logic() + + +func initialize_ui() -> void: + var _scale := DialogicUtil.get_editor_scale() + + $PanelContainer.self_modulate = get_theme_color("accent_color", "Editor") + + # Warning Icon + %Warning.texture = get_theme_icon("NodeWarning", "EditorIcons") + %Warning.size = Vector2(16 * _scale, 16 * _scale) + %Warning.position = Vector2(-5 * _scale, -10 * _scale) + + # Expand Button + %ToggleBodyVisibilityButton.icon = get_theme_icon("CodeFoldedRightArrow", "EditorIcons") + %ToggleBodyVisibilityButton.set("theme_override_colors/icon_normal_color", get_theme_color("contrast_color_2", "Editor")) + %ToggleBodyVisibilityButton.set("theme_override_colors/icon_hover_color", get_theme_color("accent_color", "Editor")) + %ToggleBodyVisibilityButton.set("theme_override_colors/icon_pressed_color", get_theme_color("contrast_color_2", "Editor")) + %ToggleBodyVisibilityButton.set("theme_override_colors/icon_hover_pressed_color", get_theme_color("accent_color", "Editor")) + %ToggleBodyVisibilityButton.add_theme_stylebox_override('hover_pressed', StyleBoxEmpty.new()) + + # Icon Panel + %IconPanel.tooltip_text = resource.event_name + %IconPanel.self_modulate = resource.event_color + + # Event Icon + %IconTexture.texture = resource._get_icon() + + %IconPanel.custom_minimum_size = Vector2(icon_size, icon_size) * _scale + %IconTexture.custom_minimum_size = %IconPanel.custom_minimum_size + + var custom_style: StyleBoxFlat = %IconPanel.get_theme_stylebox('panel') + custom_style.set_corner_radius_all(5 * _scale) + + # Focus Mode + set_focus_mode(1) # Allowing this node to grab focus + + # Separation on the header + %Header.add_theme_constant_override("custom_constants/separation", 5 * _scale) + + # Collapse Button + %ToggleChildrenVisibilityButton.toggled.connect(_on_collapse_toggled) + %ToggleChildrenVisibilityButton.icon = get_theme_icon("Collapse", "EditorIcons") + %ToggleChildrenVisibilityButton.hide() + + %Body.add_theme_constant_override("margin_left", icon_size * _scale) + + visual_deselect() + + +func initialize_logic() -> void: + resized.connect(get_parent().get_parent().queue_redraw) + + resource.ui_update_needed.connect(_on_resource_ui_update_needed) + resource.ui_update_warning.connect(set_warning) + + content_changed.connect(recalculate_field_visibility) + + _on_ToggleBodyVisibility_toggled(resource.expand_by_default or resource.created_by_button) + +#endregion + + +#region VISUAL METHODS +################################################################################ + +func visual_select() -> void: + $PanelContainer.add_theme_stylebox_override('panel', load("res://addons/dialogic/Editor/Events/styles/selected_styleboxflat.tres")) + selected = true + %IconPanel.self_modulate = resource.event_color + %IconTexture.modulate = get_theme_color("icon_saturation", "Editor") + + +func visual_deselect() -> void: + $PanelContainer.add_theme_stylebox_override('panel', load("res://addons/dialogic/Editor/Events/styles/unselected_stylebox.tres")) + selected = false + %IconPanel.self_modulate = resource.event_color.lerp(Color.DARK_SLATE_GRAY, 0.1) + %IconTexture.modulate = get_theme_color('font_color', 'Label') + + +func is_selected() -> bool: + return selected + + +func set_warning(text:String= "") -> void: + if !text.is_empty(): + %Warning.show() + %Warning.tooltip_text = text + else: + %Warning.hide() + + +func set_indent(indent: int) -> void: + add_theme_constant_override("margin_left", indent_size * indent * DialogicUtil.get_editor_scale()) + current_indent_level = indent + +#endregion + + +#region EVENT FIELDS +################################################################################ + +var FIELD_SCENES := { + DialogicEvent.ValueType.MULTILINE_TEXT: "res://addons/dialogic/Editor/Events/Fields/field_text_multiline.tscn", + DialogicEvent.ValueType.SINGLELINE_TEXT: "res://addons/dialogic/Editor/Events/Fields/field_text_singleline.tscn", + DialogicEvent.ValueType.FILE: "res://addons/dialogic/Editor/Events/Fields/field_file.tscn", + DialogicEvent.ValueType.BOOL: "res://addons/dialogic/Editor/Events/Fields/field_bool_check.tscn", + DialogicEvent.ValueType.BOOL_BUTTON: "res://addons/dialogic/Editor/Events/Fields/field_bool_button.tscn", + DialogicEvent.ValueType.CONDITION: "res://addons/dialogic/Editor/Events/Fields/field_condition.tscn", + DialogicEvent.ValueType.ARRAY: "res://addons/dialogic/Editor/Events/Fields/field_array.tscn", + DialogicEvent.ValueType.DICTIONARY: "res://addons/dialogic/Editor/Events/Fields/field_dictionary.tscn", + DialogicEvent.ValueType.DYNAMIC_OPTIONS: "res://addons/dialogic/Editor/Events/Fields/field_options_dynamic.tscn", + DialogicEvent.ValueType.FIXED_OPTIONS : "res://addons/dialogic/Editor/Events/Fields/field_options_fixed.tscn", + DialogicEvent.ValueType.NUMBER: "res://addons/dialogic/Editor/Events/Fields/field_number.tscn", + DialogicEvent.ValueType.VECTOR2: "res://addons/dialogic/Editor/Events/Fields/field_vector2.tscn", + DialogicEvent.ValueType.VECTOR3: "res://addons/dialogic/Editor/Events/Fields/field_vector3.tscn", + DialogicEvent.ValueType.VECTOR4: "res://addons/dialogic/Editor/Events/Fields/field_vector4.tscn", + DialogicEvent.ValueType.COLOR: "res://addons/dialogic/Editor/Events/Fields/field_color.tscn" + } + +func build_editor(build_header:bool = true, build_body:bool = false) -> void: + var current_body_container: HFlowContainer = null + + if build_body and body_was_build: + build_body = false + + if build_body: + if body_was_build: + return + current_body_container = HFlowContainer.new() + %BodyContent.add_child(current_body_container) + body_was_build = true + + for p in resource.get_event_editor_info(): + field_list.append({'node':null, 'location':p.location}) + if p.has('condition'): + field_list[-1]['condition'] = p.condition + + if !build_body and p.location == 1: + continue + elif !build_header and p.location == 0: + continue + + ### -------------------------------------------------------------------- + ### 1. CREATE A NODE OF THE CORRECT TYPE FOR THE PROPERTY + var editor_node: Control + + ### LINEBREAK + if p.name == "linebreak": + field_list.remove_at(field_list.size()-1) + if !current_body_container.get_child_count(): + current_body_container.queue_free() + current_body_container = HFlowContainer.new() + %BodyContent.add_child(current_body_container) + continue + + elif p.field_type in FIELD_SCENES: + editor_node = load(FIELD_SCENES[p.field_type]).instantiate() + + elif p.field_type == resource.ValueType.LABEL: + editor_node = Label.new() + editor_node.text = p.display_info.text + editor_node.vertical_alignment = VERTICAL_ALIGNMENT_CENTER + editor_node.set('custom_colors/font_color', Color("#7b7b7b")) + editor_node.add_theme_color_override('font_color', resource.event_color.lerp(get_theme_color("font_color", "Editor"), 0.8)) + + elif p.field_type == resource.ValueType.BUTTON: + editor_node = Button.new() + editor_node.text = p.display_info.text + editor_node.tooltip_text = p.display_info.get('tooltip', '') + if typeof(p.display_info.icon) == TYPE_ARRAY: + editor_node.icon = callv('get_theme_icon', p.display_info.icon) + else: + editor_node.icon = p.display_info.icon + editor_node.flat = true + editor_node.custom_minimum_size.x = 30 * DialogicUtil.get_editor_scale() + editor_node.pressed.connect(p.display_info.callable) + + ## CUSTOM + elif p.field_type == resource.ValueType.CUSTOM: + if p.display_info.has('path'): + editor_node = load(p.display_info.path).instantiate() + + ## ELSE + else: + editor_node = Label.new() + editor_node.text = p.name + editor_node.add_theme_color_override('font_color', resource.event_color.lerp(get_theme_color("font_color", "Editor"), 0.8)) + + + field_list[-1]['node'] = editor_node + ### -------------------------------------------------------------------- + # Some things need to be called BEFORE the field is added to the tree + if editor_node is DialogicVisualEditorField: + editor_node.event_resource = resource + + editor_node.property_name = p.name + field_list[-1]['property'] = p.name + + editor_node._load_display_info(p.display_info) + + var location: Control = %HeaderContent + if p.location == 1: + location = current_body_container + location.add_child(editor_node) + + # Some things need to be called AFTER the field is added to the tree + if editor_node is DialogicVisualEditorField: + # Only set the value if the field is visible + # + # This prevents events with varied value types (event_setting, event_variable) + # from injecting incorrect types into hidden fields, which then throw errors + # in the console. + if p.has('condition') and not p.condition.is_empty(): + if _evaluate_visibility_condition(p): + editor_node._set_value(resource.get(p.name)) + else: + editor_node._set_value(resource.get(p.name)) + + editor_node.value_changed.connect(set_property) + + editor_node.tooltip_text = p.display_info.get('tooltip', '') + + # Apply autofocus + if resource.created_by_button and p.display_info.get('autofocus', false): + editor_node.call_deferred('take_autofocus') + + ### -------------------------------------------------------------------- + ### 4. ADD LEFT AND RIGHT TEXT + var left_label: Label = null + var right_label: Label = null + if !p.get('left_text', '').is_empty(): + left_label = Label.new() + left_label.text = p.get('left_text') + left_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER + left_label.add_theme_color_override('font_color', resource.event_color.lerp(get_theme_color("font_color", "Editor"), 0.8)) + location.add_child(left_label) + location.move_child(left_label, editor_node.get_index()) + if !p.get('right_text', '').is_empty(): + right_label = Label.new() + right_label.text = p.get('right_text') + right_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER + right_label.add_theme_color_override('font_color', resource.event_color.lerp(get_theme_color("font_color", "Editor"), 0.8)) + location.add_child(right_label) + location.move_child(right_label, editor_node.get_index()+1) + + ### -------------------------------------------------------------------- + ### 5. REGISTER CONDITION + if p.has('condition'): + field_list[-1]['condition'] = p.condition + if left_label: + field_list.append({'node': left_label, 'condition':p.condition, 'location':p.location}) + if right_label: + field_list.append({'node': right_label, 'condition':p.condition, 'location':p.location}) + + + if build_body: + if current_body_container.get_child_count() == 0: + expanded = false + %Body.visible = false + + recalculate_field_visibility() + + +func recalculate_field_visibility() -> void: + has_any_enabled_body_content = false + for p in field_list: + if !p.has('condition') or p.condition.is_empty(): + if p.node != null: + p.node.show() + if p.location == 1: + has_any_enabled_body_content = true + else: + if _evaluate_visibility_condition(p): + if p.node != null: + if p.node.visible == false and p.has("property"): + p.node._set_value(resource.get(p.property)) + p.node.show() + if p.location == 1: + has_any_enabled_body_content = true + else: + if p.node != null: + p.node.hide() + %ToggleBodyVisibilityButton.visible = has_any_enabled_body_content + + +func set_property(property_name:String, value:Variant) -> void: + resource.set(property_name, value) + content_changed.emit() + if end_node: + end_node.parent_node_changed() + + +func _evaluate_visibility_condition(p: Dictionary) -> bool: + var expr := Expression.new() + expr.parse(p.condition) + var result: bool + if expr.execute([], resource): + result = true + else: + result = false + if expr.has_execute_failed(): + printerr("[Dialogic] Failed executing visibility condition for '",p.get('property', 'unnamed'),"': " + expr.get_error_text()) + return result + + +func _on_resource_ui_update_needed() -> void: + for node_info in field_list: + if node_info.node and node_info.node.has_method('set_value'): + # Only set the value if the field is visible + # + # This prevents events with varied value types (event_setting, event_variable) + # from injecting incorrect types into hidden fields, which then throw errors + # in the console. + if node_info.has('condition') and not node_info.condition.is_empty(): + if _evaluate_visibility_condition(node_info): + node_info.node.set_value(resource.get(node_info.property)) + else: + node_info.node.set_value(resource.get(node_info.property)) + recalculate_field_visibility() + + +#region SIGNALS +################################################################################ + +func _on_collapse_toggled(toggled:bool) -> void: + collapsed = toggled + var timeline_editor: Node = find_parent('VisualEditor') + if (timeline_editor != null): + # @todo select item and clear selection is marked as "private" in TimelineEditor.gd + # consider to make it "public" or add a public helper function + timeline_editor.indent_events() + + + +func _on_ToggleBodyVisibility_toggled(button_pressed:bool) -> void: + if button_pressed and !body_was_build: + build_editor(false, true) + %ToggleBodyVisibilityButton.set_pressed_no_signal(button_pressed) + + if button_pressed: + %ToggleBodyVisibilityButton.icon = get_theme_icon("CodeFoldDownArrow", "EditorIcons") + else: + %ToggleBodyVisibilityButton.icon = get_theme_icon("CodeFoldedRightArrow", "EditorIcons") + + expanded = button_pressed + %Body.visible = button_pressed + + if find_parent('VisualEditor') != null: + find_parent('VisualEditor').indent_events() + + +func _on_EventNode_gui_input(event:InputEvent) -> void: + if event is InputEventMouseButton and event.is_pressed() and event.button_index == 1: + grab_focus() # Grab focus to avoid copy pasting text or events + if event.double_click: + if has_any_enabled_body_content: + _on_ToggleBodyVisibility_toggled(!expanded) + # For opening the context menu + if event is InputEventMouseButton: + if event.button_index == MOUSE_BUTTON_RIGHT and event.pressed: + var popup: PopupMenu = get_parent().get_parent().get_node('EventPopupMenu') + popup.current_event = self + popup.popup_on_parent(Rect2(get_global_mouse_position(),Vector2())) + if resource.help_page_path == "": + popup.set_item_disabled(2, true) + else: + popup.set_item_disabled(2, false) diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/EventBlock/event_block.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/EventBlock/event_block.tscn new file mode 100644 index 0000000..5bd715b --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/EventBlock/event_block.tscn @@ -0,0 +1,133 @@ +[gd_scene load_steps=8 format=3 uid="uid://bwaxj1n401fp4"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/EventBlock/event_block.gd" id="1"] +[ext_resource type="StyleBox" uid="uid://cl75ikyq2is7c" path="res://addons/dialogic/Editor/Events/styles/unselected_stylebox.tres" id="2_axj84"] +[ext_resource type="Texture2D" uid="uid://dybg3l5pwetne" path="res://addons/dialogic/Editor/Images/plugin-icon.svg" id="6"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_otutu"] +bg_color = Color(1, 1, 1, 1) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 + +[sub_resource type="Image" id="Image_mem38"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_rc1wh"] +image = SubResource("Image_mem38") + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ee4ub"] + +[node name="EventNode" type="MarginContainer"] +anchors_preset = 10 +anchor_right = 1.0 +grow_horizontal = 2 +size_flags_horizontal = 3 +size_flags_vertical = 9 +focus_mode = 1 +script = ExtResource("1") + +[node name="PanelContainer" type="PanelContainer" parent="."] +self_modulate = Color(0, 0, 0, 1) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +mouse_filter = 2 +theme_override_styles/panel = ExtResource("2_axj84") + +[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="Header" type="HBoxContainer" parent="PanelContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="IconPanel" type="Panel" parent="PanelContainer/VBoxContainer/Header"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +mouse_filter = 1 +mouse_default_cursor_shape = 6 +theme_override_styles/panel = SubResource("StyleBoxFlat_otutu") + +[node name="IconTexture" type="TextureRect" parent="PanelContainer/VBoxContainer/Header/IconPanel"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 0 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +texture = ExtResource("6") +expand_mode = 1 +stretch_mode = 5 + +[node name="Warning" type="TextureRect" parent="PanelContainer/VBoxContainer/Header/IconPanel"] +unique_name_in_owner = true +visible = false +layout_mode = 0 +offset_left = -5.5 +offset_top = -11.0 +offset_right = 12.1 +offset_bottom = 6.6 +texture = SubResource("ImageTexture_rc1wh") +stretch_mode = 5 + +[node name="HeaderContent" type="HBoxContainer" parent="PanelContainer/VBoxContainer/Header"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="ToggleBodyVisibilityButton" type="Button" parent="PanelContainer/VBoxContainer/Header"] +unique_name_in_owner = true +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +size_flags_horizontal = 0 +tooltip_text = "Fold/Unfold Settings" +theme_override_styles/normal = SubResource("StyleBoxEmpty_ee4ub") +theme_override_styles/hover = SubResource("StyleBoxEmpty_ee4ub") +theme_override_styles/pressed = SubResource("StyleBoxEmpty_ee4ub") +theme_override_styles/disabled = SubResource("StyleBoxEmpty_ee4ub") +theme_override_styles/focus = SubResource("StyleBoxEmpty_ee4ub") +toggle_mode = true +icon = SubResource("ImageTexture_rc1wh") +flat = true + +[node name="ToggleChildrenVisibilityButton" type="Button" parent="PanelContainer/VBoxContainer/Header"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +size_flags_horizontal = 10 +tooltip_text = "Collapse Contained Events" +toggle_mode = true +icon = SubResource("ImageTexture_rc1wh") +flat = true + +[node name="Body" type="MarginContainer" parent="PanelContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/margin_left = 4 + +[node name="BodyContent" type="VBoxContainer" parent="PanelContainer/VBoxContainer/Body"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +mouse_filter = 2 + +[connection signal="gui_input" from="." to="." method="_on_EventNode_gui_input"] +[connection signal="toggled" from="PanelContainer/VBoxContainer/Header/ToggleBodyVisibilityButton" to="." method="_on_ToggleBodyVisibility_toggled"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/EventBlock/event_right_click_menu.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/EventBlock/event_right_click_menu.gd new file mode 100644 index 0000000..0b765f6 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/EventBlock/event_right_click_menu.gd @@ -0,0 +1,22 @@ +@tool +extends PopupMenu + +var current_event: Node = null + +func _ready() -> void: + clear() + add_icon_item(get_theme_icon("Duplicate", "EditorIcons"), "Duplicate") + add_separator() + add_icon_item(get_theme_icon("Help", "EditorIcons"), "Documentation") + add_icon_item(get_theme_icon("CodeHighlighter", "EditorIcons"), "Open Code") + add_separator() + add_icon_item(get_theme_icon("ArrowUp", "EditorIcons"), "Move up") + add_icon_item(get_theme_icon("ArrowDown", "EditorIcons"), "Move down") + add_separator() + add_icon_item(get_theme_icon("Remove", "EditorIcons"), "Delete") + + var menu_background := StyleBoxFlat.new() + menu_background.bg_color = get_parent().get_theme_color("base_color", "Editor") + add_theme_stylebox_override('panel', menu_background) + add_theme_stylebox_override('hover', get_theme_stylebox("FocusViewport", "EditorStyles")) + add_theme_color_override('font_color_hover', get_parent().get_theme_color("accent_color", "Editor")) diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/array_part.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/array_part.gd new file mode 100644 index 0000000..20c7c72 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/array_part.gd @@ -0,0 +1,28 @@ +@tool +extends PanelContainer + +## Event block field part for the Array field. + +signal value_changed() + +var value_field: Node +var value_type: int = -1 + +var current_value: Variant + +func _ready() -> void: + %FlexValue.value_changed.connect(emit_signal.bind("value_changed")) + %Delete.icon = get_theme_icon("Remove", "EditorIcons") + + +func set_value(value:Variant): + %FlexValue.set_value(value) + + +func get_value() -> Variant: + return %FlexValue.current_value + + +func _on_delete_pressed() -> void: + queue_free() + value_changed.emit() diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/array_part.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/array_part.tscn new file mode 100644 index 0000000..7ec2d25 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/array_part.tscn @@ -0,0 +1,39 @@ +[gd_scene load_steps=5 format=3 uid="uid://ch4j2lesn1sis"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/array_part.gd" id="1"] +[ext_resource type="PackedScene" uid="uid://dl08ubinx6ugu" path="res://addons/dialogic/Editor/Events/Fields/field_flex_value.tscn" id="3_s4j7i"] + +[sub_resource type="Image" id="Image_dcsrk"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_cpbga"] +image = SubResource("Image_dcsrk") + +[node name="ArrayValue" type="PanelContainer"] +offset_left = 2.0 +offset_right = 76.0 +offset_bottom = 24.0 +theme_type_variation = &"DialogicEventEditGroup" +script = ExtResource("1") + +[node name="Value" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="FlexValue" parent="Value" instance=ExtResource("3_s4j7i")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="Delete" type="Button" parent="Value"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Remove" +icon = SubResource("ImageTexture_cpbga") +flat = true + +[connection signal="pressed" from="Value/Delete" to="." method="_on_delete_pressed"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/dictionary_part.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/dictionary_part.gd new file mode 100644 index 0000000..7c28572 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/dictionary_part.gd @@ -0,0 +1,44 @@ +@tool +extends PanelContainer + +## Event block field part for the Dictionary field. + +signal value_changed() + + +func set_key(value:String) -> void: + %Key.text = str(value) + + +func get_key() -> String: + return %Key.text + + +func set_value(value:Variant) -> void: + %FlexValue.set_value(value) + + +func get_value() -> Variant: + return %FlexValue.current_value + + +func _ready() -> void: + %Delete.icon = get_theme_icon("Remove", "EditorIcons") + + +func focus_key() -> void: + %Key.grab_focus() + + +func _on_key_text_changed(new_text: String) -> void: + value_changed.emit() + + +func _on_flex_value_value_changed() -> void: + value_changed.emit() + + +func _on_delete_pressed() -> void: + queue_free() + value_changed.emit() + diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/dictionary_part.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/dictionary_part.tscn new file mode 100644 index 0000000..dc1f961 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/dictionary_part.tscn @@ -0,0 +1,54 @@ +[gd_scene load_steps=5 format=3 uid="uid://b27yweami3mxi"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/dictionary_part.gd" id="2_q88pg"] +[ext_resource type="PackedScene" uid="uid://dl08ubinx6ugu" path="res://addons/dialogic/Editor/Events/Fields/field_flex_value.tscn" id="3_p082d"] + +[sub_resource type="Image" id="Image_dcsrk"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_cpbga"] +image = SubResource("Image_dcsrk") + +[node name="DictionaryPart" type="PanelContainer"] +offset_left = 1.0 +offset_top = -1.0 +offset_right = 131.0 +offset_bottom = 32.0 +theme_type_variation = &"DialogicEventEditGroup" +script = ExtResource("2_q88pg") + +[node name="HBox" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Key" type="LineEdit" parent="HBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +theme_type_variation = &"DialogicEventEdit" +expand_to_text_length = true +select_all_on_focus = true + +[node name="Label" type="Label" parent="HBox"] +layout_mode = 2 +text = ":" + +[node name="FlexValue" parent="HBox" instance=ExtResource("3_p082d")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="Delete" type="Button" parent="HBox"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Remove" +icon = SubResource("ImageTexture_cpbga") +flat = true + +[connection signal="text_changed" from="HBox/Key" to="." method="_on_key_text_changed"] +[connection signal="value_changed" from="HBox/FlexValue" to="." method="_on_flex_value_value_changed"] +[connection signal="pressed" from="HBox/Delete" to="." method="_on_delete_pressed"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_array.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_array.gd new file mode 100644 index 0000000..301ade5 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_array.gd @@ -0,0 +1,48 @@ +@tool +extends DialogicVisualEditorField + +## Event block field for editing arrays. + + +const ArrayValue := "res://addons/dialogic/Editor/Events/Fields/array_part.tscn" + + +func _ready() -> void: + %Add.icon = get_theme_icon("Add", "EditorIcons") + %Add.pressed.connect(_on_AddButton_pressed) + + +func _set_value(value:Variant) -> void: + value = value as Array + for child in get_children(): + if child != %Add: + child.queue_free() + + for item in value: + var x: Node = load(ArrayValue).instantiate() + add_child(x) + x.set_value(item) + x.value_changed.connect(recalculate_values) + move_child(%Add, -1) + + +func _on_value_changed(value:Variant) -> void: + value_changed.emit(property_name, value) + + +func recalculate_values() -> void: + var arr := [] + for child in get_children(): + if child != %Add and !child.is_queued_for_deletion(): + arr.append(child.get_value()) + _on_value_changed(arr) + + +func _on_AddButton_pressed() -> void: + var x: Control = load(ArrayValue).instantiate() + add_child(x) + x.set_value("") + x.value_changed.connect(recalculate_values) + recalculate_values() + move_child(%Add, -1) + diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_array.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_array.tscn new file mode 100644 index 0000000..ff5ac6c --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_array.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=4 format=3 uid="uid://btmy7ageqpyq1"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_array.gd" id="2"] + +[sub_resource type="Image" id="Image_dcsrk"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_cpbga"] +image = SubResource("Image_dcsrk") + +[node name="Field_Array" type="HFlowContainer"] +offset_right = 329.0 +offset_bottom = 256.0 +size_flags_horizontal = 3 +script = ExtResource("2") + +[node name="Add" type="Button" parent="."] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Add value" +icon = SubResource("ImageTexture_cpbga") +flat = true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_button.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_button.gd new file mode 100644 index 0000000..1593be3 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_button.gd @@ -0,0 +1,38 @@ +@tool +extends DialogicVisualEditorField + +## Event block field for boolean values. + +#region MAIN METHODS +################################################################################ + +func _ready() -> void: + add_theme_color_override("icon_normal_color", get_theme_color("disabled_font_color", "Editor")) + add_theme_color_override("icon_hover_color", get_theme_color("warning_color", "Editor")) + add_theme_color_override("icon_pressed_color", get_theme_color("icon_saturation", "Editor")) + add_theme_color_override("icon_hover_pressed_color", get_theme_color("warning_color", "Editor")) + add_theme_color_override("icon_focus_color", get_theme_color("disabled_font_color", "Editor")) + self.toggled.connect(_on_value_changed) + + +func _load_display_info(info:Dictionary) -> void: + if info.has('editor_icon'): + if not is_inside_tree(): + await ready + self.icon = callv('get_theme_icon', info.editor_icon) + else: + self.icon = info.get('icon', null) + + +func _set_value(value:Variant) -> void: + self.button_pressed = true if value else false + +#endregion + + +#region SIGNAL METHODS +################################################################################ + +func _on_value_changed(value:bool) -> void: + value_changed.emit(property_name, value) +#endregion diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_button.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_button.tscn new file mode 100644 index 0000000..e4f7d0a --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_button.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=2 format=3 uid="uid://iypxcctv080u"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_bool_button.gd" id="1_t1n1f"] + +[node name="Field_BoolButton" type="Button"] +theme_override_colors/icon_normal_color = Color(0, 0, 0, 1) +theme_override_colors/icon_pressed_color = Color(0, 0, 0, 1) +theme_override_colors/icon_hover_color = Color(0, 0, 0, 1) +theme_override_colors/icon_hover_pressed_color = Color(0, 0, 0, 1) +theme_override_colors/icon_focus_color = Color(0, 0, 0, 1) +toggle_mode = true +flat = true +script = ExtResource("1_t1n1f") diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_check.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_check.gd new file mode 100644 index 0000000..d01a116 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_check.gd @@ -0,0 +1,30 @@ +@tool +extends DialogicVisualEditorField + +## Event block field for boolean values. + +#region MAIN METHODS +################################################################################ +func _ready() -> void: + self.toggled.connect(_on_value_changed) + + +func _load_display_info(info:Dictionary) -> void: + pass + + +func _set_value(value:Variant) -> void: + match DialogicUtil.get_variable_value_type(value): + DialogicUtil.VarTypes.STRING: + self.button_pressed = value and not value.strip_edges() == "false" + _: + self.button_pressed = value and true +#endregion + + +#region SIGNAL METHODS +################################################################################ +func _on_value_changed(value:bool) -> void: + value_changed.emit(property_name, value) + +#endregion diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_check.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_check.tscn new file mode 100644 index 0000000..395caf5 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_bool_check.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=2 format=3 uid="uid://dm5hxmhyyxgq"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_bool_check.gd" id="1_ckmtx"] + +[node name="Field_BoolCheck" type="CheckButton"] +offset_right = 44.0 +offset_bottom = 24.0 +script = ExtResource("1_ckmtx") diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_color.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_color.gd new file mode 100644 index 0000000..707dfc5 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_color.gd @@ -0,0 +1,30 @@ +@tool +extends DialogicVisualEditorField + +## Event block field for color values. + +#region MAIN METHODS +################################################################################ + +func _ready() -> void: + self.color_changed.connect(_on_value_changed) + + +func _load_display_info(info:Dictionary) -> void: + self.edit_alpha = info.get("edit_alpha", true) + + +func _set_value(value:Variant) -> void: + if value is Color: + self.color = Color(value) + +#endregion + + +#region SIGNAL METHODS +################################################################################ + +func _on_value_changed(value: Color) -> void: + value_changed.emit(property_name, value) + +#endregion diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_color.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_color.tscn new file mode 100644 index 0000000..5fd3ff2 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_color.tscn @@ -0,0 +1,12 @@ +[gd_scene load_steps=2 format=3 uid="uid://4e0kjekan5e7"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_color.gd" id="1_l666a"] + +[node name="Field_Color" type="ColorPickerButton"] +custom_minimum_size = Vector2(48, 0) +offset_right = 64.0 +offset_bottom = 31.0 +theme_type_variation = &"DialogicEventEdit" +text = " " +color = Color(1, 1, 1, 1) +script = ExtResource("1_l666a") diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_condition.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_condition.gd new file mode 100644 index 0000000..db40270 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_condition.gd @@ -0,0 +1,267 @@ +@tool +extends DialogicVisualEditorField + +## Event block field for displaying conditions in either a simple or complex way. + +var _current_value1: Variant = "" +var _current_value2: Variant = "" + +#region MAIN METHODS +################################################################################ + +func _set_value(value:Variant) -> void: + var too_complex := is_too_complex(value) + %ToggleComplex.disabled = too_complex + %ToggleComplex.button_pressed = too_complex + %ComplexEditor.visible = too_complex + %SimpleEditor.visible = !too_complex + %ComplexEditor.text = value + if not too_complex: + load_simple_editor(value) + + + +func _autofocus() -> void: + %Value1Variable.grab_focus() + +#endregion + +func _ready() -> void: + for i in [%Value1Type, %Value2Type]: + i.options = [{ + 'label': 'String', + 'icon': ["String", "EditorIcons"], + 'value': 0 + },{ + 'label': 'Number', + 'icon': ["float", "EditorIcons"], + 'value': 1 + },{ + 'label': 'Variable', + 'icon': load("res://addons/dialogic/Editor/Images/Pieces/variable.svg"), + 'value': 2 + },{ + 'label': 'Bool', + 'icon': ["bool", "EditorIcons"], + 'value': 3 + },{ + 'label': 'Expression', + 'icon': ["Variant", "EditorIcons"], + 'value': 4 + }] + i.symbol_only = true + i.value_changed.connect(value_type_changed.bind(i.name)) + i.value_changed.connect(something_changed) + i.tooltip_text = "Change type" + + + for i in [%Value1Variable, %Value2Variable]: + i.get_suggestions_func = get_variable_suggestions + i.value_changed.connect(something_changed) + + %Value1Number.value_changed.connect(something_changed) + %Value2Number.value_changed.connect(something_changed) + %Value1Text.value_changed.connect(something_changed) + %Value2Text.value_changed.connect(something_changed) + %Value1Bool.value_changed.connect(something_changed) + %Value2Bool.value_changed.connect(something_changed) + + %ToggleComplex.icon = get_theme_icon("Enum", "EditorIcons") + + %Operator.value_changed.connect(something_changed) + %Operator.options = [ + {'label': '==', 'value': '=='}, + {'label': '>', 'value': '>'}, + {'label': '<', 'value': '<'}, + {'label': '<=', 'value': '<='}, + {'label': '>=', 'value': '>='}, + {'label': '!=', 'value': '!='} + ] + + +func load_simple_editor(condition_string:String) -> void: + var data := complex2simple(condition_string) + %Value1Type.set_value(get_value_type(data[0], 2)) + _current_value1 = data[0] + value_type_changed('', get_value_type(data[0], 2), 'Value1') + %Operator.set_value(data[1].strip_edges()) + %Value2Type.set_value(get_value_type(data[2], 0)) + _current_value2 = data[2] + value_type_changed('', get_value_type(data[2], 0), 'Value2') + + +func value_type_changed(property:String, value_type:int, value_name:String) -> void: + value_name = value_name.trim_suffix('Type') + get_node('%'+value_name+'Variable').hide() + get_node('%'+value_name+'Text').hide() + get_node('%'+value_name+'Number').hide() + get_node('%'+value_name+'Bool').hide() + var current_val: Variant = "" + if '1' in value_name: + current_val = _current_value1 + else: + current_val = _current_value2 + match value_type: + 0: + get_node('%'+value_name+'Text').show() + get_node('%'+value_name+'Text').set_value(trim_value(current_val, value_type)) + 1: + get_node('%'+value_name+'Number').show() + get_node('%'+value_name+'Number').set_value(float(current_val.strip_edges())) + 2: + get_node('%'+value_name+'Variable').show() + get_node('%'+value_name+'Variable').set_value(trim_value(current_val, value_type)) + 3: + get_node('%'+value_name+'Bool').show() + get_node('%'+value_name+'Bool').set_value(trim_value(current_val, value_type)) + 4: + get_node('%'+value_name+'Text').show() + get_node('%'+value_name+'Text').set_value(str(current_val)) + + +func get_value_type(value:String, default:int) -> int: + value = value.strip_edges() + if value.begins_with('"') and value.ends_with('"') and value.count('"')-value.count('\\"') == 2: + return 0 + elif value.begins_with('{') and value.ends_with('}') and value.count('{') == 1: + return 2 + elif value == "true" or value == "false": + return 3 + else: + if value.is_empty(): + return default + if value.is_valid_float(): + return 1 + else: + return 4 + + +func prep_value(value:Variant, value_type:int) -> String: + if value != null: value = str(value) + else: value = "" + value = value.strip_edges() + match value_type: + 0: return '"'+value.replace('"', '\\"')+'"' + 2: return '{'+value+'}' + _: return value + + +func trim_value(value:Variant, value_type:int) -> String: + value = value.strip_edges() + match value_type: + 0: return value.trim_prefix('"').trim_suffix('"').replace('\\"', '"') + 2: return value.trim_prefix('{').trim_suffix('}') + 3: + if value == "true" or (value and (typeof(value) != TYPE_STRING or value != "false")): + return "true" + else: + return "false" + _: return value + + +func something_changed(fake_arg1=null, fake_arg2 = null): + if %ComplexEditor.visible: + value_changed.emit(property_name, %ComplexEditor.text) + return + + + match %Value1Type.current_value: + 0: _current_value1 = prep_value(%Value1Text.text, %Value1Type.current_value) + 1: _current_value1 = str(%Value1Number.get_value()) + 2: _current_value1 = prep_value(%Value1Variable.current_value, %Value1Type.current_value) + 3: _current_value1 = prep_value(%Value1Bool.button_pressed, %Value1Type.current_value) + _: _current_value1 = prep_value(%Value1Text.text, %Value1Type.current_value) + + match %Value2Type.current_value: + 0: _current_value2 = prep_value(%Value2Text.text, %Value2Type.current_value) + 1: _current_value2 = str(%Value2Number.get_value()) + 2: _current_value2 = prep_value(%Value2Variable.current_value, %Value2Type.current_value) + 3: _current_value2 = prep_value(%Value2Bool.button_pressed, %Value2Type.current_value) + _: _current_value2 = prep_value(%Value2Text.text, %Value2Type.current_value) + + if event_resource: + if not %Operator.text in ['==', '!='] and get_value_type(_current_value2, 0) in [0, 3]: + event_resource.ui_update_warning.emit("This operator doesn't work with strings and booleans.") + else: + event_resource.ui_update_warning.emit("") + + value_changed.emit(property_name, get_simple_condition()) + + +func is_too_complex(condition:String) -> bool: + if condition.strip_edges().is_empty(): + return false + + var comparison_count: int = 0 + for i in ['==', '!=', '<=', '<', '>', '>=']: + comparison_count += condition.count(i) + if comparison_count == 1: + return false + + return true + + +## Combines the info from the simple editor fields into a string condition +func get_simple_condition() -> String: + return _current_value1 +" "+ %Operator.text +" "+ _current_value2 + + +func complex2simple(condition:String) -> Array: + if is_too_complex(condition) or condition.strip_edges().is_empty(): + return ['', '==',''] + + for i in ['==', '!=', '<=', '<', '>', '>=']: + if i in condition: + var cond_split := Array(condition.split(i, false)) + return [cond_split[0], i, cond_split[1]] + + return ['', '==',''] + + +func _on_toggle_complex_toggled(button_pressed:bool) -> void: + if button_pressed: + %ComplexEditor.show() + %SimpleEditor.hide() + %ComplexEditor.text = get_simple_condition() + else: + if !is_too_complex(%ComplexEditor.text): + %ComplexEditor.hide() + %SimpleEditor.show() + load_simple_editor(%ComplexEditor.text) + + +func _on_complex_editor_text_changed(new_text:String) -> void: + %ToggleComplex.disabled = is_too_complex(%ComplexEditor.text) + something_changed() + + +func get_variable_suggestions(filter:String) -> Dictionary: + var suggestions := {} + var vars: Dictionary = ProjectSettings.get_setting('dialogic/variables', {}) + for var_path in DialogicUtil.list_variables(vars): + suggestions[var_path] = {'value':var_path, 'editor_icon':["ClassList", "EditorIcons"]} + return suggestions + + +func _on_value_1_variable_value_changed(property_name: Variant, value: Variant) -> void: + var type := DialogicUtil.get_variable_type(value) + match type: + DialogicUtil.VarTypes.BOOL: + if not %Operator.text in ["==", "!="]: + %Operator.text = "==" + if get_value_type(_current_value2, 3) in [0, 1]: + %Value2Type.insert_options() + %Value2Type.index_pressed(3) + DialogicUtil.VarTypes.STRING: + if not %Operator.text in ["==", "!="]: + %Operator.text = "==" + if get_value_type(_current_value2, 0) in [1, 3]: + %Value2Type.insert_options() + %Value2Type.index_pressed(0) + DialogicUtil.VarTypes.FLOAT, DialogicUtil.VarTypes.INT: + if get_value_type(_current_value2, 1) in [0,3]: + %Value2Type.insert_options() + %Value2Type.index_pressed(1) + + something_changed() + diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_condition.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_condition.tscn new file mode 100644 index 0000000..8024c5b --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_condition.tscn @@ -0,0 +1,101 @@ +[gd_scene load_steps=9 format=3 uid="uid://ir6334lqtuwt"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_condition.gd" id="1_owjj0"] +[ext_resource type="PackedScene" uid="uid://d3bhehatwoio" path="res://addons/dialogic/Editor/Events/Fields/field_options_fixed.tscn" id="2_f6v80"] +[ext_resource type="PackedScene" uid="uid://c0vkcehgjsjy" path="res://addons/dialogic/Editor/Events/Fields/field_text_singleline.tscn" id="3_3kfwc"] +[ext_resource type="PackedScene" uid="uid://kdpp3mibml33" path="res://addons/dialogic/Editor/Events/Fields/field_number.tscn" id="4_6q3a6"] +[ext_resource type="PackedScene" uid="uid://dm5hxmhyyxgq" path="res://addons/dialogic/Editor/Events/Fields/field_bool_check.tscn" id="5_1x02a"] +[ext_resource type="PackedScene" uid="uid://dpwhshre1n4t6" path="res://addons/dialogic/Editor/Events/Fields/field_options_dynamic.tscn" id="6_5a2xd"] + +[sub_resource type="Image" id="Image_je1w7"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_81s3d"] +image = SubResource("Image_je1w7") + +[node name="Field_Condition" type="HBoxContainer"] +offset_right = 77.0 +offset_bottom = 31.0 +script = ExtResource("1_owjj0") + +[node name="SimpleEditor" type="HBoxContainer" parent="."] +unique_name_in_owner = true +layout_mode = 2 + +[node name="Value1Type" parent="SimpleEditor" instance=ExtResource("2_f6v80")] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Change type" +text = "" + +[node name="Value1Text" parent="SimpleEditor" instance=ExtResource("3_3kfwc")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="Value1Number" parent="SimpleEditor" instance=ExtResource("4_6q3a6")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="Value1Bool" parent="SimpleEditor" instance=ExtResource("5_1x02a")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="Value1Variable" parent="SimpleEditor" instance=ExtResource("6_5a2xd")] +unique_name_in_owner = true +layout_mode = 2 +placeholder_text = "Variable" + +[node name="Operator" parent="SimpleEditor" instance=ExtResource("2_f6v80")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="Value2Type" parent="SimpleEditor" instance=ExtResource("2_f6v80")] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Change type" +text = "" + +[node name="Value2Text" parent="SimpleEditor" instance=ExtResource("3_3kfwc")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="Value2Number" parent="SimpleEditor" instance=ExtResource("4_6q3a6")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="Value2Variable" parent="SimpleEditor" instance=ExtResource("6_5a2xd")] +unique_name_in_owner = true +layout_mode = 2 +placeholder_text = "Variable" + +[node name="Value2Bool" parent="SimpleEditor" instance=ExtResource("5_1x02a")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="ComplexEditor" type="LineEdit" parent="."] +unique_name_in_owner = true +visible = false +custom_minimum_size = Vector2(150, 0) +layout_mode = 2 +mouse_filter = 1 +theme_type_variation = &"DialogicEventEdit" +text = "VAR.Player.Health > 20 and VAR.Counter < 3 and randi()%3 == 2" +placeholder_text = "Enter condition" +expand_to_text_length = true + +[node name="ToggleComplex" type="Button" parent="."] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Use complex expression" +toggle_mode = true +icon = SubResource("ImageTexture_81s3d") + +[connection signal="value_changed" from="SimpleEditor/Value1Variable" to="." method="_on_value_1_variable_value_changed"] +[connection signal="text_changed" from="ComplexEditor" to="." method="_on_complex_editor_text_changed"] +[connection signal="toggled" from="ToggleComplex" to="." method="_on_toggle_complex_toggled"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_dictionary.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_dictionary.gd new file mode 100644 index 0000000..f76ef27 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_dictionary.gd @@ -0,0 +1,60 @@ +@tool +extends DialogicVisualEditorField + +## Event block field for editing dictionaries. + +const DictionaryValue = "res://addons/dialogic/Editor/Events/Fields/dictionary_part.tscn" + +func _ready() -> void: + %Add.icon = get_theme_icon("Add", "EditorIcons") + + +func _set_value(value:Variant) -> void: + for child in get_children(): + if child != %Add: + child.queue_free() + + var dict: Dictionary + + # attempt to take dictionary values, create a fresh one if not possible + if typeof(value) == TYPE_DICTIONARY: + dict = value + elif typeof(value) == TYPE_STRING: + if value.begins_with('{'): + var result: Variant = JSON.parse_string(value) + if result != null: + dict = result as Dictionary + + var keys := dict.keys() + var values := dict.values() + + for index in dict.size(): + var x: Node = load(DictionaryValue).instantiate() + add_child(x) + x.set_value(values[index]) + x.set_key(keys[index]) + x.value_changed.connect(recalculate_values) + move_child(%Add, -1) + + +func _on_value_changed(value:Variant) -> void: + value_changed.emit(property_name, value) + + +func recalculate_values() -> void: + var dict := {} + for child in get_children(): + if child != %Add and !child.is_queued_for_deletion(): + dict[child.get_key()] = child.get_value() + _on_value_changed(dict) + + +func _on_AddButton_pressed() -> void: + var x: Control = load(DictionaryValue).instantiate() + add_child(x) + x.set_key("") + x.set_value("") + x.value_changed.connect(recalculate_values) + x.focus_key() + recalculate_values() + move_child(%Add, -1) diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_dictionary.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_dictionary.tscn new file mode 100644 index 0000000..c5c73e9 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_dictionary.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=4 format=3 uid="uid://c74bnmhefu72w"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_dictionary.gd" id="1_p4kmu"] + +[sub_resource type="Image" id="Image_dcsrk"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_cpbga"] +image = SubResource("Image_dcsrk") + +[node name="Field_Dictionary" type="HFlowContainer"] +size_flags_horizontal = 3 +script = ExtResource("1_p4kmu") + +[node name="Add" type="Button" parent="."] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Add key-value pair" +icon = SubResource("ImageTexture_cpbga") +flat = true + +[connection signal="pressed" from="Add" to="." method="_on_AddButton_pressed"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_file.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_file.gd new file mode 100644 index 0000000..1227dfa --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_file.gd @@ -0,0 +1,139 @@ +@tool +extends DialogicVisualEditorField + +## Event block field for selecting a file or directory. + +#region VARIABLES +################################################################################ + +@export var file_filter := "" +@export var placeholder := "" +@export var file_mode: EditorFileDialog.FileMode = EditorFileDialog.FILE_MODE_OPEN_FILE +var resource_icon: Texture: + get: + return resource_icon + set(new_icon): + resource_icon = new_icon + %Icon.texture = new_icon + if new_icon == null: + %Field.theme_type_variation = "" + else: + %Field.theme_type_variation = "LineEditWithIcon" + +var max_width := 200 +var current_value: String +var hide_reset := false + +#endregion + + +#region MAIN METHODS +################################################################################ + +func _ready() -> void: + $FocusStyle.add_theme_stylebox_override('panel', get_theme_stylebox('focus', 'DialogicEventEdit')) + + %OpenButton.icon = get_theme_icon("Folder", "EditorIcons") + %OpenButton.button_down.connect(_on_OpenButton_pressed) + + %ClearButton.icon = get_theme_icon("Reload", "EditorIcons") + %ClearButton.button_up.connect(clear_path) + %ClearButton.visible = !hide_reset + + %Field.set_drag_forwarding(Callable(), self._can_drop_data_fw, self._drop_data_fw) + %Field.placeholder_text = placeholder + + +func _load_display_info(info:Dictionary) -> void: + file_filter = info.get('file_filter', '') + placeholder = info.get('placeholder', '') + resource_icon = info.get('icon', null) + await ready + + if resource_icon == null and info.has('editor_icon'): + resource_icon = callv('get_theme_icon', info.editor_icon) + + +func _set_value(value: Variant) -> void: + current_value = value + var text: String = value + + if file_mode != EditorFileDialog.FILE_MODE_OPEN_DIR: + text = value.get_file() + %Field.tooltip_text = value + + if %Field.get_theme_font('font').get_string_size( + text, 0, -1, + %Field.get_theme_font_size('font_size')).x > max_width: + %Field.expand_to_text_length = false + %Field.custom_minimum_size.x = max_width + %Field.size.x = 0 + else: + %Field.custom_minimum_size.x = 0 + %Field.expand_to_text_length = true + + if not %Field.text == text: + value_changed.emit(property_name, current_value) + %Field.text = text + + %ClearButton.visible = not value.is_empty() and not hide_reset + + +#endregion + + +#region BUTTONS +################################################################################ + +func _on_OpenButton_pressed() -> void: + find_parent('EditorView').godot_file_dialog(_on_file_dialog_selected, file_filter, file_mode, "Open "+ property_name) + + +func _on_file_dialog_selected(path:String) -> void: + _set_value(path) + value_changed.emit(property_name, path) + + +func clear_path() -> void: + _set_value("") + value_changed.emit(property_name, "") + +#endregion + + +#region DRAG AND DROP +################################################################################ + +func _can_drop_data_fw(_at_position: Vector2, data: Variant) -> bool: + if typeof(data) == TYPE_DICTIONARY and data.has('files') and len(data.files) == 1: + + if file_filter: + + if '*.'+data.files[0].get_extension() in file_filter: + return true + + else: return true + + return false + + +func _drop_data_fw(_at_position: Vector2, data: Variant) -> void: + var file: String = data.files[0] + _on_file_dialog_selected(file) + +#endregion + + +#region VISUALS FOR FOCUS +################################################################################ + +func _on_field_focus_entered() -> void: + $FocusStyle.show() + + +func _on_field_focus_exited() -> void: + $FocusStyle.hide() + var field_text: String = %Field.text + _on_file_dialog_selected(field_text) + +#endregion diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_file.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_file.tscn new file mode 100644 index 0000000..8b47de7 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_file.tscn @@ -0,0 +1,87 @@ +[gd_scene load_steps=8 format=3 uid="uid://7mvxuaulctcq"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_file.gd" id="1_0grcf"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_tr837"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_wq6bt"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6b7on"] + +[sub_resource type="Image" id="Image_bpoe1"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_dkuon"] +image = SubResource("Image_bpoe1") + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yv1pn"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(1, 0.365, 0.365, 1) +draw_center = false +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +corner_detail = 1 + +[node name="Field_File" type="MarginContainer"] +offset_right = 314.0 +offset_bottom = 40.0 +theme_type_variation = &"DialogicEventEdit" +script = ExtResource("1_0grcf") + +[node name="BG" type="PanelContainer" parent="."] +layout_mode = 2 +theme_type_variation = &"DialogicEventEdit" + +[node name="HBox" type="HBoxContainer" parent="BG"] +layout_mode = 2 +alignment = 2 + +[node name="Icon" type="TextureRect" parent="BG/HBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 4 +mouse_filter = 2 + +[node name="Field" type="LineEdit" parent="BG/HBox"] +unique_name_in_owner = true +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +size_flags_horizontal = 3 +mouse_filter = 1 +theme_override_styles/normal = SubResource("StyleBoxEmpty_tr837") +theme_override_styles/focus = SubResource("StyleBoxEmpty_wq6bt") +theme_override_styles/read_only = SubResource("StyleBoxEmpty_6b7on") +expand_to_text_length = true + +[node name="OpenButton" type="Button" parent="BG/HBox"] +unique_name_in_owner = true +layout_mode = 2 +icon = SubResource("ImageTexture_dkuon") +flat = true + +[node name="ClearButton" type="Button" parent="BG/HBox"] +unique_name_in_owner = true +layout_mode = 2 +icon = SubResource("ImageTexture_dkuon") +flat = true + +[node name="FocusStyle" type="Panel" parent="."] +visible = false +layout_mode = 2 +mouse_filter = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_yv1pn") + +[connection signal="focus_entered" from="BG/HBox/Field" to="." method="_on_field_focus_entered"] +[connection signal="focus_exited" from="BG/HBox/Field" to="." method="_on_field_focus_exited"] +[connection signal="text_submitted" from="BG/HBox/Field" to="." method="_on_file_dialog_selected"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_flex_value.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_flex_value.gd new file mode 100644 index 0000000..be7a98d --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_flex_value.gd @@ -0,0 +1,154 @@ +@tool +extends HBoxContainer + +## Event block field part for a value that can change type. + +signal value_changed + +var value_field: Node +var value_type: int = -1 + +var current_value: Variant + +func _ready() -> void: + %ValueType.options = [{ + 'label': 'String', + 'icon': ["String", "EditorIcons"], + 'value': TYPE_STRING + },{ + 'label': 'Number (int)', + 'icon': ["int", "EditorIcons"], + 'value': TYPE_INT + },{ + 'label': 'Number (float)', + 'icon': ["float", "EditorIcons"], + 'value': TYPE_FLOAT + },{ + 'label': 'Boolean', + 'icon': ["bool", "EditorIcons"], + 'value': TYPE_BOOL + },{ + 'label': 'Expression', + 'icon': ["Variant", "EditorIcons"], + 'value': TYPE_MAX + } + ] + %ValueType.symbol_only = true + %ValueType.value_changed.connect(_on_type_changed.bind()) + %ValueType.tooltip_text = "Change type" + + +func set_value(value:Variant): + change_field_type(deduce_type(value)) + %ValueType.set_value(deduce_type(value)) + current_value = value + match value_type: + TYPE_BOOL: + value_field.button_pressed = value + TYPE_STRING: + value_field.text = value + TYPE_FLOAT, TYPE_INT: + value_field.set_value(value) + TYPE_MAX, _: + value_field.text = value.trim_prefix('@') + + +func deduce_type(value:Variant) -> int: + if value is String and value.begins_with('@'): + return TYPE_MAX + else: + return typeof(value) + + +func _on_type_changed(prop:String, type:Variant) -> void: + if type == value_type: + return + + match type: + TYPE_BOOL: + if typeof(current_value) == TYPE_STRING: + current_value = DialogicUtil.str_to_bool(current_value) + elif value_type == TYPE_FLOAT or value_type == TYPE_INT: + current_value = bool(current_value) + else: + current_value = true if current_value else false + set_value(current_value) + TYPE_STRING: + current_value = str(current_value).trim_prefix('@') + set_value(current_value) + TYPE_FLOAT: + current_value = float(current_value) + set_value(current_value) + TYPE_INT: + current_value = int(current_value) + set_value(current_value) + TYPE_MAX,_: + current_value = var_to_str(current_value) + set_value('@'+current_value) + + + emit_signal.call_deferred('value_changed') + + +func get_value() -> Variant: + return current_value + + +func _on_delete_pressed() -> void: + queue_free() + value_changed.emit() + + +func change_field_type(type:int) -> void: + if type == value_type: + return + + value_type = type + + if value_field: + value_field.queue_free() + match type: + TYPE_BOOL: + value_field = CheckBox.new() + value_field.toggled.connect(_on_bool_toggled) + TYPE_STRING: + value_field = LineEdit.new() + value_field.theme_type_variation = "DialogicEventEdit" + value_field.text_changed.connect(_on_str_text_changed) + value_field.expand_to_text_length = true + TYPE_FLOAT, TYPE_INT: + value_field = load("res://addons/dialogic/Editor/Events/Fields/field_number.tscn").instantiate() + if type == TYPE_FLOAT: + value_field.use_float_mode() + else: + value_field.use_int_mode() + value_field.value_changed.connect(_on_number_value_changed.bind(type == TYPE_INT)) + TYPE_MAX, _: + value_field = LineEdit.new() + value_field.expand_to_text_length = true + value_field.text_changed.connect(_on_expression_changed) + add_child(value_field) + move_child(value_field, 1) + + +func _on_bool_toggled(value:bool) -> void: + current_value = value + value_changed.emit() + + +func _on_str_text_changed(value:String) -> void: + current_value = value + value_changed.emit() + + +func _on_expression_changed(value:String) -> void: + current_value = '@'+value + value_changed.emit() + + +func _on_number_value_changed(prop:String, value:float, int := false) -> void: + if int: + current_value = int(value) + else: + current_value = value + value_changed.emit() diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_flex_value.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_flex_value.tscn new file mode 100644 index 0000000..2d46186 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_flex_value.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=3 format=3 uid="uid://dl08ubinx6ugu"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_flex_value.gd" id="1_m5nnp"] +[ext_resource type="PackedScene" uid="uid://d3bhehatwoio" path="res://addons/dialogic/Editor/Events/Fields/field_options_fixed.tscn" id="3_h10fc"] + +[node name="FlexValue" type="HBoxContainer"] +offset_right = 65.0 +offset_bottom = 22.0 +script = ExtResource("1_m5nnp") + +[node name="ValueType" parent="." instance=ExtResource("3_h10fc")] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Change type" +text = "" diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_number.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_number.gd new file mode 100644 index 0000000..30d50eb --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_number.gd @@ -0,0 +1,199 @@ +@tool +class_name DialogicVisualEditorFieldNumber +extends DialogicVisualEditorField + +## Event block field for integers and floats. Improved version of the native spinbox. + +@export var allow_string: bool = false +@export var step: float = 0.1 +@export var enforce_step: bool = true +@export var min: float = -INF +@export var max: float = INF +@export var value = 0.0 +@export var prefix: String = "" +@export var suffix: String = "" + +var _is_holding_button: bool = false #For handling incrementing while holding key or click + +#region MAIN METHODS +################################################################################ + +func _ready() -> void: + if %Value.text.is_empty(): + set_value(value) + + update_prefix(prefix) + update_suffix(suffix) + + +func _load_display_info(info: Dictionary) -> void: + match info.get('mode', 0): + 0: #FLOAT + use_float_mode(info.get('step', 0.1)) + 1: #INT + use_int_mode(info.get('step', 1)) + 2: #DECIBLE: + use_decibel_mode(info.get('step', step)) + + for option in info.keys(): + match option: + 'min': min = info[option] + 'max': max = info[option] + 'prefix': update_prefix(info[option]) + 'suffix': update_suffix(info[option]) + 'step': + enforce_step = true + step = info[option] + 'hide_step_button': %Spin.hide() + + +func _set_value(new_value: Variant) -> void: + _on_value_text_submitted(str(new_value), true) + %Value.tooltip_text = tooltip_text + + +func _autofocus() -> void: + %Value.grab_focus() + + +func get_value() -> float: + return value + + +func use_float_mode(value_step: float = 0.1) -> void: + step = value_step + update_suffix("") + enforce_step = false + + +func use_int_mode(value_step: float = 1) -> void: + step = value_step + update_suffix("") + enforce_step = true + + +func use_decibel_mode(value_step: float = step) -> void: + max = 6 + update_suffix("dB") + min = -80 + +#endregion + +#region UI FUNCTIONALITY +################################################################################ +var _stop_button_holding: Callable = func(button: BaseButton) -> void: + _is_holding_button = false + if button.button_up.get_connections().find(_stop_button_holding): + button.button_up.disconnect(_stop_button_holding) + if button.focus_exited.get_connections().find(_stop_button_holding): + button.focus_exited.disconnect(_stop_button_holding) + if button.mouse_exited.get_connections().find(_stop_button_holding): + button.mouse_exited.disconnect(_stop_button_holding) + + +func _holding_button(value_direction: int, button: BaseButton) -> void: + if _is_holding_button: + return + if _stop_button_holding.get_bound_arguments_count() > 0: + _stop_button_holding.unbind(0) + + _is_holding_button = true + + #Ensure removal of our value changing routine when it shouldn't run anymore + button.button_up.connect(_stop_button_holding.bind(button)) + button.focus_exited.connect(_stop_button_holding.bind(button)) + button.mouse_exited.connect(_stop_button_holding.bind(button)) + + var scene_tree: SceneTree = get_tree() + var delay_timer_ms: int = 600 + + #Instead of awaiting for the duration, await per-frame so we can catch any changes in _is_holding_button and exit completely + while(delay_timer_ms > 0): + if _is_holding_button == false: + return + var pre_time: int = Time.get_ticks_msec() + await scene_tree.process_frame + delay_timer_ms -= Time.get_ticks_msec() - pre_time + + var change_speed: float = 0.25 + + while(_is_holding_button == true): + await scene_tree.create_timer(change_speed).timeout + change_speed = maxf(0.05, change_speed - 0.01) + _on_value_text_submitted(str(value+(step * value_direction))) + + +func update_prefix(to_prefix: String) -> void: + prefix = to_prefix + %Prefix.visible = to_prefix != null and to_prefix != "" + %Prefix.text = prefix + + +func update_suffix(to_suffix: String) -> void: + suffix = to_suffix + %Suffix.visible = to_suffix != null and to_suffix != "" + %Suffix.text = suffix + +#endregion + +#region SIGNAL METHODS +################################################################################ +func _on_gui_input(event: InputEvent) -> void: + if event.is_action('ui_up') and event.get_action_strength('ui_up') > 0.5: + _on_value_text_submitted(str(value+step)) + elif event.is_action('ui_down') and event.get_action_strength('ui_down') > 0.5: + _on_value_text_submitted(str(value-step)) + + +func _on_increment_button_down(button: NodePath) -> void: + _on_value_text_submitted(str(value+step)) + _holding_button(1.0, get_node(button) as BaseButton) + + +func _on_decrement_button_down(button: NodePath) -> void: + _on_value_text_submitted(str(value-step)) + _holding_button(-1.0, get_node(button) as BaseButton) + + +func _on_value_text_submitted(new_text: String, no_signal:= false) -> void: + if new_text.is_empty() and not allow_string: + new_text = "0.0" + if new_text.is_valid_float(): + var temp: float = min(max(new_text.to_float(), min), max) + if !enforce_step: + value = temp + else: + value = snapped(temp, step) + elif allow_string: + value = new_text + %Value.text = str(value).pad_decimals(len(str(float(step)-floorf(step)))-2) + if not no_signal: + value_changed.emit(property_name, value) + # Visually disable Up or Down arrow when limit is reached to better indicate a limit has been hit + %Spin/Decrement.disabled = value <= min + %Spin/Increment.disabled = value >= max + + +# If prefix or suffix was clicked, select the actual value box instead and move the caret to the closest side. +func _on_sublabel_clicked(event: InputEvent) -> void: + if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT: + var mousePos: Vector2 = get_global_mouse_position() + mousePos.x -= get_minimum_size().x / 2 + if mousePos.x > global_position.x: + (%Value as LineEdit).caret_column = (%Value as LineEdit).text.length() + else: + (%Value as LineEdit).caret_column = 0 + (%Value as LineEdit).grab_focus() + + +func _on_value_focus_exited() -> void: + _on_value_text_submitted(%Value.text) + $Value_Panel.add_theme_stylebox_override('panel', get_theme_stylebox('panel', 'DialogicEventEdit')) + + +func _on_value_focus_entered() -> void: + $Value_Panel.add_theme_stylebox_override('panel', get_theme_stylebox('focus', 'DialogicEventEdit')) + %Value.select_all.call_deferred() + +#endregion + diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_number.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_number.tscn new file mode 100644 index 0000000..5053a87 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_number.tscn @@ -0,0 +1,160 @@ +[gd_scene load_steps=9 format=3 uid="uid://kdpp3mibml33"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_number.gd" id="1_0jdnn"] +[ext_resource type="Texture2D" uid="uid://dh1ycbmw8anqh" path="res://addons/dialogic/Editor/Images/Interactable/increment_icon.svg" id="3_v5cne"] +[ext_resource type="Texture2D" uid="uid://brjikovneb63n" path="res://addons/dialogic/Editor/Images/Interactable/decrement_icon.svg" id="4_ph52o"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_sj3oj"] +content_margin_left = 3.0 +content_margin_right = 1.0 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8yqsu"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_smq50"] +content_margin_left = 2.0 +content_margin_right = 1.0 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_increment"] +content_margin_left = 2.0 +content_margin_top = 6.0 +content_margin_right = 2.0 +content_margin_bottom = 2.0 +bg_color = Color(0.94, 0.94, 0.94, 0) +border_color = Color(0, 0, 0, 0) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_decrement"] +content_margin_left = 2.0 +content_margin_top = 2.0 +content_margin_right = 2.0 +content_margin_bottom = 6.0 +bg_color = Color(0.94, 0.94, 0.94, 0) +border_color = Color(0, 0, 0, 0) + +[node name="Field_Number" type="HBoxContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -1102.0 +offset_bottom = -617.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/separation = 0 +script = ExtResource("1_0jdnn") + +[node name="Value_Panel" type="PanelContainer" parent="."] +layout_mode = 2 +theme_type_variation = &"DialogicEventEdit" + +[node name="Layout" type="HBoxContainer" parent="Value_Panel"] +layout_mode = 2 +theme_override_constants/separation = 0 + +[node name="Prefix" type="RichTextLabel" parent="Value_Panel/Layout"] +unique_name_in_owner = true +visible = false +clip_contents = false +layout_direction = 2 +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 4 +mouse_filter = 1 +mouse_default_cursor_shape = 1 +theme_override_colors/default_color = Color(0.54099, 0.540991, 0.54099, 1) +theme_override_styles/focus = SubResource("StyleBoxEmpty_sj3oj") +theme_override_styles/normal = SubResource("StyleBoxEmpty_sj3oj") +bbcode_enabled = true +fit_content = true +scroll_active = false +autowrap_mode = 0 +tab_size = 2 +shortcut_keys_enabled = false +drag_and_drop_selection_enabled = false +text_direction = 1 + +[node name="Value" type="LineEdit" parent="Value_Panel/Layout"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +focus_mode = 1 +theme_override_constants/minimum_character_width = 0 +theme_override_styles/normal = SubResource("StyleBoxEmpty_8yqsu") +theme_override_styles/focus = SubResource("StyleBoxEmpty_8yqsu") +theme_override_styles/read_only = SubResource("StyleBoxEmpty_8yqsu") +text = "0" +alignment = 1 +expand_to_text_length = true +virtual_keyboard_type = 3 + +[node name="Suffix" type="RichTextLabel" parent="Value_Panel/Layout"] +unique_name_in_owner = true +visible = false +clip_contents = false +layout_direction = 2 +layout_mode = 2 +size_flags_horizontal = 8 +size_flags_vertical = 4 +mouse_default_cursor_shape = 1 +theme_override_colors/default_color = Color(0.435192, 0.435192, 0.435192, 1) +theme_override_styles/focus = SubResource("StyleBoxEmpty_smq50") +theme_override_styles/normal = SubResource("StyleBoxEmpty_smq50") +bbcode_enabled = true +fit_content = true +scroll_active = false +autowrap_mode = 0 +tab_size = 2 +shortcut_keys_enabled = false +drag_and_drop_selection_enabled = false +text_direction = 1 + +[node name="Spin" type="VBoxContainer" parent="Value_Panel/Layout"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_constants/separation = 0 +alignment = 1 + +[node name="Increment" type="Button" parent="Value_Panel/Layout/Spin"] +layout_mode = 2 +size_flags_vertical = 3 +auto_translate = false +focus_neighbor_left = NodePath("../../Value") +focus_neighbor_top = NodePath(".") +focus_neighbor_bottom = NodePath("../Decrement") +theme_override_colors/icon_hover_color = Color(0.412738, 0.550094, 0.760917, 1) +theme_override_colors/icon_focus_color = Color(0.412738, 0.550094, 0.760917, 1) +theme_override_styles/normal = SubResource("StyleBoxFlat_increment") +theme_override_styles/hover = SubResource("StyleBoxFlat_increment") +theme_override_styles/pressed = SubResource("StyleBoxFlat_increment") +theme_override_styles/disabled = SubResource("StyleBoxFlat_increment") +theme_override_styles/focus = SubResource("StyleBoxFlat_increment") +icon = ExtResource("3_v5cne") +flat = true +vertical_icon_alignment = 2 + +[node name="Decrement" type="Button" parent="Value_Panel/Layout/Spin"] +layout_mode = 2 +size_flags_vertical = 3 +auto_translate = false +focus_neighbor_left = NodePath("../../Value") +focus_neighbor_top = NodePath("../Increment") +focus_neighbor_bottom = NodePath(".") +theme_override_colors/icon_hover_color = Color(0.412738, 0.550094, 0.760917, 1) +theme_override_colors/icon_focus_color = Color(0.412738, 0.550094, 0.760917, 1) +theme_override_styles/normal = SubResource("StyleBoxFlat_decrement") +theme_override_styles/hover = SubResource("StyleBoxFlat_decrement") +theme_override_styles/pressed = SubResource("StyleBoxFlat_decrement") +theme_override_styles/disabled = SubResource("StyleBoxFlat_decrement") +theme_override_styles/focus = SubResource("StyleBoxFlat_decrement") +icon = ExtResource("4_ph52o") +flat = true +vertical_icon_alignment = 2 + +[connection signal="gui_input" from="Value_Panel/Layout/Prefix" to="." method="_on_sublabel_clicked"] +[connection signal="focus_entered" from="Value_Panel/Layout/Value" to="." method="_on_value_focus_entered"] +[connection signal="focus_exited" from="Value_Panel/Layout/Value" to="." method="_on_value_focus_exited"] +[connection signal="gui_input" from="Value_Panel/Layout/Value" to="." method="_on_gui_input"] +[connection signal="text_submitted" from="Value_Panel/Layout/Value" to="." method="_on_value_text_submitted"] +[connection signal="gui_input" from="Value_Panel/Layout/Suffix" to="." method="_on_sublabel_clicked"] +[connection signal="button_down" from="Value_Panel/Layout/Spin/Increment" to="." method="_on_increment_button_down" binds= [NodePath("%Spin/Increment")]] +[connection signal="gui_input" from="Value_Panel/Layout/Spin/Increment" to="." method="_on_gui_input"] +[connection signal="button_down" from="Value_Panel/Layout/Spin/Decrement" to="." method="_on_decrement_button_down" binds= [NodePath("%Spin/Decrement")]] +[connection signal="gui_input" from="Value_Panel/Layout/Spin/Decrement" to="." method="_on_gui_input"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_dynamic.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_dynamic.gd new file mode 100644 index 0000000..16a315f --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_dynamic.gd @@ -0,0 +1,289 @@ +@tool +extends DialogicVisualEditorField +## Event block field for strings. Options are determined by a function. + + +## SETTINGS +@export var placeholder_text := "Select Resource" +@export var empty_text := "" +enum Modes {PURE_STRING, PRETTY_PATH, IDENTIFIER} +@export var mode := Modes.PURE_STRING +@export var fit_text_length := true +var collapse_when_empty := false +var valid_file_drop_extension := "" +var get_suggestions_func: Callable + +var resource_icon: Texture = null: + get: + return resource_icon + set(new_icon): + resource_icon = new_icon + %Icon.texture = new_icon + +## STATE +var current_value: String +var current_selected := 0 + +## SUGGESTIONS ITEM LIST +var _v_separation := 0 +var _h_separation := 0 +var _icon_margin := 0 +var _line_height := 24 +var _max_height := 200 * DialogicUtil.get_editor_scale() + + +#region FIELD METHODS +################################################################################ + +func _set_value(value:Variant) -> void: + if value == null or value.is_empty(): + %Search.text = empty_text + else: + match mode: + Modes.PRETTY_PATH: + %Search.text = DialogicUtil.pretty_name(value) + Modes.IDENTIFIER when value.begins_with("res://"): + %Search.text = DialogicResourceUtil.get_unique_identifier(value) + _: + %Search.text = str(value) + + %Search.visible = not collapse_when_empty or value + current_value = str(value) + + + +func _load_display_info(info:Dictionary) -> void: + valid_file_drop_extension = info.get('file_extension', '') + collapse_when_empty = info.get('collapse_when_empty', false) + get_suggestions_func = info.get('suggestions_func', get_suggestions_func) + empty_text = info.get('empty_text', '') + placeholder_text = info.get('placeholder', 'Select Resource') + mode = info.get("mode", 0) + resource_icon = info.get('icon', null) + %Search.tooltip_text = info.get('tooltip_text', '') + await ready + if resource_icon == null and info.has('editor_icon'): + resource_icon = callv('get_theme_icon', info.editor_icon) + + +func _autofocus() -> void: + %Search.grab_focus() + +#endregion + + +#region BASIC +################################################################################ + +func _ready() -> void: + var focus := get_theme_stylebox("focus", "LineEdit") + if has_theme_stylebox("focus", "DialogicEventEdit"): + focus = get_theme_stylebox('focus', 'DialogicEventEdit') + %Focus.add_theme_stylebox_override('panel', focus) + + %Search.text_changed.connect(_on_Search_text_changed) + %Search.text_submitted.connect(_on_Search_text_entered) + %Search.placeholder_text = placeholder_text + %Search.expand_to_text_length = fit_text_length + + %SelectButton.icon = get_theme_icon("Collapse", "EditorIcons") + + %Suggestions.add_theme_stylebox_override('bg', load("res://addons/dialogic/Editor/Events/styles/ResourceMenuPanelBackground.tres")) + %Suggestions.hide() + %Suggestions.item_selected.connect(suggestion_selected) + %Suggestions.item_clicked.connect(suggestion_selected) + %Suggestions.fixed_icon_size = Vector2i(16, 16) * DialogicUtil.get_editor_scale() + + _v_separation = %Suggestions.get_theme_constant("v_separation") + _h_separation = %Suggestions.get_theme_constant("h_separation") + _icon_margin = %Suggestions.get_theme_constant("icon_margin") + + if resource_icon == null: + self.resource_icon = null + + +func change_to_empty() -> void: + value_changed.emit(property_name, "") + +#endregion + + +#region SEARCH & SUGGESTION POPUP +################################################################################ +func _on_Search_text_entered(new_text:String) -> void: + if %Suggestions.get_item_count(): + if %Suggestions.is_anything_selected(): + suggestion_selected(%Suggestions.get_selected_items()[0]) + else: + suggestion_selected(0) + else: + change_to_empty() + + +func _on_Search_text_changed(new_text:String, just_update:bool = false) -> void: + %Suggestions.clear() + + if new_text == "" and !just_update: + change_to_empty() + else: + %Search.show() + + var suggestions: Dictionary = get_suggestions_func.call(new_text) + + var line_length := 0 + var idx := 0 + for element in suggestions: + if new_text.is_empty() or new_text.to_lower() in element.to_lower() or new_text.to_lower() in str(suggestions[element].value).to_lower() or new_text.to_lower() in suggestions[element].get('tooltip', '').to_lower(): + var curr_line_length: int = 0 + curr_line_length = get_theme_font('font', 'Label').get_string_size( + element, HORIZONTAL_ALIGNMENT_LEFT, -1, get_theme_font_size("font_size", 'Label') + ).x + + %Suggestions.add_item(element) + if suggestions[element].has('icon'): + %Suggestions.set_item_icon(idx, suggestions[element].icon) + curr_line_length += %Suggestions.fixed_icon_size.x * %Suggestions.get_icon_scale() + _icon_margin * 2 + _h_separation + elif suggestions[element].has('editor_icon'): + %Suggestions.set_item_icon(idx, get_theme_icon(suggestions[element].editor_icon[0],suggestions[element].editor_icon[1])) + curr_line_length += %Suggestions.fixed_icon_size.x * %Suggestions.get_icon_scale() + _icon_margin * 2 + _h_separation + + line_length = max(line_length, curr_line_length) + + %Suggestions.set_item_tooltip(idx, suggestions[element].get('tooltip', '')) + %Suggestions.set_item_metadata(idx, suggestions[element].value) + idx += 1 + + if not %Suggestions.visible: + %Suggestions.show() + %Suggestions.global_position = $PanelContainer.global_position+Vector2(0,1)*$PanelContainer.size.y + + if %Suggestions.item_count: + %Suggestions.select(0) + current_selected = 0 + else: + current_selected = -1 + %Search.grab_focus() + + var total_height: int = 0 + for item in %Suggestions.item_count: + total_height += _line_height * DialogicUtil.get_editor_scale() + _v_separation + total_height += _v_separation * 2 + if total_height > _max_height: + line_length += %Suggestions.get_v_scroll_bar().get_minimum_size().x + + %Suggestions.size.x = max(%PanelContainer.size.x, line_length) + %Suggestions.size.y = min(total_height, _max_height) + + # Defer setting width to give PanelContainer + # time to update it's size + await get_tree().process_frame + await get_tree().process_frame + + %Suggestions.size.x = max(%PanelContainer.size.x, line_length) + + +func suggestion_selected(index: int, position := Vector2(), button_index := MOUSE_BUTTON_LEFT) -> void: + if button_index != MOUSE_BUTTON_LEFT: + return + if %Suggestions.is_item_disabled(index): + return + + %Search.text = %Suggestions.get_item_text(index) + + if %Suggestions.get_item_metadata(index) == null: + current_value = "" + + else: + current_value = %Suggestions.get_item_metadata(index) + + hide_suggestions() + + grab_focus() + value_changed.emit(property_name, current_value) + + +func _input(event:InputEvent) -> void: + if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT: + if %Suggestions.visible: + if !%Suggestions.get_global_rect().has_point(get_global_mouse_position()) and \ + !%SelectButton.get_global_rect().has_point(get_global_mouse_position()): + hide_suggestions() + + +func hide_suggestions() -> void: + %SelectButton.set_pressed_no_signal(false) + %Suggestions.hide() + if !current_value and collapse_when_empty: + %Search.hide() + + +func _on_SelectButton_toggled(button_pressed:bool) -> void: + if button_pressed: + _on_Search_text_changed('', true) + else: + hide_suggestions() + + +func _on_focus_entered() -> void: + %Search.grab_focus() + + +func _on_search_gui_input(event: InputEvent) -> void: + if event is InputEventKey and (event.keycode == KEY_DOWN or event.keycode == KEY_UP) and event.pressed: + if !%Suggestions.visible: + _on_Search_text_changed('', true) + current_selected = -1 + if event.keycode == KEY_DOWN: + current_selected = wrapi(current_selected+1, 0, %Suggestions.item_count) + if event.keycode == KEY_UP: + current_selected = wrapi(current_selected-1, 0, %Suggestions.item_count) + %Suggestions.select(current_selected) + %Suggestions.ensure_current_is_visible() + + if Input.is_key_pressed(KEY_CTRL): + if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT: + if valid_file_drop_extension in [".dch", ".dtl"] and not current_value.is_empty(): + EditorInterface.edit_resource(DialogicResourceUtil.get_resource_from_identifier(current_value, valid_file_drop_extension)) + + if valid_file_drop_extension in [".dch", ".dtl"] and not current_value.is_empty(): + %Search.mouse_default_cursor_shape = CURSOR_POINTING_HAND + else: + %Search.mouse_default_cursor_shape = CURSOR_IBEAM + + +func _on_search_focus_entered() -> void: + if %Search.text == "": + _on_Search_text_changed("") + %Search.call_deferred('select_all') + %Focus.show() + + +func _on_search_focus_exited() -> void: + %Focus.hide() + if !%Suggestions.get_global_rect().has_point(get_global_mouse_position()): + hide_suggestions() + +#endregion + + +#region DRAG AND DROP +################################################################################ + +func _can_drop_data(position:Vector2, data:Variant) -> bool: + if typeof(data) == TYPE_DICTIONARY and data.has('files') and len(data.files) == 1: + if valid_file_drop_extension: + if data.files[0].ends_with(valid_file_drop_extension): + return true + else: + return false + return false + + +func _drop_data(position:Vector2, data:Variant) -> void: + var path := str(data.files[0]) + if mode == Modes.IDENTIFIER: + path = DialogicResourceUtil.get_unique_identifier(path) + _set_value(path) + value_changed.emit(property_name, path) + +#endregion diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_dynamic.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_dynamic.tscn new file mode 100644 index 0000000..1f4e220 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_dynamic.tscn @@ -0,0 +1,135 @@ +[gd_scene load_steps=7 format=3 uid="uid://dpwhshre1n4t6"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_options_dynamic.gd" id="1_b07gq"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_tmt5n"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_vennf"] + +[sub_resource type="Image" id="Image_5e7lo"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_g63da"] +image = SubResource("Image_5e7lo") + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_g74jb"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(1, 0.365, 0.365, 1) +draw_center = false +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +corner_detail = 1 + +[node name="Field_DynamicStringOptions" type="HBoxContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -2.0 +offset_top = -2.0 +offset_right = -1005.0 +offset_bottom = -622.0 +grow_horizontal = 2 +grow_vertical = 2 +focus_mode = 2 +script = ExtResource("1_b07gq") +placeholder_text = "" + +[node name="PanelContainer" type="MarginContainer" parent="."] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/margin_left = 0 +theme_override_constants/margin_top = 0 +theme_override_constants/margin_right = 0 +theme_override_constants/margin_bottom = 0 + +[node name="BG" type="Panel" parent="PanelContainer"] +unique_name_in_owner = true +layout_mode = 2 +mouse_filter = 2 +theme_type_variation = &"DialogicEventEdit" +metadata/_edit_use_anchors_ = true + +[node name="MarginContainer" type="MarginContainer" parent="PanelContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 2 +theme_override_constants/margin_top = 2 +theme_override_constants/margin_right = 2 +theme_override_constants/margin_bottom = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer"] +layout_mode = 2 + +[node name="Icon" type="TextureRect" parent="PanelContainer/MarginContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +mouse_filter = 2 +stretch_mode = 5 + +[node name="Search" type="LineEdit" parent="PanelContainer/MarginContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 4 +focus_neighbor_bottom = NodePath("Suggestions") +focus_mode = 1 +mouse_filter = 1 +theme_override_styles/normal = SubResource("StyleBoxEmpty_tmt5n") +theme_override_styles/focus = SubResource("StyleBoxEmpty_vennf") +expand_to_text_length = true +flat = true +caret_blink = true + +[node name="Suggestions" type="ItemList" parent="PanelContainer/MarginContainer/HBoxContainer/Search"] +unique_name_in_owner = true +visible = false +top_level = true +custom_minimum_size = Vector2(-1086, 0) +layout_mode = 0 +offset_left = -5.0 +offset_top = 36.0 +offset_right = 195.0 +offset_bottom = 71.0 +size_flags_vertical = 0 +auto_translate = false +focus_neighbor_top = NodePath("..") +max_text_lines = 3 +item_count = 1 +fixed_icon_size = Vector2i(16, 16) +item_0/text = "Hello" + +[node name="SelectButton" type="Button" parent="PanelContainer/MarginContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +focus_mode = 0 +toggle_mode = true +shortcut_in_tooltip = false +icon = SubResource("ImageTexture_g63da") +flat = true + +[node name="Focus" type="Panel" parent="PanelContainer"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +mouse_filter = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_g74jb") +metadata/_edit_use_anchors_ = true + +[connection signal="focus_entered" from="." to="." method="_on_focus_entered"] +[connection signal="focus_entered" from="PanelContainer/MarginContainer/HBoxContainer/Search" to="." method="_on_search_focus_entered"] +[connection signal="focus_exited" from="PanelContainer/MarginContainer/HBoxContainer/Search" to="." method="_on_search_focus_exited"] +[connection signal="gui_input" from="PanelContainer/MarginContainer/HBoxContainer/Search" to="." method="_on_search_gui_input"] +[connection signal="gui_input" from="PanelContainer/MarginContainer/HBoxContainer/Search/Suggestions" to="." method="_on_suggestions_gui_input"] +[connection signal="toggled" from="PanelContainer/MarginContainer/HBoxContainer/SelectButton" to="." method="_on_SelectButton_toggled"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_fixed.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_fixed.gd new file mode 100644 index 0000000..3f7efb2 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_fixed.gd @@ -0,0 +1,62 @@ +@tool +extends DialogicVisualEditorField + +## Event block field for constant options. For varying options use ComplexPicker. + +var options: Array = [] + +## if true, only the symbol will be displayed. In the dropdown text will be visible. +## Useful for making UI simpler +var symbol_only := false: + set(value): + symbol_only = value + if value: self.text = "" + +var current_value: Variant = -1 + + +func _ready() -> void: + add_theme_color_override("font_disabled_color", get_theme_color("font_color", "MenuButton")) + self.about_to_popup.connect(insert_options) + call("get_popup").index_pressed.connect(index_pressed) + + +func _load_display_info(info:Dictionary) -> void: + options = info.get('options', []) + self.disabled = info.get('disabled', false) + symbol_only = info.get('symbol_only', false) + + +func _set_value(value:Variant) -> void: + for option in options: + if option['value'] == value: + if typeof(option.get('icon')) == TYPE_ARRAY: + option.icon = callv('get_theme_icon', option.get('icon')) + if !symbol_only: + self.text = option['label'] + self.icon = option.get('icon', null) + current_value = value + + +func get_value() -> Variant: + return current_value + + +func insert_options() -> void: + call("get_popup").clear() + + var idx := 0 + for option in options: + if typeof(option.get('icon')) == TYPE_ARRAY: + option.icon = callv('get_theme_icon', option.get('icon')) + call("get_popup").add_icon_item(option.get('icon', null), option['label']) + call("get_popup").set_item_metadata(idx, option['value']) + idx += 1 + + +func index_pressed(idx:int) -> void: + current_value = idx + if !symbol_only: + self.text = call("get_popup").get_item_text(idx) + self.icon =call("get_popup").get_item_icon(idx) + value_changed.emit(property_name, call("get_popup").get_item_metadata(idx)) diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_fixed.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_fixed.tscn new file mode 100644 index 0000000..550160c --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_options_fixed.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=2 format=3 uid="uid://d3bhehatwoio"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_options_fixed.gd" id="1"] + +[node name="Field_FixedOptions" type="MenuButton"] +offset_right = 137.0 +offset_bottom = 43.0 +focus_mode = 2 +theme_type_variation = &"DialogicEventEdit" +theme_override_colors/font_disabled_color = Color(0.875, 0.875, 0.875, 1) +text = "Placeholder Text" +flat = false +script = ExtResource("1") diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_multiline.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_multiline.gd new file mode 100644 index 0000000..aaeb4c4 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_multiline.gd @@ -0,0 +1,74 @@ +@tool +extends DialogicVisualEditorField + +## Event block field that allows entering multiline text (mainly text event). + +@onready var code_completion_helper: Node = find_parent('EditorsManager').get_node('CodeCompletionHelper') + + +#region MAIN METHODS +################################################################################ + +func _ready() -> void: + self.text_changed.connect(_on_text_changed) + self.syntax_highlighter = code_completion_helper.text_syntax_highlighter + + +func _load_display_info(info:Dictionary) -> void: + pass + + +func _set_value(value:Variant) -> void: + self.text = str(value) + + +func _autofocus() -> void: + grab_focus() + +#endregion + + +#region SIGNAL METHODS +################################################################################ + +func _on_text_changed(value := "") -> void: + value_changed.emit(property_name, self.text) + +#endregion + + +#region AUTO COMPLETION +################################################################################ + +## Called if something was typed +func _request_code_completion(force:bool): + code_completion_helper.request_code_completion(force, self, 0) + + +## Filters the list of all possible options, depending on what was typed +## Purpose of the different Kinds is explained in [_request_code_completion] +func _filter_code_completion_candidates(candidates:Array) -> Array: + return code_completion_helper.filter_code_completion_candidates(candidates, self) + + +## Called when code completion was activated +## Inserts the selected item +func _confirm_code_completion(replace:bool) -> void: + code_completion_helper.confirm_code_completion(replace, self) + +#endregion + + +#region SYMBOL CLICKING +################################################################################ + +## Performs an action (like opening a link) when a valid symbol was clicked +func _on_symbol_lookup(symbol, line, column): + code_completion_helper.symbol_lookup(symbol, line, column) + + +## Called to test if a symbol can be clicked +func _on_symbol_validate(symbol:String) -> void: + code_completion_helper.symbol_validate(symbol, self) + +#endregion diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_multiline.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_multiline.tscn new file mode 100644 index 0000000..6ab8fb6 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_multiline.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=4 format=3 uid="uid://dyp7m2nvab1aj"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/TimelineEditor/TextEditor/syntax_highlighter.gd" id="2_ww6ga"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_text_multiline.gd" id="3_q7600"] + +[sub_resource type="SyntaxHighlighter" id="SyntaxHighlighter_2q5dk"] +script = ExtResource("2_ww6ga") + +[node name="Field_Text_Multiline" type="CodeEdit"] +offset_right = 413.0 +offset_bottom = 15.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_type_variation = &"DialogicTextEventTextEdit" +wrap_mode = 1 +scroll_fit_content_height = true +syntax_highlighter = SubResource("SyntaxHighlighter_2q5dk") +symbol_lookup_on_click = true +delimiter_strings = Array[String]([]) +code_completion_enabled = true +code_completion_prefixes = Array[String](["[", "{"]) +indent_automatic_prefixes = Array[String]([":", "{", "[", ")"]) +auto_brace_completion_enabled = true +auto_brace_completion_pairs = { +"[": "]", +"{": "}" +} +script = ExtResource("3_q7600") diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_singleline.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_singleline.gd new file mode 100644 index 0000000..765f862 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_singleline.gd @@ -0,0 +1,40 @@ +@tool +extends DialogicVisualEditorField + +## Event block field for a single line of text. + + +var placeholder := "": + set(value): + placeholder = value + self.placeholder_text = placeholder + + +#region MAIN METHODS +################################################################################ + +func _ready() -> void: + self.text_changed.connect(_on_text_changed) + + +func _load_display_info(info:Dictionary) -> void: + self.placeholder = info.get('placeholder', '') + + +func _set_value(value:Variant) -> void: + self.text = str(value) + + +func _autofocus() -> void: + grab_focus() + +#endregion + + +#region SIGNAL METHODS +################################################################################ + +func _on_text_changed(value := "") -> void: + value_changed.emit(property_name, self.text) + +#endregion diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_singleline.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_singleline.tscn new file mode 100644 index 0000000..d90d3b0 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_text_singleline.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=2 format=3 uid="uid://c0vkcehgjsjy"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_text_singleline.gd" id="1_4vnxv"] + +[node name="Field_Text_Singleline" type="LineEdit"] +offset_right = 1152.0 +offset_bottom = 81.0 +theme_type_variation = &"DialogicEventEdit" +expand_to_text_length = true +script = ExtResource("1_4vnxv") diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector2.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector2.gd new file mode 100644 index 0000000..040abf0 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector2.gd @@ -0,0 +1,26 @@ +@tool +extends DialogicVisualEditorFieldVector +## Event block field for a Vector2. + +var current_value := Vector2() + + +func _set_value(value: Variant) -> void: + current_value = value + super(value) + + +func get_value() -> Vector2: + return current_value + + +func _on_sub_value_changed(sub_component: String, value: float) -> void: + match sub_component: + 'X': current_value.x = value + 'Y': current_value.y = value + _on_value_changed(current_value) + + +func _update_sub_component_text(value: Variant) -> void: + $X._on_value_text_submitted(str(value.x), true) + $Y._on_value_text_submitted(str(value.y), true) diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector2.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector2.tscn new file mode 100644 index 0000000..bfbc8d6 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector2.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=3 format=3 uid="uid://dtimnsj014cu"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_vector2.gd" id="1_v6lp0"] +[ext_resource type="PackedScene" uid="uid://kdpp3mibml33" path="res://addons/dialogic/Editor/Events/Fields/field_number.tscn" id="2_a0b6y"] + +[node name="Field_Vector2" type="HBoxContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -1033.0 +offset_bottom = -617.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/separation = 2 +script = ExtResource("1_v6lp0") + +[node name="X" parent="." instance=ExtResource("2_a0b6y")] +layout_mode = 2 +step = 0.001 +min = -9999.0 +max = 9999.0 +prefix = "" + +[node name="Y" parent="." instance=ExtResource("2_a0b6y")] +layout_mode = 2 +step = 0.001 +min = -9999.0 +max = 9999.0 +prefix = "" diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector3.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector3.gd new file mode 100644 index 0000000..c5b9f6d --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector3.gd @@ -0,0 +1,28 @@ +@tool +extends DialogicVisualEditorFieldVector +## Event block field for a Vector3. + +var current_value := Vector3() + + +func _set_value(value: Variant) -> void: + current_value = value + super(value) + + +func get_value() -> Vector3: + return current_value + + +func _on_sub_value_changed(sub_component: String, value: float) -> void: + match sub_component: + 'X': current_value.x = value + 'Y': current_value.y = value + 'Z': current_value.z = value + _on_value_changed(current_value) + + +func _update_sub_component_text(value: Variant) -> void: + $X._on_value_text_submitted(str(value.x), true) + $Y._on_value_text_submitted(str(value.y), true) + $Z._on_value_text_submitted(str(value.z), true) diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector3.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector3.tscn new file mode 100644 index 0000000..019a26b --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector3.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=4 format=3 uid="uid://cklkpfrcvopgw"] + +[ext_resource type="PackedScene" uid="uid://dtimnsj014cu" path="res://addons/dialogic/Editor/Events/Fields/field_vector2.tscn" id="1_l3y0o"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_vector3.gd" id="2_gktf1"] +[ext_resource type="PackedScene" uid="uid://kdpp3mibml33" path="res://addons/dialogic/Editor/Events/Fields/field_number.tscn" id="3_k0u0p"] + +[node name="Field_Vector3" instance=ExtResource("1_l3y0o")] +offset_right = -973.0 +script = ExtResource("2_gktf1") + +[node name="Z" parent="." index="2" instance=ExtResource("3_k0u0p")] +layout_mode = 2 +step = 0.001 +min = -9999.0 +max = 9999.0 +affix = "z:" diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector4.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector4.gd new file mode 100644 index 0000000..3259ce3 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector4.gd @@ -0,0 +1,30 @@ +@tool +extends DialogicVisualEditorFieldVector +## Event block field for a Vector4. + +var current_value := Vector4() + + +func _set_value(value: Variant) -> void: + current_value = value + super(value) + + +func get_value() -> Vector4: + return current_value + + +func _on_sub_value_changed(sub_component: String, value: float) -> void: + match sub_component: + 'X': current_value.x = value + 'Y': current_value.y = value + 'Z': current_value.z = value + 'W': current_value.w = value + _on_value_changed(current_value) + + +func _update_sub_component_text(value: Variant) -> void: + $X._on_value_text_submitted(str(value.x), true) + $Y._on_value_text_submitted(str(value.y), true) + $Z._on_value_text_submitted(str(value.z), true) + $W._on_value_text_submitted(str(value.w), true) diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector4.tscn b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector4.tscn new file mode 100644 index 0000000..182e0f2 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector4.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=4 format=3 uid="uid://dykss037r2rsc"] + +[ext_resource type="PackedScene" uid="uid://cklkpfrcvopgw" path="res://addons/dialogic/Editor/Events/Fields/field_vector3.tscn" id="1_20tvl"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/Fields/field_vector4.gd" id="2_yksrc"] +[ext_resource type="PackedScene" uid="uid://kdpp3mibml33" path="res://addons/dialogic/Editor/Events/Fields/field_number.tscn" id="3_1jogk"] + +[node name="Field_Vector4" instance=ExtResource("1_20tvl")] +offset_right = -908.0 +script = ExtResource("2_yksrc") + +[node name="W" parent="." index="3" instance=ExtResource("3_1jogk")] +layout_mode = 2 +step = 0.001 +min = -9999.0 +max = 9999.0 +affix = "w:" diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector_base.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector_base.gd new file mode 100644 index 0000000..5d5d9e9 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/Fields/field_vector_base.gd @@ -0,0 +1,38 @@ +class_name DialogicVisualEditorFieldVector +extends DialogicVisualEditorField +## Base type for Vector event blocks + + +func _ready() -> void: + for child in get_children(): + child.tooltip_text = tooltip_text + child.property_name = child.name #to identify the name of the changed sub-component + child.value_changed.connect(_on_sub_value_changed) + + +func _load_display_info(info: Dictionary) -> void: + for child in get_children(): + if child is DialogicVisualEditorFieldNumber: + if info.get('no_prefix', false): + child._load_display_info(info) + else: + var prefixed_info := info.duplicate() + prefixed_info.merge({'prefix':child.name.to_lower()}) + child._load_display_info(prefixed_info) + + +func _set_value(value: Variant) -> void: + _update_sub_component_text(value) + _on_value_changed(value) + + +func _on_value_changed(value: Variant) -> void: + value_changed.emit(property_name, value) + + +func _on_sub_value_changed(sub_component: String, value: float) -> void: + pass + + +func _update_sub_component_text(value: Variant) -> void: + pass diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/event_field.gd b/addons/dialogic-main/addons/dialogic/Editor/Events/event_field.gd new file mode 100644 index 0000000..f5db871 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/event_field.gd @@ -0,0 +1,35 @@ +@tool +class_name DialogicVisualEditorField +extends Control + +signal value_changed(property_name:String, value:Variant) +var property_name := "" + +var event_resource: DialogicEvent = null + +#region OVERWRITES +################################################################################ + +## To be overwritten +func _load_display_info(info:Dictionary) -> void: + pass + + +## To be overwritten +func _set_value(value:Variant) -> void: + pass + + +## To be overwritten +func _autofocus() -> void: + pass + +#endregion + + +func set_value(value:Variant) -> void: + _set_value(value) + + +func take_autofocus() -> void: + _autofocus() diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/styles/InputFieldsStyle.tres b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/InputFieldsStyle.tres new file mode 100644 index 0000000..fa952ee --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/InputFieldsStyle.tres @@ -0,0 +1,50 @@ +[gd_resource type="Theme" load_steps=3 format=3 uid="uid://d3g4i4dshtdpu"] + +[sub_resource type="StyleBoxFlat" id="1"] +content_margin_left = 30.0 +content_margin_top = 5.0 +content_margin_right = 20.0 +content_margin_bottom = 5.0 +bg_color = Color(0.12549, 0.141176, 0.192157, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.0980392, 0.113725, 0.152941, 1) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 + +[sub_resource type="StyleBoxFlat" id="2"] +content_margin_left = 11.0 +content_margin_top = 5.0 +content_margin_right = 20.0 +content_margin_bottom = 5.0 +bg_color = Color(0.12549, 0.141176, 0.192157, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.0980392, 0.113725, 0.152941, 1) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 + +[resource] +LineEdit/colors/clear_button_color = Color(0, 0, 0, 1) +LineEdit/colors/clear_button_color_pressed = Color(0, 0, 0, 1) +LineEdit/colors/cursor_color = Color(1, 1, 1, 1) +LineEdit/colors/font_color = Color(1, 1, 1, 1) +LineEdit/colors/font_color_selected = Color(1, 1, 1, 1) +LineEdit/colors/font_color_uneditable = Color(1, 1, 1, 1) +LineEdit/colors/selection_color = Color(1, 1, 1, 0.235294) +LineEdit/constants/minimum_spaces = 10 +LineEdit/fonts/font = null +LineEdit/icons/clear = null +LineEdit/styles/focus = SubResource("1") +LineEdit/styles/normal = SubResource("2") +LineEdit/styles/read_only = SubResource("1") +LineEditWithIcon/base_type = &"LineEdit" +LineEditWithIcon/styles/normal = SubResource("1") diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/styles/ResourceMenuHover.tres b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/ResourceMenuHover.tres new file mode 100644 index 0000000..ecf8376 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/ResourceMenuHover.tres @@ -0,0 +1,11 @@ +[gd_resource type="StyleBoxFlat" format=2] + +[resource] +content_margin_left = 25.0 +content_margin_right = 10.0 +content_margin_top = 4.0 +content_margin_bottom = 4.0 +bg_color = Color( 0.466667, 0.466667, 0.466667, 0.141176 ) +border_width_bottom = 2 +corner_radius_top_left = 4 +corner_radius_top_right = 4 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/styles/ResourceMenuNormal.tres b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/ResourceMenuNormal.tres new file mode 100644 index 0000000..d14860a --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/ResourceMenuNormal.tres @@ -0,0 +1,13 @@ +[gd_resource type="StyleBoxFlat" format=2] + +[resource] +content_margin_left = 25.0 +content_margin_right = 10.0 +content_margin_top = 4.0 +content_margin_bottom = 4.0 +bg_color = Color( 0.180392, 0.180392, 0.180392, 0.219608 ) +draw_center = false +border_width_bottom = 2 +border_color = Color( 0.8, 0.8, 0.8, 0.286275 ) +corner_radius_top_left = 4 +corner_radius_top_right = 4 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/styles/ResourceMenuPanelBackground.tres b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/ResourceMenuPanelBackground.tres new file mode 100644 index 0000000..314544b --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/ResourceMenuPanelBackground.tres @@ -0,0 +1,17 @@ +[gd_resource type="StyleBoxFlat" format=3 uid="uid://c8k6tbipodsg"] + +[resource] +content_margin_left = 10.0 +content_margin_top = 10.0 +content_margin_right = 10.0 +content_margin_bottom = 10.0 +bg_color = Color(0, 0, 0, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.8, 0.8, 0.8, 0.109804) +corner_radius_top_left = 4 +corner_radius_top_right = 4 +corner_radius_bottom_right = 4 +corner_radius_bottom_left = 4 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/styles/SectionPanel.tres b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/SectionPanel.tres new file mode 100644 index 0000000..b886c6e --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/SectionPanel.tres @@ -0,0 +1,17 @@ +[gd_resource type="StyleBoxFlat" format=2] + +[resource] +content_margin_left = 6.0 +content_margin_right = 6.0 +content_margin_top = 5.0 +content_margin_bottom = 4.0 +bg_color = Color( 0.6, 0.6, 0.6, 0 ) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color( 0.2, 0.227451, 0.309804, 1 ) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/styles/SimpleButtonHover.tres b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/SimpleButtonHover.tres new file mode 100644 index 0000000..5be19d4 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/SimpleButtonHover.tres @@ -0,0 +1,17 @@ +[gd_resource type="StyleBoxFlat" format=2] + +[resource] +content_margin_left = 3.0 +content_margin_right = 3.0 +content_margin_top = 3.0 +content_margin_bottom = 3.0 +bg_color = Color( 0.2, 0.231373, 0.309804, 0.317647 ) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color( 0.8, 0.8, 0.8, 0.109804 ) +corner_radius_top_left = 4 +corner_radius_top_right = 4 +corner_radius_bottom_right = 4 +corner_radius_bottom_left = 4 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/styles/SimpleButtonNormal.tres b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/SimpleButtonNormal.tres new file mode 100644 index 0000000..e5c06b4 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/SimpleButtonNormal.tres @@ -0,0 +1,17 @@ +[gd_resource type="StyleBoxFlat" format=2] + +[resource] +content_margin_left = 3.0 +content_margin_right = 3.0 +content_margin_top = 3.0 +content_margin_bottom = 3.0 +bg_color = Color( 0.2, 0.231373, 0.309804, 0.235294 ) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color( 0.8, 0.8, 0.8, 0.109804 ) +corner_radius_top_left = 4 +corner_radius_top_right = 4 +corner_radius_bottom_right = 4 +corner_radius_bottom_left = 4 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/styles/TextBackground.tres b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/TextBackground.tres new file mode 100644 index 0000000..0d74e3d --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/TextBackground.tres @@ -0,0 +1,12 @@ +[gd_resource type="StyleBoxFlat" format=3 uid="uid://cu8otiwksn8ma"] + +[resource] +content_margin_left = 10.0 +content_margin_top = 13.0 +content_margin_bottom = 2.0 +bg_color = Color(1, 1, 1, 0.0784314) +border_color = Color(0.454902, 0.454902, 0.454902, 1) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/styles/selected_styleboxflat.tres b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/selected_styleboxflat.tres new file mode 100644 index 0000000..c9312fb --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/selected_styleboxflat.tres @@ -0,0 +1,16 @@ +[gd_resource type="StyleBoxFlat" format=3 uid="uid://obyrr26pqk2p"] + +[resource] +content_margin_left = 3.0 +content_margin_top = 1.0 +content_margin_right = 4.0 +content_margin_bottom = 1.0 +bg_color = Color(0.776471, 0.776471, 0.776471, 0.207843) +border_color = Color(1, 1, 1, 1) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 +expand_margin_left = 1.0 +expand_margin_top = 1.0 +expand_margin_bottom = 2.0 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Events/styles/unselected_stylebox.tres b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/unselected_stylebox.tres new file mode 100644 index 0000000..2fae3b3 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Events/styles/unselected_stylebox.tres @@ -0,0 +1,7 @@ +[gd_resource type="StyleBoxEmpty" format=3 uid="uid://cl75ikyq2is7c"] + +[resource] +content_margin_left = 3.0 +content_margin_top = 1.0 +content_margin_right = 4.0 +content_margin_bottom = 1.0 diff --git a/addons/dialogic-main/addons/dialogic/Editor/HomePage/home_page.gd b/addons/dialogic-main/addons/dialogic/Editor/HomePage/home_page.gd new file mode 100644 index 0000000..15aff25 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/HomePage/home_page.gd @@ -0,0 +1,86 @@ +@tool +extends DialogicEditor + +## A Main page in the dialogic editor. + +var tips: Array = [] + + + +func _get_icon() -> Texture: + return load("res://addons/dialogic/Editor/Images/plugin-icon.svg") + + +func _ready() -> void: + self_modulate = get_theme_color("font_color", "Editor") + self_modulate.a = 0.2 + + var edit_scale := DialogicUtil.get_editor_scale() + %HomePageBox.custom_minimum_size = Vector2(600, 350)*edit_scale + %TopPanel.custom_minimum_size.y = 100*edit_scale + %VersionLabel.set('theme_override_font_sizes/font_size', 10 * edit_scale) + var plugin_cfg := ConfigFile.new() + plugin_cfg.load("res://addons/dialogic/plugin.cfg") + %VersionLabel.text = plugin_cfg.get_value('plugin', 'version', 'unknown version') + + %BottomPanel.self_modulate = get_theme_color("dark_color_3", "Editor") + + %RandomTipLabel.add_theme_color_override("font_color", get_theme_color("property_color_z", "Editor")) + %RandomTipMoreButton.icon = get_theme_icon("ExternalLink", "EditorIcons") + + + +func _register() -> void: + editors_manager.register_simple_editor(self) + + self.alternative_text = "Welcome to dialogic!" + + + +func _open(extra_info:Variant="") -> void: + if tips.is_empty(): + var file := FileAccess.open('res://addons/dialogic/Editor/HomePage/tips.txt', FileAccess.READ) + tips = file.get_as_text().split('\n') + tips = tips.filter(func(item): return !item.is_empty()) + + randomize() + var tip: String = tips[randi()%len(tips)] + var text := tip.get_slice(';',0).strip_edges() + var action := tip.get_slice(';',1).strip_edges() + if action == text: + action = "" + show_tip(text, action) + + +func show_tip(text:String='', action:String='') -> void: + if text.is_empty(): + %TipBox.hide() + %RandomTipLabel.hide() + return + + %TipBox.show() + %RandomTipLabel.show() + %RandomTip.text = '[i]'+text + + if action.is_empty(): + %RandomTipMoreButton.hide() + return + + %RandomTipMoreButton.show() + + if %RandomTipMoreButton.pressed.is_connected(_on_tip_action): + %RandomTipMoreButton.pressed.disconnect(_on_tip_action) + %RandomTipMoreButton.pressed.connect(_on_tip_action.bind(action)) + + +func _on_tip_action(action:String) -> void: + if action.begins_with('https://'): + OS.shell_open(action) + return + elif action.begins_with('editor://'): + var editor_name := action.trim_prefix('editor://').get_slice('->',0) + var extra_info := action.trim_prefix('editor://').get_slice('->',1) + if editor_name in editors_manager.editors: + editors_manager.open_editor(editors_manager.editors[editor_name].node, false, extra_info) + return + print("Tip button doesn't do anything (", action, ")") diff --git a/addons/dialogic-main/addons/dialogic/Editor/HomePage/home_page.tscn b/addons/dialogic-main/addons/dialogic/Editor/HomePage/home_page.tscn new file mode 100644 index 0000000..0272d34 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/HomePage/home_page.tscn @@ -0,0 +1,373 @@ +[gd_scene load_steps=23 format=3 uid="uid://cqy73hshqqgga"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/HomePage/home_page.gd" id="1_6g38w"] +[ext_resource type="Texture2D" uid="uid://cvmlp5nxb2rer" path="res://addons/dialogic/Editor/HomePage/icon_bg.png" id="1_ed1g1"] +[ext_resource type="Texture2D" uid="uid://bt87p6qlso0ya" path="res://addons/dialogic/Editor/Images/dialogic-logo.svg" id="3_3leok"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_imi2d"] +draw_center = false +corner_radius_top_left = 15 +corner_radius_top_right = 15 +shadow_color = Color(0.796078, 0.572549, 0.933333, 0.0627451) +shadow_size = 24 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_n2afh"] +corner_radius_top_left = 15 +corner_radius_top_right = 15 + +[sub_resource type="Gradient" id="Gradient_lt7uf"] +colors = PackedColorArray(0.296484, 0.648457, 1, 1, 0.732014, 0.389374, 1, 1) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_2klx3"] +gradient = SubResource("Gradient_lt7uf") +fill_from = Vector2(0.151515, 0.272727) +fill_to = Vector2(1, 1) + +[sub_resource type="Gradient" id="Gradient_1gns2"] +offsets = PackedFloat32Array(0.302013, 0.872483) +colors = PackedColorArray(0.365323, 0.360806, 0.260695, 0, 0.615686, 0.615686, 0.615686, 0.592157) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_u0aw3"] +gradient = SubResource("Gradient_1gns2") +fill = 1 +fill_from = Vector2(0.497835, 0.493506) +fill_to = Vector2(1, 1) + +[sub_resource type="FontVariation" id="FontVariation_vepxx"] +variation_embolden = 2.0 + +[sub_resource type="LabelSettings" id="LabelSettings_w8q1h"] +font = SubResource("FontVariation_vepxx") +font_size = 40 +outline_size = 14 +outline_color = Color(0.0901961, 0.0901961, 0.0901961, 0.258824) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_p7ka2"] +content_margin_left = 10.0 +content_margin_top = 10.0 +content_margin_right = 10.0 +content_margin_bottom = 10.0 +bg_color = Color(1, 1, 1, 1) +corner_radius_bottom_right = 15 +corner_radius_bottom_left = 15 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_es88k"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ce6uo"] +content_margin_left = 7.0 +content_margin_top = 7.0 +content_margin_right = 7.0 +content_margin_bottom = 14.0 +bg_color = Color(0.803922, 0.352941, 1, 0.141176) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="FontVariation" id="FontVariation_elu6e"] +variation_embolden = 1.1 + +[sub_resource type="FontVariation" id="FontVariation_5kbdj"] +variation_transform = Transform2D(1, 0.239, 0, 1, 0, 0) + +[sub_resource type="FontVariation" id="FontVariation_g0m61"] +variation_embolden = 1.43 +variation_transform = Transform2D(1, 0.343, 0, 1, 0, 0) + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_a8dvw"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ckyhx"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.470588, 0.196078, 0.6, 1) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_l1doy"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.470588, 0.196078, 0.6, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 + +[sub_resource type="Image" id="Image_e1dkh"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_sr7s6"] +image = SubResource("Image_e1dkh") + +[node name="HomePage" type="TextureRect"] +self_modulate = Color(0, 0, 0, 0.2) +clip_contents = true +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -2.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("1_ed1g1") +expand_mode = 1 +stretch_mode = 3 +script = ExtResource("1_6g38w") + +[node name="CenterContainer" type="CenterContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="HomePageBox" type="VBoxContainer" parent="CenterContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(600, 350) +layout_mode = 2 +theme_override_constants/separation = 0 + +[node name="TopPanel" type="Panel" parent="CenterContainer/HomePageBox"] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 100) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_imi2d") + +[node name="Header2" type="Panel" parent="CenterContainer/HomePageBox/TopPanel"] +clip_children = 1 +clip_contents = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.4 +theme_override_styles/panel = SubResource("StyleBoxFlat_n2afh") + +[node name="BG" type="TextureRect" parent="CenterContainer/HomePageBox/TopPanel/Header2"] +modulate = Color(0.65098, 0.65098, 0.65098, 1) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.3 +texture = SubResource("GradientTexture2D_2klx3") +expand_mode = 1 + +[node name="Vignette" type="TextureRect" parent="CenterContainer/HomePageBox/TopPanel/Header2"] +modulate = Color(0, 0, 0, 1) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -166.0 +offset_bottom = 166.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = SubResource("GradientTexture2D_u0aw3") +expand_mode = 1 + +[node name="Logo" type="TextureRect" parent="CenterContainer/HomePageBox/TopPanel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 19.0 +offset_top = 10.0 +offset_right = -23.0 +offset_bottom = -10.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.3 +texture = ExtResource("3_3leok") +expand_mode = 1 +stretch_mode = 5 + +[node name="Label" type="Label" parent="CenterContainer/HomePageBox/TopPanel/Logo"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = 155.0 +offset_top = -37.0 +offset_right = 185.0 +offset_bottom = 21.0 +grow_horizontal = 2 +grow_vertical = 2 +rotation = -0.201447 +text = "2" +label_settings = SubResource("LabelSettings_w8q1h") + +[node name="BottomPanel" type="PanelContainer" parent="CenterContainer/HomePageBox"] +unique_name_in_owner = true +self_modulate = Color(0, 0, 0, 1) +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_p7ka2") + +[node name="VersionLabel" type="Label" parent="CenterContainer/HomePageBox/BottomPanel"] +unique_name_in_owner = true +modulate = Color(1, 1, 1, 0.501961) +layout_mode = 2 +size_flags_vertical = 8 +theme_override_font_sizes/font_size = 10 +text = "2.0-Alpha-15 WIP (Godot 4.2+)" +horizontal_alignment = 2 + +[node name="ScrollContainer" type="ScrollContainer" parent="CenterContainer/HomePageBox/BottomPanel"] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/separation = 50 + +[node name="CenterContainer" type="VBoxContainer" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer"] +layout_mode = 2 +size_flags_stretch_ratio = 0.4 + +[node name="Label" type="Label" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer"] +layout_mode = 2 +theme_type_variation = &"DialogicSection" +theme_override_constants/line_spacing = 0 +text = "Documentation" + +[node name="WikiButton" type="LinkButton" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer"] +layout_mode = 2 +theme_type_variation = &"DialogicLink" +text = " Wiki" +underline = 2 +uri = "https://docs.dialogic.pro/" + +[node name="WikiGettingStartedButton" type="LinkButton" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer"] +layout_mode = 2 +theme_type_variation = &"DialogicLink" +text = " Getting Started" +underline = 2 +uri = "https://docs.dialogic.pro/getting-started.html" + +[node name="Separator" type="Control" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer"] +custom_minimum_size = Vector2(0, 10) +layout_mode = 2 + +[node name="Label2" type="Label" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer"] +layout_mode = 2 +theme_type_variation = &"DialogicSection" +text = "Get in touch" + +[node name="BugRequestButton" type="LinkButton" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer"] +layout_mode = 2 +theme_type_variation = &"DialogicLink" +text = " Bug / Request" +underline = 2 +uri = "https://github.com/dialogic-godot/dialogic/issues/new/choose" + +[node name="DiscordButton" type="LinkButton" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer"] +layout_mode = 2 +theme_type_variation = &"DialogicLink" +text = " Discord" +underline = 2 +uri = "https://discord.gg/2hHQzkf2pX" + +[node name="Website" type="LinkButton" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer"] +layout_mode = 2 +theme_type_variation = &"DialogicLink" +text = " Website" +underline = 2 +uri = "https://dialogic.pro/" + +[node name="DonateButton" type="LinkButton" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer"] +layout_mode = 2 +theme_type_variation = &"DialogicLink" +text = " Donate" +underline = 2 +uri = "https://www.patreon.com/JowanSpooner" + +[node name="CenterContainer2" type="VBoxContainer" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/separation = 15 + +[node name="Control" type="Control" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer2"] +layout_mode = 2 + +[node name="WelcomeText" type="RichTextLabel" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer2"] +layout_mode = 2 +theme_override_styles/normal = SubResource("StyleBoxEmpty_es88k") +bbcode_enabled = true +text = "[center]Welcome to dialogic, a plugin that lets you easily create stories and dialogs for your game!" +fit_content = true + +[node name="RandomTipSection" type="VBoxContainer" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer2"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_constants/separation = -4 +alignment = 1 + +[node name="RandomTipLabel" type="Label" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer2/RandomTipSection"] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"DialogicSection" +theme_override_colors/font_color = Color(0, 0, 0, 1) +text = "Random Tip" + +[node name="TipBox" type="PanelContainer" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer2/RandomTipSection"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_ce6uo") + +[node name="RandomTip" type="RichTextLabel" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer2/RandomTipSection/TipBox"] +unique_name_in_owner = true +clip_contents = false +layout_mode = 2 +theme_override_fonts/bold_font = SubResource("FontVariation_elu6e") +theme_override_fonts/italics_font = SubResource("FontVariation_5kbdj") +theme_override_fonts/bold_italics_font = SubResource("FontVariation_g0m61") +theme_override_styles/normal = SubResource("StyleBoxEmpty_a8dvw") +bbcode_enabled = true +text = "[i]You can[/i] [b]create custom[/b] events, [i][b]subsystems, text effects and even editors for[/b][i] [code]dialogic!" +fit_content = true + +[node name="RandomTipMoreButton" type="Button" parent="CenterContainer/HomePageBox/BottomPanel/ScrollContainer/HBoxContainer/CenterContainer2/RandomTipSection/TipBox/RandomTip"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -30.0 +offset_top = 1.0 +offset_right = -8.0 +offset_bottom = 23.0 +grow_horizontal = 0 +grow_vertical = 0 +tooltip_text = "Check it out!" +theme_override_styles/normal = SubResource("StyleBoxFlat_ckyhx") +theme_override_styles/hover = SubResource("StyleBoxFlat_l1doy") +icon = SubResource("ImageTexture_sr7s6") +expand_icon = true diff --git a/addons/dialogic-main/addons/dialogic/Editor/HomePage/icon_bg.png b/addons/dialogic-main/addons/dialogic/Editor/HomePage/icon_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..77f127d8e6683e4fa520d7e48df25435ab78d531 GIT binary patch literal 150354 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ໟ#iWEi#phYP1Ct+w{7yRsJ1Q%+gd&N5^-s{jPC3( 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�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 literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Editor/HomePage/icon_bg.png.import b/addons/dialogic-main/addons/dialogic/Editor/HomePage/icon_bg.png.import new file mode 100644 index 0000000..f889fd4 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/HomePage/icon_bg.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cvmlp5nxb2rer" +path="res://.godot/imported/icon_bg.png-525c114c802923e6aaaf9e666048cfd0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/HomePage/icon_bg.png" +dest_files=["res://.godot/imported/icon_bg.png-525c114c802923e6aaaf9e666048cfd0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/dialogic-main/addons/dialogic/Editor/HomePage/tips.txt b/addons/dialogic-main/addons/dialogic/Editor/HomePage/tips.txt new file mode 100644 index 0000000..4ca5ec7 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/HomePage/tips.txt @@ -0,0 +1,11 @@ +Dialogic variables can be changed from timelines [b]and[/b] scripts! They can be used in conditions and inside of texts!; editor://VariablesEditor +You can create [b]custom modules[/b] for dialogic, including events, subsystems, text effects, ui layouts and even editors!; editor://Settings->General +If there are events you never need, you can hide them from the list in the editor!; editor://Settings->Modules +Did you know that dialogic supports translations? It does!; editor://Settings->Translations +You can use [b]bbcode effects[/b] in text events! What are they though???; https://docs.godotengine.org/en/latest/tutorials/ui/bbcode_in_richtextlabel.html +Writing [/i]<Oh hi/Hello you/Well, well>[i] in a text event will pick a random one of the three strings! +There are a number of cool text effects like [pause=x], [speed=x] and [portrait=x]. Try them out!; +You can use scenes as portraits! This gives you basically limitless freedom.; https://dialogic-docs.coppolaemilio.com/custom-portraits.html +You can use scenes as backgrounds. This way they can be animated or whatever you want! +Dialogic has a built in save and load system! It's pretty powerful!; editor://Settings->Saving +You can add multiple glossary files, each containing words that can be hovered for information!; editor://GlossaryEditor diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/default.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/default.svg new file mode 100644 index 0000000..1437dbc --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/default.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<circle cx="8" cy="8" r="3" fill="#2F80ED"/> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/default.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/default.svg.import new file mode 100644 index 0000000..9830711 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/default.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bsx8dtqf3vych" +path="res://.godot/imported/default.svg-b959bd18b8ef5203f5e20ad593e3fe5b.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/default.svg" +dest_files=["res://.godot/imported/default.svg-b959bd18b8ef5203f5e20ad593e3fe5b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/divide.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/divide.svg new file mode 100644 index 0000000..7fb881f --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/divide.svg @@ -0,0 +1,10 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_3666_572)"> +<path d="M11.1812 7.46591V8.57955H4.81756V7.46591H11.1812ZM7.99938 11.483C7.7508 11.483 7.53868 11.3968 7.36301 11.2244C7.19067 11.0488 7.10449 10.8366 7.10449 10.5881C7.10449 10.3494 7.19067 10.1439 7.36301 9.97159C7.53868 9.79924 7.7508 9.71307 7.99938 9.71307C8.23802 9.71307 8.44351 9.79924 8.61586 9.97159C8.7882 10.1439 8.87438 10.3494 8.87438 10.5881C8.87438 10.8366 8.7882 11.0488 8.61586 11.2244C8.44351 11.3968 8.23802 11.483 7.99938 11.483ZM7.99938 6.33239C7.83366 6.33239 7.68285 6.29261 7.54696 6.21307C7.41107 6.13352 7.30336 6.0258 7.22381 5.88991C7.14427 5.75402 7.10449 5.60322 7.10449 5.4375C7.10449 5.19886 7.19067 4.99337 7.36301 4.82102C7.53868 4.64867 7.7508 4.5625 7.99938 4.5625C8.23802 4.5625 8.44351 4.64867 8.61586 4.82102C8.7882 4.99337 8.87438 5.19886 8.87438 5.4375C8.87438 5.68608 8.7882 5.8982 8.61586 6.07386C8.44351 6.24621 8.23802 6.33239 7.99938 6.33239Z" fill="#2F80ED"/> +</g> +<defs> +<clipPath id="clip0_3666_572"> +<rect width="16" height="16" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/divide.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/divide.svg.import new file mode 100644 index 0000000..47002fa --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/divide.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c5laykjsxaxtl" +path="res://.godot/imported/divide.svg-56c06e734a3b787e6a0fb15506118077.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/divide.svg" +dest_files=["res://.godot/imported/divide.svg-56c06e734a3b787e6a0fb15506118077.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/join.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/join.svg new file mode 100644 index 0000000..9eb7aa9 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/join.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M4 7V9H7.5V12L11.5 8L7.5 4V7H4Z" fill="#A5EFAC"/> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/join.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/join.svg.import new file mode 100644 index 0000000..c7ccc1c --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/join.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b7j220k0ewh35" +path="res://.godot/imported/join.svg-bb063f8363952d3561f81b2b567bc648.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/join.svg" +dest_files=["res://.godot/imported/join.svg-bb063f8363952d3561f81b2b567bc648.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/leave.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/leave.svg new file mode 100644 index 0000000..e234619 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/leave.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M11.5 9L11.5 7L8 7L8 4L4 8L8 12L8 9L11.5 9Z" fill="#D14A4A"/> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/leave.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/leave.svg.import new file mode 100644 index 0000000..ba9d555 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/leave.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cspjyvye6c0r6" +path="res://.godot/imported/leave.svg-44bd121015b4b5f035aed68ea6514ddc.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/leave.svg" +dest_files=["res://.godot/imported/leave.svg-44bd121015b4b5f035aed68ea6514ddc.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/minus.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/minus.svg new file mode 100644 index 0000000..eb5d732 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/minus.svg @@ -0,0 +1,10 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_3666_568)"> +<path d="M10.2291 7.08807V8.18182H5.77459V7.08807H10.2291Z" fill="#2F80ED"/> +</g> +<defs> +<clipPath id="clip0_3666_568"> +<rect width="16" height="16" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/minus.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/minus.svg.import new file mode 100644 index 0000000..19cc8d7 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/minus.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dwy14qrkfoeb" +path="res://.godot/imported/minus.svg-49dcbf6b69afb013b09bee12c2eaee4d.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/minus.svg" +dest_files=["res://.godot/imported/minus.svg-49dcbf6b69afb013b09bee12c2eaee4d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/multiply.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/multiply.svg new file mode 100644 index 0000000..d4327d1 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/multiply.svg @@ -0,0 +1,10 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_3666_570)"> +<path d="M10.4255 11.2045L4.81756 5.59659L5.57324 4.84091L11.1812 10.4489L10.4255 11.2045ZM5.57324 11.2045L4.81756 10.4489L10.4255 4.84091L11.1812 5.59659L5.57324 11.2045Z" fill="#2F80ED"/> +</g> +<defs> +<clipPath id="clip0_3666_570"> +<rect width="16" height="16" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/multiply.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/multiply.svg.import new file mode 100644 index 0000000..59b5a03 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/multiply.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ddmapfkunbtg7" +path="res://.godot/imported/multiply.svg-a440aeabe0711499afab2578a605a0c8.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/multiply.svg" +dest_files=["res://.godot/imported/multiply.svg-a440aeabe0711499afab2578a605a0c8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/plus.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/plus.svg new file mode 100644 index 0000000..adf5179 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/plus.svg @@ -0,0 +1,10 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_3666_566)"> +<path d="M7.44256 11.304V4.74148H8.5562V11.304H7.44256ZM4.71813 8.57955V7.46591H11.2806V8.57955H4.71813Z" fill="#2F80ED"/> +</g> +<defs> +<clipPath id="clip0_3666_566"> +<rect width="16" height="16" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/plus.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/plus.svg.import new file mode 100644 index 0000000..a01bf29 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/plus.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cqqtygfbvgtag" +path="res://.godot/imported/plus.svg-c478250e8c267e7f27d3efadae418395.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/plus.svg" +dest_files=["res://.godot/imported/plus.svg-c478250e8c267e7f27d3efadae418395.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/set.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/set.svg new file mode 100644 index 0000000..16c6a8b --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/set.svg @@ -0,0 +1,10 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_3666_561)"> +<path d="M4.93688 7.08807V6.0142H11.0619V7.08807H4.93688ZM4.93688 10.0312V8.95739H11.0619V10.0312H4.93688Z" fill="#2F80ED"/> +</g> +<defs> +<clipPath id="clip0_3666_561"> +<rect width="16" height="16" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/set.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/set.svg.import new file mode 100644 index 0000000..5bb4bed --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/set.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ddcfl67v0r1lw" +path="res://.godot/imported/set.svg-503d5cdf15df79c2138350d7df04097b.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/set.svg" +dest_files=["res://.godot/imported/set.svg-503d5cdf15df79c2138350d7df04097b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/update.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/update.svg new file mode 100644 index 0000000..44f1f3c --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/update.svg @@ -0,0 +1,5 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M3.45082 5.30639L4.73587 5.26497L4.79109 6.97825L6.50437 6.92302L6.54579 8.20807L3.54747 8.30471L3.45082 5.30639Z" fill="#2F80ED"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M13.3458 12H12.0601L12.0601 10.2858H10.3459L10.3459 9.00012L13.3458 9.00012L13.3458 12Z" fill="#2F80ED"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M8.35461 11.7143C9.76618 11.7143 10.9724 10.8651 11.4559 9.66667H12.8546C12.3227 11.5864 10.5095 13 8.35461 13C6.1997 13 4.38656 11.5864 3.85461 9.66667H5.25336C5.73678 10.8651 6.94305 11.7143 8.35461 11.7143ZM5.41117 7C5.96903 5.98047 7.07784 5.28571 8.35461 5.28571C9.63139 5.28571 10.7402 5.98047 11.2981 7H12.7476C12.1082 5.25221 10.3828 4 8.35461 4C6.32646 4 4.60105 5.25221 3.96159 7H5.41117Z" fill="#2F80ED"/> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/update.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/update.svg.import new file mode 100644 index 0000000..4faef9c --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/update.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://t1roknwygcf3" +path="res://.godot/imported/update.svg-fa0c73766cd3030063319f62c5965e30.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Dropdown/update.svg" +dest_files=["res://.godot/imported/update.svg-fa0c73766cd3030063319f62c5965e30.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/decrement_icon.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/decrement_icon.svg new file mode 100644 index 0000000..eb97691 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/decrement_icon.svg @@ -0,0 +1 @@ +<svg width="14" height="6" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="m8.046 5.406 4.91-5.134C13.063.16 12.954 0 12.838 0h-2.432L7.303 3.244c-.173.181-.402.189-.582 0L3.618 0H1.166c-.159 0-.208.19-.13.272l4.942 5.134c.54.56 1.538.554 2.068 0z" fill="#e0e0e0" style="fill:#fff;fill-opacity:1;stroke-width:1.05736"/></svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/decrement_icon.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/decrement_icon.svg.import new file mode 100644 index 0000000..b8a4665 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/decrement_icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://brjikovneb63n" +path="res://.godot/imported/decrement_icon.svg-a2593e736b97b85048722ba5d6e9ccb2.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/decrement_icon.svg" +dest_files=["res://.godot/imported/decrement_icon.svg-a2593e736b97b85048722ba5d6e9ccb2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/increment_icon.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/increment_icon.svg new file mode 100644 index 0000000..0b72c07 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/increment_icon.svg @@ -0,0 +1 @@ +<svg width="14" height="6" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="m5.954.418-4.91 5.135c-.107.112.002.271.118.271h2.432l3.103-3.243c.173-.182.402-.19.582 0l3.103 3.243h2.452c.159 0 .208-.19.13-.271L8.021.418c-.54-.56-1.538-.554-2.068 0z" fill="#e0e0e0" style="fill:#fff;fill-opacity:1;stroke-width:1.05736"/></svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/increment_icon.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/increment_icon.svg.import new file mode 100644 index 0000000..db6ee21 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/increment_icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dh1ycbmw8anqh" +path="res://.godot/imported/increment_icon.svg-9e5be0fb4753d7b00fd5c17fde994914.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Interactable/increment_icon.svg" +dest_files=["res://.godot/imported/increment_icon.svg-9e5be0fb4753d7b00fd5c17fde994914.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/add-folder.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/add-folder.svg new file mode 100644 index 0000000..7331b61 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/add-folder.svg @@ -0,0 +1,4 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M13 10H16V12H13V15H11V12H8V10H11V7H13V10Z" fill="#A5EFAC"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M1.29289 2.29289C1.48043 2.10536 1.73478 2 2 2H8C8.26522 2 8.51957 2.10536 8.70711 2.29289C8.89464 2.48043 9 2.73478 9 3V4C9 4.26522 9.10536 4.51957 9.29289 4.70711C9.48043 4.89464 9.73478 5 10 5H14C14.2652 5 14.5196 5.10536 14.7071 5.29289C14.8946 5.48043 15 5.73478 15 6V9H14V6H10V9H7V9.5V13H10V14H2C1.73478 14 1.48043 13.8946 1.29289 13.7071C1.10536 13.5196 1 13.2652 1 13V11V5V3C1 2.73478 1.10536 2.48043 1.29289 2.29289ZM14 14C14.2652 14 14.5196 13.8946 14.7071 13.7071C14.8946 13.5196 15 13.2652 15 13H14V14Z" fill="#E0E0E0"/> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/add-folder.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/add-folder.svg.import new file mode 100644 index 0000000..9c8fcda --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/add-folder.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://babwe22dqjta" +path="res://.godot/imported/add-folder.svg-c35b3552332c1a7a422b065715ba5bd0.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/add-folder.svg" +dest_files=["res://.godot/imported/add-folder.svg-c35b3552332c1a7a422b065715ba5bd0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/close-icon.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/close-icon.svg new file mode 100644 index 0000000..3e3f7af --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/close-icon.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"><path d="m14 17-6-6 6-6" fill="none" stroke="#fff" stroke-width="2"/></svg> \ No newline at end of file diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/close-icon.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/close-icon.svg.import new file mode 100644 index 0000000..3b6b962 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/close-icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bff65e82555qr" +path="res://.godot/imported/close-icon.svg-b1d1f631dda99063f4967053094e19e9.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/close-icon.svg" +dest_files=["res://.godot/imported/close-icon.svg-b1d1f631dda99063f4967053094e19e9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/closed-icon.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/closed-icon.svg new file mode 100644 index 0000000..4032eab --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/closed-icon.svg @@ -0,0 +1,3 @@ +<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M8 5L14 11L8 17" stroke="white" stroke-width="2"/> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/closed-icon.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/closed-icon.svg.import new file mode 100644 index 0000000..52e3ecf --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/closed-icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dx3o2ild56i76" +path="res://.godot/imported/closed-icon.svg-f1be10bfef346e366b060b9397fc99b3.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/closed-icon.svg" +dest_files=["res://.godot/imported/closed-icon.svg-f1be10bfef346e366b060b9397fc99b3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/expand-icon.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/expand-icon.svg new file mode 100644 index 0000000..3ec3def --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/expand-icon.svg @@ -0,0 +1,5 @@ +<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> +<circle cx="10.5" cy="3.5" r="1.5" fill="white"/> +<circle cx="10.5" cy="11" r="1.5" fill="white"/> +<circle cx="10.5" cy="18.5" r="1.5" fill="white"/> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/expand-icon.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/expand-icon.svg.import new file mode 100644 index 0000000..976e1e3 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/expand-icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cl03vrbj5wsjk" +path="res://.godot/imported/expand-icon.svg-8b525f094b41df5f412260b6a8ccc628.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/expand-icon.svg" +dest_files=["res://.godot/imported/expand-icon.svg-8b525f094b41df5f412260b6a8ccc628.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/open-icon.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/open-icon.svg new file mode 100644 index 0000000..c66c422 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/open-icon.svg @@ -0,0 +1,3 @@ +<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M17 8L11 14L5 8" stroke="white" stroke-width="2"/> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/open-icon.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/open-icon.svg.import new file mode 100644 index 0000000..1c0d8e4 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/open-icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://mc7a24bcvjo3" +path="res://.godot/imported/open-icon.svg-08dd4dde8f810f287bf41bb688e33b60.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/open-icon.svg" +dest_files=["res://.godot/imported/open-icon.svg-08dd4dde8f810f287bf41bb688e33b60.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable.svg new file mode 100644 index 0000000..236ca35 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M13.9645 2.62927L12.8459 5.22444C12.6271 5.04546 12.3835 4.89134 12.1151 4.76208C11.8565 4.62287 11.5881 4.55327 11.3097 4.55327C11.0909 4.55327 10.8821 4.59802 10.6832 4.68751C10.4943 4.77699 10.3203 4.89631 10.1612 5.04546C10.0021 5.19461 9.86293 5.36364 9.74361 5.55256C9.6243 5.73154 9.52486 5.91052 9.44532 6.08949L9.14702 6.93964C9.35583 7.37714 9.55966 7.79475 9.75853 8.19248C9.92756 8.53055 10.1016 8.87359 10.2805 9.2216C10.4595 9.55966 10.6087 9.82813 10.728 10.027C10.9169 10.3153 11.1058 10.6136 11.2948 10.9219C11.4837 11.2202 11.6925 11.4936 11.9212 11.7422C12.0206 11.8516 12.1399 11.9261 12.2791 11.9659C12.4283 11.9957 12.5625 12.0107 12.6818 12.0107C12.8707 12.0107 13.0497 11.9858 13.2188 11.9361C13.3878 11.8864 13.5469 11.8217 13.696 11.7422L14.0689 12.2195C13.9297 12.4382 13.7607 12.657 13.5618 12.8757C13.3629 13.0945 13.1442 13.2933 12.9055 13.4723C12.6769 13.6513 12.4283 13.7955 12.1598 13.9048C11.9013 14.0242 11.6378 14.0838 11.3693 14.0838C11.1307 14.0838 10.9169 14.044 10.728 13.9645C10.549 13.8949 10.3849 13.8004 10.2358 13.6811C10.0867 13.5519 9.94745 13.4027 9.81819 13.2337C9.68893 13.0646 9.55469 12.8906 9.41549 12.7117C9.30611 12.5426 9.1868 12.3388 9.05753 12.1001C8.93822 11.8516 8.81393 11.598 8.68466 11.3395C8.5554 11.081 8.42614 10.8324 8.29688 10.5938C8.16762 10.3452 8.04333 10.1364 7.92401 9.96734C7.8743 10.1364 7.82955 10.3054 7.78978 10.4744C7.75001 10.6136 7.70526 10.7578 7.65555 10.907C7.60583 11.0561 7.56109 11.1705 7.52131 11.25C7.37216 11.5682 7.18324 11.8963 6.95455 12.2344C6.72586 12.5724 6.46236 12.8807 6.16407 13.1591C5.87572 13.4276 5.55753 13.6513 5.20952 13.8303C4.86151 13.9993 4.49361 14.0838 4.10583 14.0838C3.75782 14.0838 3.41975 14.0142 3.09162 13.875C2.7635 13.7457 2.46023 13.5717 2.18182 13.353L3.12145 10.8771C3.43964 11.076 3.78765 11.255 4.16549 11.4141C4.54333 11.5632 4.92117 11.6378 5.29901 11.6378C5.41833 11.6378 5.54262 11.6278 5.67188 11.608C5.80114 11.5781 5.92543 11.5384 6.04475 11.4886C6.17401 11.429 6.28836 11.3594 6.38779 11.2798C6.48722 11.1903 6.5618 11.0859 6.61151 10.9666C6.68111 10.8374 6.75569 10.6683 6.83523 10.4595C6.91478 10.2507 6.99432 10.0419 7.07387 9.8331C7.16336 9.59447 7.25285 9.34091 7.34234 9.07245L4.53836 4.5831C4.4091 4.43395 4.25001 4.31464 4.06109 4.22515C3.88211 4.12572 3.69319 4.076 3.49432 4.076C3.32529 4.076 3.1662 4.1108 3.01705 4.1804C2.8679 4.24006 2.72373 4.32458 2.58452 4.43395L2.18182 3.91194C2.32103 3.70313 2.48509 3.4993 2.67401 3.30043C2.87287 3.09162 3.08665 2.90768 3.31535 2.74859C3.54404 2.57955 3.78765 2.44532 4.04617 2.34589C4.30469 2.23651 4.56819 2.18182 4.83665 2.18182C5.16478 2.18182 5.46805 2.26634 5.74645 2.43537C6.02486 2.59447 6.28339 2.79333 6.52202 3.03197C6.76066 3.2706 6.97941 3.52912 7.17827 3.80753C7.37714 4.08594 7.55611 4.34447 7.7152 4.5831C7.79475 4.69248 7.87927 4.83168 7.96876 5.00072C8.06819 5.15981 8.16265 5.3189 8.25214 5.47799C8.36151 5.65697 8.46591 5.85086 8.56535 6.05966C8.66478 5.82103 8.76918 5.58239 8.87856 5.34376C8.96805 5.14489 9.05753 4.94106 9.14702 4.73225C9.24645 4.5135 9.33594 4.32458 9.41549 4.16549C9.56464 3.88708 9.73367 3.62856 9.92259 3.38992C10.1115 3.15128 10.3203 2.94248 10.549 2.7635C10.7876 2.58452 11.0462 2.44532 11.3246 2.34589C11.603 2.23651 11.9063 2.18182 12.2344 2.18182C12.5426 2.18182 12.8409 2.2216 13.1293 2.30114C13.4176 2.38069 13.696 2.49006 13.9645 2.62927Z" fill="white"/> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable.svg.import new file mode 100644 index 0000000..c2f19e4 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dih1coellhwm8" +path="res://.godot/imported/variable.svg-042a5ec751904f8b15060524e354ede4.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable.svg" +dest_files=["res://.godot/imported/variable.svg-042a5ec751904f8b15060524e354ede4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable_icon.png b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..779e80f04b53c193feea0e0782266087d9bd1e5f GIT binary patch literal 639 zcmV-_0)YLAP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00009a7bBm000&x z000&x0ZCFM@Bjb+0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH0u)I^K~#7F?b(5G zf-n>Y;O7P%A>F_c=mw7926Y43KsV409Dxz)25|%2;BRsXB~b7MwFTn)?sC0?yh}oO z34urmA%qY@2qA<J;z0m1Qwmc`IA5l$=?><)H&eEzXw+=H)4ehOjH!_F4ew(stp>#V z3_7vTo~FQ5WEoLe_&fO)5pRn)ipB<a=VKaQDVTWcXT<q8aL?pWyPjCKGj(K)6-@!$ z9V_6HpF*7kIax=nBjRY9I#bC#*9Zjpz;|A#^f7D)Z_peWYnnQ^DU8bvdGP!2?jO;S zEK!d(MRVZq97p-zYX3i%B-vSHQo!ef0?o{?C?$xSCad!YN|9+;jyOw75nMvlOyf&R z8Ql7SGp__U6!^74PALPwHYi_V6mV;UoKlC|YlD{<1zbYRDP@Rz=U0>}#O)!RC`EAF zXFo%o>4c0@gXU|mofdDc4K(JG5KTo_+;fZOmRI4AachGe%|XzxLsv)mhMt0kt%Gx; zJqinY0$;)QM#kBciz!!A>@d#!U+c11EZ&3b?QtEPZ?kbe%r%$RHDr!mX>5q!%&e%6 z7~Ck(egqv*e|Z}J@xbrROitbtCuR?^ZTt-s#DB=Jj!dkWJ;aK}6lMs-e;7GN#^YX@ ztuv;wQiK};nyK(+V9Z;cYCC9JYXi7EQ0>`Qw6Cn9JNS52N0dHxMnVW7gb+dqA%qYQ Z`UX0hjmKjP#Bcxr002ovPDHLkV1lEG4<`Ts literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable_icon.png.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable_icon.png.import new file mode 100644 index 0000000..a6eda4f --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable_icon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ikdhcat2nq2r" +path="res://.godot/imported/variable_icon.png-90854a14028305f3300bfd6765cc7898.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/variable_icon.png" +dest_files=["res://.godot/imported/variable_icon.png-90854a14028305f3300bfd6765cc7898.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/warning.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/warning.svg new file mode 100644 index 0000000..a252bde --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/warning.svg @@ -0,0 +1,3 @@ +<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M12.366 4.5C11.9811 3.83333 11.0189 3.83333 10.634 4.5L3.27276 17.25C2.88786 17.9167 3.36898 18.75 4.13878 18.75H18.8612C19.631 18.75 20.1121 17.9167 19.7272 17.25L12.366 4.5ZM10.6668 14.3809H12.073L12.2723 8.46875H10.4676L10.6668 14.3809ZM12.0555 15.5586C11.8836 15.3906 11.6551 15.3066 11.3699 15.3066C11.0887 15.3066 10.8602 15.3926 10.6844 15.5645C10.5125 15.7324 10.4266 15.9453 10.4266 16.2031C10.4266 16.4609 10.5125 16.6738 10.6844 16.8418C10.8602 17.0098 11.0887 17.0937 11.3699 17.0937C11.6551 17.0937 11.8836 17.0098 12.0555 16.8418C12.2312 16.6738 12.3191 16.4609 12.3191 16.2031C12.3191 15.9414 12.2312 15.7266 12.0555 15.5586Z" fill="#FCFF73"/> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/warning.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/warning.svg.import new file mode 100644 index 0000000..e0a4f64 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/warning.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d4n3j4lvatwxb" +path="res://.godot/imported/warning.svg-836a90b63e6b4d95b35d0dba1b7a8387.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Pieces/warning.svg" +dest_files=["res://.godot/imported/warning.svg-836a90b63e6b4d95b35d0dba1b7a8387.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/character.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/character.svg new file mode 100644 index 0000000..8871f5e --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/character.svg @@ -0,0 +1,4 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M11.6364 4.36363C11.6364 6.37194 10.0083 7.99999 8 7.99999C5.99169 7.99999 4.36363 6.37194 4.36363 4.36363C4.36363 2.35532 5.99169 0.727264 8 0.727264C10.0083 0.727264 11.6364 2.35532 11.6364 4.36363Z" fill="white"/> +<path d="M12.3636 13.3904C12.3636 15.2727 10.41 15.2727 8 15.2727C5.59003 15.2727 3.63636 15.2727 3.63636 13.3904C3.63636 10.0117 5.59003 7.27272 8 7.27272C10.41 7.27272 12.3636 10.0117 12.3636 13.3904Z" fill="white"/> +</svg> diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/character.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/character.svg.import new file mode 100644 index 0000000..fe213ba --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/character.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bbea0efx0ybu7" +path="res://.godot/imported/character.svg-bd04c5f56d5a275e0a21a39806dde9fd.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Resources/character.svg" +dest_files=["res://.godot/imported/character.svg-bd04c5f56d5a275e0a21a39806dde9fd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/icon_character.png b/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/icon_character.png new file mode 100644 index 0000000000000000000000000000000000000000..5858854742aa5e2f19debcb1c6310581a24ded7f GIT binary patch literal 569 zcmV-90>=G`P)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00009a7bBm000&x z000&x0ZCFM@Bjb+0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH0nSN8K~#7F?b+dN z!Y~j8;Fm4{BY1;$gJy%W0c=o4U<0}V-2gfPbb_*hVFKC-u1;e_g;13y@2nW^ldSwe z0{h`4XB#la7-NhvMwN&RLz{-S49&~QA+&Y;%;6e^fj!58HnF&xAmYEimjCmiJs@Xs z@Lt+GWF122{Ht{5CCA$#bb2B@OXNnnP5nzsD7gb!?5qRV2ukPyK&P`$P@)mQJ@{Oh zSwkq$2tdot2cSYDfG;R0ied)^8Ubv<r}3RXGy>Rw?;Sajb_<}tIOL=%hJ<H<9LX&& zhAL7ohd-pfL$-rIiXpU_2|oM5|0ebF*f$*fOq9yrOHx&W12ivX$51MJlZ&^&LfV-k zcVQ4)=_cP0Lg(kgQ6e|O-4pbZ@S)gQ=&Td|p5Pq05Z=^3S3&{xH7IrQqP2lJh5~jS zP=dcBd^8e;X8}6^m47L!20sBAEr2-vOX#9+k27aLii1r0Z!iNWp|2{fsUa`}&^Qpe zq_+X2s@5Ecm;pGXK@B>`8885m9gTr!hcxyeVg~SrG&blX(OCwcdqJPY5LUuhoe|8S zpnw87EsGyfza3n>HhEL*;<Y*v-pA`I9FKp(7-Nhv#u%D!yG$Z$N_vVx00000NkvXX Hu0mjf8hqyp literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/icon_character.png.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/icon_character.png.import new file mode 100644 index 0000000..1570b1e --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/icon_character.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bmwrsq48ywc50" +path="res://.godot/imported/icon_character.png-c43d5e675349285f569332f852145f72.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Resources/icon_character.png" +dest_files=["res://.godot/imported/icon_character.png-c43d5e675349285f569332f852145f72.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/portrait.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/portrait.svg new file mode 100644 index 0000000..006807a --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/portrait.svg @@ -0,0 +1,9 @@ +<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" version="1.1"> + <g> + <title>Layer 1 + + + + + + \ No newline at end of file diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/portrait.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/portrait.svg.import new file mode 100644 index 0000000..ac17fff --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Resources/portrait.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dfi7fhfc4dbc3" +path="res://.godot/imported/portrait.svg-39b81dae0192e108147b023ff326faca.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Resources/portrait.svg" +dest_files=["res://.godot/imported/portrait.svg-39b81dae0192e108147b023ff326faca.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-character.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-character.svg new file mode 100644 index 0000000..9a42063 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-character.svg @@ -0,0 +1,4 @@ + + + + diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-character.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-character.svg.import new file mode 100644 index 0000000..1bac6ef --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-character.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://my600mb32ydt" +path="res://.godot/imported/add-character.svg-aa244fe75dc8dd70ac6589132e53fed3.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-character.svg" +dest_files=["res://.godot/imported/add-character.svg-aa244fe75dc8dd70ac6589132e53fed3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-timeline.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-timeline.svg new file mode 100644 index 0000000..5fa7ac1 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-timeline.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-timeline.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-timeline.svg.import new file mode 100644 index 0000000..9c80165 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-timeline.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bymlbr4o2m3jc" +path="res://.godot/imported/add-timeline.svg-5e560147b6f2a7484900915c0ef508c0.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Toolbar/add-timeline.svg" +dest_files=["res://.godot/imported/add-timeline.svg-5e560147b6f2a7484900915c0ef508c0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Unknown.png b/addons/dialogic-main/addons/dialogic/Editor/Images/Unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..87ab9137a7d2ab521b1004222cb7070decd02141 GIT binary patch literal 3331 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 N002ovPDHLkV1mh%7zY3V literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/Unknown.png.import b/addons/dialogic-main/addons/dialogic/Editor/Images/Unknown.png.import new file mode 100644 index 0000000..ca47e11 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/Unknown.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bbf2dlmbn12h0" +path="res://.godot/imported/Unknown.png-2c9eda788de8704e5c996a9ce2471354.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/Unknown.png" +dest_files=["res://.godot/imported/Unknown.png-2c9eda788de8704e5c996a9ce2471354.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/dialogic-logo.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/dialogic-logo.svg new file mode 100644 index 0000000..d6e5b69 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/dialogic-logo.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/dialogic-logo.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/dialogic-logo.svg.import new file mode 100644 index 0000000..7fcffab --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/dialogic-logo.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bt87p6qlso0ya" +path="res://.godot/imported/dialogic-logo.svg-08293ede49a57b02da2b28ef9cba822f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/dialogic-logo.svg" +dest_files=["res://.godot/imported/dialogic-logo.svg-08293ede49a57b02da2b28ef9cba822f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/plugin-icon.svg b/addons/dialogic-main/addons/dialogic/Editor/Images/plugin-icon.svg new file mode 100644 index 0000000..6f542b6 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/plugin-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/plugin-icon.svg.import b/addons/dialogic-main/addons/dialogic/Editor/Images/plugin-icon.svg.import new file mode 100644 index 0000000..b1062a1 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/plugin-icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dybg3l5pwetne" +path="res://.godot/imported/plugin-icon.svg-dc602692e84007d364f87d7626a4b242.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/plugin-icon.svg" +dest_files=["res://.godot/imported/plugin-icon.svg-dc602692e84007d364f87d7626a4b242.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/preview_character.png b/addons/dialogic-main/addons/dialogic/Editor/Images/preview_character.png new file mode 100644 index 0000000000000000000000000000000000000000..0ef6e853644a7d2bb7a1bf98e487c5f15847c3f6 GIT binary patch literal 63720 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๝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 literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/preview_character.png.import b/addons/dialogic-main/addons/dialogic/Editor/Images/preview_character.png.import new file mode 100644 index 0000000..e71b892 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/preview_character.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://41634vnjwsfw" +path="res://.godot/imported/preview_character.png-6f92c4d4d93077deceb050d601d521bd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/preview_character.png" +dest_files=["res://.godot/imported/preview_character.png-6f92c4d4d93077deceb050d601d521bd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/preview_character_speaker.png b/addons/dialogic-main/addons/dialogic/Editor/Images/preview_character_speaker.png new file mode 100644 index 0000000000000000000000000000000000000000..1e1562663021c908e055e76ae398a52d9c051b32 GIT binary patch literal 40709 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 n)H4^ml#% literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Images/preview_character_speaker.png.import b/addons/dialogic-main/addons/dialogic/Editor/Images/preview_character_speaker.png.import new file mode 100644 index 0000000..31fcf25 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Images/preview_character_speaker.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dp7np6b4ipm0a" +path="res://.godot/imported/preview_character_speaker.png-9883312ac7b7f924cb3c3b774b455706.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Editor/Images/preview_character_speaker.png" +dest_files=["res://.godot/imported/preview_character_speaker.png-9883312ac7b7f924cb3c3b774b455706.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Inspector/inspector_plugin.gd b/addons/dialogic-main/addons/dialogic/Editor/Inspector/inspector_plugin.gd new file mode 100644 index 0000000..0a40bc3 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Inspector/inspector_plugin.gd @@ -0,0 +1,15 @@ +@tool +extends EditorInspectorPlugin + + +func _can_handle(object: Object) -> bool: + return true + + +func _parse_property(object: Object, type: Variant.Type, name: String, hint_type: PropertyHint, hint_string: String, usage_flags: int, wide: bool) -> bool: + if type == TYPE_OBJECT and hint_type == PROPERTY_HINT_RESOURCE_TYPE: + if hint_string == "DialogicTimeline": + var editor: EditorProperty = load("res://addons/dialogic/Editor/Inspector/timeline_inspector_field.gd").new() + add_property_editor(name, editor) + return true + return false diff --git a/addons/dialogic-main/addons/dialogic/Editor/Inspector/timeline_inspector_field.gd b/addons/dialogic-main/addons/dialogic/Editor/Inspector/timeline_inspector_field.gd new file mode 100644 index 0000000..6e617fe --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Inspector/timeline_inspector_field.gd @@ -0,0 +1,82 @@ +@tool +extends EditorProperty + +var field: Control = null +var button: Button = null +# An internal value of the property. +var current_value: DialogicTimeline = null +# A guard against internal changes when the property is updated. +var updating = false + + +func _init() -> void: + var hbox := HBoxContainer.new() + add_child(hbox) + + field = load("res://addons/dialogic/Editor/Events/Fields/field_options_dynamic.tscn").instantiate() + hbox.add_child(field) + field.placeholder_text = "No Timeline" + field.size_flags_horizontal = Control.SIZE_EXPAND_FILL + field.size_flags_vertical = Control.SIZE_SHRINK_CENTER + field.mode = field.Modes.IDENTIFIER + field.fit_text_length = false + field.valid_file_drop_extension = ".dtl" + field.value_changed.connect(_on_field_value_changed) + field.get_suggestions_func = get_timeline_suggestions + + button = Button.new() + hbox.add_child(button) + button.hide() + button.pressed.connect(_on_button_pressed, CONNECT_DEFERRED) + + +func _on_field_value_changed(property:String, value:Variant) -> void: + # Ignore the signal if the property is currently being updated. + if updating: + return + + var new_value: DialogicTimeline = null + if value: + new_value = DialogicResourceUtil.get_timeline_resource(value) + + if current_value != new_value: + current_value = new_value + if current_value: + button.show() + else: + button.hide() + emit_changed(get_edited_property(), current_value) + + +func _update_property() -> void: + field.resource_icon = get_theme_icon("TripleBar", "EditorIcons") + button.icon = get_theme_icon("ExternalLink", "EditorIcons") + + # Read the current value from the property. + var new_value = get_edited_object()[get_edited_property()] + if (new_value == current_value): + return + + # Update the control with the new value. + updating = true + current_value = new_value + if current_value: + field.set_value(DialogicResourceUtil.get_unique_identifier(current_value.resource_path)) + button.show() + else: + button.hide() + field.set_value("") + updating = false + + +func get_timeline_suggestions(filter:String) -> Dictionary: + var suggestions := {} + var timeline_directory := DialogicResourceUtil.get_timeline_directory() + for identifier in timeline_directory.keys(): + suggestions[identifier] = {'value': identifier, 'tooltip':timeline_directory[identifier], 'editor_icon': ["TripleBar", "EditorIcons"]} + return suggestions + + +func _on_button_pressed() -> void: + if current_value: + EditorInterface.edit_resource(current_value) diff --git a/addons/dialogic-main/addons/dialogic/Editor/Settings/HintLabelStylingScript.gd b/addons/dialogic-main/addons/dialogic/Editor/Settings/HintLabelStylingScript.gd new file mode 100644 index 0000000..f5f11e3 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Settings/HintLabelStylingScript.gd @@ -0,0 +1,13 @@ +@tool +extends Label + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + # don't load the label settings when opening as a scene + # prevents HUGE diffs + if owner.get_parent() is SubViewport: + return + label_settings = LabelSettings.new() + label_settings.font = get_theme_font("doc_italic", "EditorFonts") + label_settings.font_size = get_theme_font_size('font_size', 'Label') + label_settings.font_color = get_theme_color("accent_color", "Editor") diff --git a/addons/dialogic-main/addons/dialogic/Editor/Settings/csv_file.gd b/addons/dialogic-main/addons/dialogic/Editor/Settings/csv_file.gd new file mode 100644 index 0000000..3f8fb3a --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Settings/csv_file.gd @@ -0,0 +1,356 @@ +class_name DialogicCsvFile +extends RefCounted +## Handles translation of a [class DialogicTimeline] to a CSV file. + +var lines: Array[PackedStringArray] = [] +## Dictionary of lines from the original file. +## Key: String, Value: PackedStringArray +var old_lines: Dictionary = {} + +## The amount of columns the CSV file has after loading it. +## Used to add trailing commas to new lines. +var column_count := 0 + +## Whether this CSV file was able to be loaded a defined +## file path. +var is_new_file: bool = false + +## The underlying file used to read and write the CSV file. +var file: FileAccess + +## File path used to load the CSV file. +var used_file_path: String + +## The amount of events that were updated in the CSV file. +var updated_rows: int = 0 + +## The amount of events that were added to the CSV file. +var new_rows: int = 0 + +## Whether this CSV handler should add newlines as a separator between sections. +## A section may be a new character, new timeline, or new glossary item inside +## a per-project file. +var add_separator: bool = false + +enum PropertyType { + String = 0, + Array = 1, + Other = 2, +} + +## The translation property used for the glossary item translation. +const TRANSLATION_ID := DialogicGlossary.TRANSLATION_PROPERTY + +## Attempts to load the CSV file from [param file_path]. +## If the file does not exist, a single entry is added to the [member lines] +## array. +## The [param separator_enabled] enables adding newlines as a separator to +## per-project files. This is useful for readability. +func _init(file_path: String, original_locale: String, separator_enabled: bool) -> void: + used_file_path = file_path + add_separator = separator_enabled + + # The first entry must be the locale row. + # [method collect_lines_from_timeline] will add the other locales, if any. + var locale_array_line := PackedStringArray(["keys", original_locale]) + lines.append(locale_array_line) + + if not ResourceLoader.exists(file_path): + is_new_file = true + + # The "keys" and original locale are the only columns in a new file. + # For example: "keys, en" + column_count = 2 + return + + file = FileAccess.open(file_path, FileAccess.READ) + + var locale_csv_row := file.get_csv_line() + column_count = locale_csv_row.size() + var locale_key := locale_csv_row[0] + + old_lines[locale_key] = locale_csv_row + + _read_file_into_lines() + + +## Private function to read the CSV file into the [member lines] array. +## Cannot be called on a new file. +func _read_file_into_lines() -> void: + while not file.eof_reached(): + var line := file.get_csv_line() + var row_key := line[0] + + old_lines[row_key] = line + + +## Collects names from the given [param characters] and adds them to the +## [member lines]. +## +## If this is the character name CSV file, use this method to +## take previously collected characters from other [class DialogicCsvFile]s. +func collect_lines_from_characters(characters: Dictionary) -> void: + for character: DialogicCharacter in characters.values(): + # Add row for display names. + var name_property := DialogicCharacter.TranslatedProperties.NAME + var display_name_key: String = character.get_property_translation_key(name_property) + var line_value: String = character.display_name + var array_line := PackedStringArray([display_name_key, line_value]) + lines.append(array_line) + + var nicknames: Array = character.nicknames + + if not nicknames.is_empty(): + var nick_name_property := DialogicCharacter.TranslatedProperties.NICKNAMES + var nickname_string: String = ",".join(nicknames) + var nickname_name_line_key: String = character.get_property_translation_key(nick_name_property) + var nick_array_line := PackedStringArray([nickname_name_line_key, nickname_string]) + lines.append(nick_array_line) + + # New character item, if needed, add a separator. + if add_separator: + _append_empty() + + +## Appends an empty line to the [member lines] array. +func _append_empty() -> void: + var empty_line := PackedStringArray(["", ""]) + lines.append(empty_line) + + +## Returns the property type for the given [param key]. +func _get_key_type(key: String) -> PropertyType: + if key.ends_with(DialogicGlossary.NAME_PROPERTY): + return PropertyType.String + + if key.ends_with(DialogicGlossary.ALTERNATIVE_PROPERTY): + return PropertyType.Array + + return PropertyType.Other + + +func _process_line_into_array(csv_values: PackedStringArray, property_type: PropertyType) -> Array[String]: + const KEY_VALUE_INDEX := 0 + var values_as_array: Array[String] = [] + + for i in csv_values.size(): + + if i == KEY_VALUE_INDEX: + continue + + var csv_value := csv_values[i] + + if csv_value.is_empty(): + continue + + match property_type: + PropertyType.String: + values_as_array = [csv_value] + + PropertyType.Array: + var split_values := csv_value.split(",") + + for value in split_values: + values_as_array.append(value) + + return values_as_array + + +func _add_keys_to_glossary(glossary: DialogicGlossary, names: Array) -> void: + var glossary_prefix_key := glossary._get_glossary_translation_id_prefix() + var glossary_translation_id_prefix := _get_glossary_translation_key_prefix(glossary) + + for glossary_line: PackedStringArray in names: + + if glossary_line.is_empty(): + continue + + var csv_key := glossary_line[0] + + # CSV line separators will be empty. + if not csv_key.begins_with(glossary_prefix_key): + continue + + var value_type := _get_key_type(csv_key) + + # String and Array are the only valid types. + if (value_type == PropertyType.Other + or not csv_key.begins_with(glossary_translation_id_prefix)): + continue + + var new_line_to_add := _process_line_into_array(glossary_line, value_type) + + for name_to_add: String in new_line_to_add: + glossary._translation_keys[name_to_add.strip_edges()] = csv_key + + + +## Reads all [member lines] and adds them to the given [param glossary]'s +## internal collection of words-to-translation-key mappings. +## +## Populate the CSV's lines with the method [method collect_lines_from_glossary] +## before. +func add_translation_keys_to_glossary(glossary: DialogicGlossary) -> void: + glossary._translation_keys.clear() + _add_keys_to_glossary(glossary, lines) + _add_keys_to_glossary(glossary, old_lines.values()) + + +## Returns the translation key prefix for the given [param glossary_translation_id]. +## The resulting format will look like this: Glossary/a2/ +## You can use this to find entries in [member lines] that to a glossary. +func _get_glossary_translation_key_prefix(glossary: DialogicGlossary) -> String: + return ( + DialogicGlossary.RESOURCE_NAME + .path_join(glossary._translation_id) + ) + + +## Returns whether [param value_b] is greater than [param value_a]. +## +## This method helps to sort glossary entry properties by their importance +## matching the order in the editor. +## +## TODO: Allow Dialogic users to define their own order. +func _sort_glossary_entry_property_keys(property_key_a: String, property_key_b: String) -> bool: + const GLOSSARY_CSV_LINE_ORDER := { + DialogicGlossary.NAME_PROPERTY: 0, + DialogicGlossary.ALTERNATIVE_PROPERTY: 1, + DialogicGlossary.TEXT_PROPERTY: 2, + DialogicGlossary.EXTRA_PROPERTY: 3, + } + const UNKNOWN_PROPERTY_ORDER := 100 + + var value_a: int = GLOSSARY_CSV_LINE_ORDER.get(property_key_a, UNKNOWN_PROPERTY_ORDER) + var value_b: int = GLOSSARY_CSV_LINE_ORDER.get(property_key_b, UNKNOWN_PROPERTY_ORDER) + + return value_a < value_b + + +## Collects properties from glossary entries from the given [param glossary] and +## adds them to the [member lines]. +func collect_lines_from_glossary(glossary: DialogicGlossary) -> void: + + for glossary_value: Variant in glossary.entries.values(): + + if glossary_value is String: + continue + + var glossary_entry: Dictionary = glossary_value + var glossary_entry_name: String = glossary_entry[DialogicGlossary.NAME_PROPERTY] + + var _glossary_translation_id := glossary.get_set_glossary_translation_id() + var entry_translation_id := glossary.get_set_glossary_entry_translation_id(glossary_entry_name) + + var entry_property_keys := glossary_entry.keys().duplicate() + entry_property_keys.sort_custom(_sort_glossary_entry_property_keys) + + var entry_name_property: String = glossary_entry[DialogicGlossary.NAME_PROPERTY] + + for entry_key: String in entry_property_keys: + # Ignore private keys. + if entry_key.begins_with(DialogicGlossary.PRIVATE_PROPERTY_PREFIX): + continue + + var item_value: Variant = glossary_entry[entry_key] + var item_value_str := "" + + if item_value is Array: + var item_array := item_value as Array + # We use a space after the comma to make it easier to read. + item_value_str = " ,".join(item_array) + + elif not item_value is String or item_value.is_empty(): + continue + + else: + item_value_str = item_value + + var glossary_csv_key := glossary._get_glossary_translation_key(entry_translation_id, entry_key) + + if (entry_key == DialogicGlossary.NAME_PROPERTY + or entry_key == DialogicGlossary.ALTERNATIVE_PROPERTY): + glossary.entries[glossary_csv_key] = entry_name_property + + var glossary_line := PackedStringArray([glossary_csv_key, item_value_str]) + + lines.append(glossary_line) + + # New glossary item, if needed, add a separator. + if add_separator: + _append_empty() + + + +## Collects translatable events from the given [param timeline] and adds +## them to the [member lines]. +func collect_lines_from_timeline(timeline: DialogicTimeline) -> void: + for event: DialogicEvent in timeline.events: + + if event.can_be_translated(): + + if event._translation_id.is_empty(): + event.add_translation_id() + event.update_text_version() + + var properties: Array = event._get_translatable_properties() + + for property: String in properties: + var line_key: String = event.get_property_translation_key(property) + var line_value: String = event._get_property_original_translation(property) + var array_line := PackedStringArray([line_key, line_value]) + lines.append(array_line) + + # End of timeline, if needed, add a separator. + if add_separator: + _append_empty() + + +## Clears the CSV file on disk and writes the current [member lines] array to it. +## Uses the [member old_lines] dictionary to update existing translations. +## If a translation row misses a column, a trailing comma will be added to +## conform to the CSV file format. +## +## If the locale CSV line was collected only, a new file won't be created and +## already existing translations won't be updated. +func update_csv_file_on_disk() -> void: + # None or locale row only. + if lines.size() < 2: + print_rich("[color=yellow]No lines for the CSV file, skipping: " + used_file_path) + + return + + # Clear the current CSV file. + file = FileAccess.open(used_file_path, FileAccess.WRITE) + + for line in lines: + var row_key := line[0] + + # In case there might be translations for this line already, + # add them at the end again (orig locale text is replaced). + if row_key in old_lines: + var old_line: PackedStringArray = old_lines[row_key] + var updated_line: PackedStringArray = line + old_line.slice(2) + + var line_columns: int = updated_line.size() + var line_columns_to_add := column_count - line_columns + + # Add trailing commas to match the amount of columns. + for _i in range(line_columns_to_add): + updated_line.append("") + + file.store_csv_line(updated_line) + updated_rows += 1 + + else: + var line_columns: int = line.size() + var line_columns_to_add := column_count - line_columns + + # Add trailing commas to match the amount of columns. + for _i in range(line_columns_to_add): + line.append("") + + file.store_csv_line(line) + new_rows += 1 + + file.close() diff --git a/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_editor.gd b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_editor.gd new file mode 100644 index 0000000..3d87c4a --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_editor.gd @@ -0,0 +1,169 @@ +@tool +extends DialogicEditor + +## Editor that contains all settings + +var button_group := ButtonGroup.new() +var registered_sections: Array[DialogicSettingsPage] = [] + + +func _get_title() -> String: + return "Settings" + + +func _get_icon() -> Texture: + return get_theme_icon("PluginScript", "EditorIcons") + + +func _register() -> void: + editors_manager.register_simple_editor(self) + self.alternative_text = "Customize dialogic and it's behaviour" + + +func _ready() -> void: + if get_parent() is SubViewport: + return + + register_settings_section("res://addons/dialogic/Editor/Settings/settings_general.tscn") + register_settings_section("res://addons/dialogic/Editor/Settings/settings_translation.tscn") + register_settings_section("res://addons/dialogic/Editor/Settings/settings_modules.tscn") + + for indexer in DialogicUtil.get_indexers(): + for settings_page in indexer._get_settings_pages(): + register_settings_section(settings_page) + + add_registered_sections() + %SettingsTabs.get_child(0).button_pressed = true + %SettingsContent.get_child(0).show() + + +func register_settings_section(path:String) -> void: + var section: Control = load(path).instantiate() + registered_sections.append(section) + + +func add_registered_sections() -> void: + for i in %SettingsTabs.get_children(): + i.queue_free() + for i in %FeatureTabs.get_children(): + i.queue_free() + + for i in %SettingsContent.get_children(): + i.queue_free() + + + registered_sections.sort_custom(section_sort) + for section in registered_sections: + + section.name = section._get_title() + + var vbox := VBoxContainer.new() + vbox.set_meta('section', section) + vbox.size_flags_vertical = Control.SIZE_EXPAND_FILL + vbox.name = section.name + var hbox := HBoxContainer.new() + + var title := Label.new() + title.text = section.name + title.theme_type_variation = 'DialogicSectionBig' + hbox.add_child(title) + vbox.add_child(hbox) + + + if !section.short_info.is_empty(): + var tooltip_hint: Control = load("res://addons/dialogic/Editor/Common/hint_tooltip_icon.tscn").instantiate() + tooltip_hint.hint_text = section.short_info + hbox.add_child(tooltip_hint) + + + var scroll := ScrollContainer.new() + scroll.size_flags_horizontal = Control.SIZE_EXPAND_FILL + scroll.size_flags_vertical = Control.SIZE_EXPAND_FILL + var inner_vbox := VBoxContainer.new() + inner_vbox.size_flags_horizontal = Control.SIZE_EXPAND_FILL + inner_vbox.size_flags_vertical = Control.SIZE_EXPAND_FILL + scroll.add_child(inner_vbox) + var panel := PanelContainer.new() + panel.theme_type_variation = "DialogicPanelA" + panel.size_flags_horizontal = Control.SIZE_EXPAND_FILL + if section.size_flags_vertical == Control.SIZE_EXPAND_FILL: + panel.size_flags_vertical = Control.SIZE_EXPAND_FILL + inner_vbox.add_child(panel) + + + var info_section: Control = section._get_info_section() + if info_section != null: + inner_vbox.add_child(Control.new()) + inner_vbox.get_child(-1).custom_minimum_size.y = 50 + + inner_vbox.add_child(title.duplicate()) + inner_vbox.get_child(-1).text = "Information" + var info_panel := panel.duplicate() + info_panel.theme_type_variation = "DialogicPanelDarkA" + + inner_vbox.add_child(info_panel) + info_section.get_parent().remove_child(info_section) + info_panel.add_child(info_section) + + panel.add_child(section) + vbox.add_child(scroll) + + + var button := Button.new() + button.text = " "+section.name + button.tooltip_text = section.name + button.toggle_mode = true + button.button_group = button_group + button.expand_icon = true + button.alignment = HORIZONTAL_ALIGNMENT_LEFT + button.flat = true + button.add_theme_color_override('font_pressed_color', get_theme_color("property_color_z", "Editor")) + button.add_theme_color_override('font_hover_color', get_theme_color('warning_color', 'Editor')) + button.add_theme_color_override('font_focus_color', get_theme_color('warning_color', 'Editor')) + button.add_theme_stylebox_override('focus', StyleBoxEmpty.new()) + button.pressed.connect(open_tab.bind(vbox)) + if section._is_feature_tab(): + %FeatureTabs.add_child(button) + else: + %SettingsTabs.add_child(button) + + vbox.hide() +# if section.has_method('_get_icon'): +# icon.texture = section._get_icon() + %SettingsContent.add_child(vbox) + + +func open_tab(tab_to_show:Control) -> void: + for tab in %SettingsContent.get_children(): + tab.hide() + + tab_to_show.show() + + +func section_sort(item1:DialogicSettingsPage, item2:DialogicSettingsPage) -> bool: + if !item1._is_feature_tab() and item2._is_feature_tab(): + return true + if item1._get_priority() > item2._get_priority(): + return true + return false + + + +func _open(extra_information:Variant = null) -> void: + refresh() + if typeof(extra_information) == TYPE_STRING: + if %SettingsContent.has_node(extra_information): + open_tab(%SettingsContent.get_node(extra_information)) + + +func _close() -> void: + for child in %SettingsContent.get_children(): + if child.get_meta('section').has_method('_about_to_close'): + child.get_meta('section')._about_to_close() + + +func refresh() -> void: + for child in %SettingsContent.get_children(): + if child.get_meta('section').has_method('_refresh'): + child.get_meta('section')._refresh() + diff --git a/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_editor.tscn b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_editor.tscn new file mode 100644 index 0000000..01d385f --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_editor.tscn @@ -0,0 +1,59 @@ +[gd_scene load_steps=2 format=3 uid="uid://dganirw26brfb"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Settings/settings_editor.gd" id="1"] + +[node name="Settings" type="HSplitContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource("1") + +[node name="TabList" type="ScrollContainer" parent="."] +layout_mode = 2 +horizontal_scroll_mode = 0 + +[node name="Margin" type="MarginContainer" parent="TabList"] +layout_mode = 2 +theme_override_constants/margin_top = 3 + +[node name="VBox" type="VBoxContainer" parent="TabList/Margin"] +layout_mode = 2 +theme_override_constants/separation = 0 + +[node name="Title" type="Label" parent="TabList/Margin/VBox"] +layout_mode = 2 +theme_type_variation = &"DialogicSection" +text = "Settings" + +[node name="SettingsTabs" type="VBoxContainer" parent="TabList/Margin/VBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/separation = 0 + +[node name="Control" type="Control" parent="TabList/Margin/VBox"] +custom_minimum_size = Vector2(0, 30) +layout_mode = 2 + +[node name="Title2" type="Label" parent="TabList/Margin/VBox"] +layout_mode = 2 +theme_type_variation = &"DialogicSection" +text = "Features" + +[node name="FeatureTabs" type="VBoxContainer" parent="TabList/Margin/VBox"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/separation = 0 + +[node name="SettingsContent" type="VBoxContainer" parent="."] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 diff --git a/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_general.gd b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_general.gd new file mode 100644 index 0000000..07500c4 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_general.gd @@ -0,0 +1,247 @@ +@tool +extends DialogicSettingsPage + +## Settings tab that holds genreal dialogic settings. + + +func _get_title() -> String: + return "General" + + +func _get_priority() -> int: + return 99 + +func _ready() -> void: + var s := DCSS.inline({ + 'padding': 5, + 'background': Color(0.545098, 0.545098, 0.545098, 0.211765) + }) + %ExtensionsFolderPicker.resource_icon = get_theme_icon("Folder", "EditorIcons") + + # Signals + %ExtensionsFolderPicker.value_changed.connect(_on_ExtensionsFolder_value_changed) + %PhysicsTimerButton.toggled.connect(_on_physics_timer_button_toggled) + + # Colors + %ResetColorsButton.icon = get_theme_icon("Reload", "EditorIcons") + %ResetColorsButton.button_up.connect(_on_reset_colors_button) + + # Extension creator + %ExtensionCreator.hide() + + +func _refresh() -> void: + %PhysicsTimerButton.button_pressed = DialogicUtil.is_physics_timer() + %LayoutNodeEndBehaviour.select(ProjectSettings.get_setting('dialogic/layout/end_behaviour', 0)) + %ExtensionsFolderPicker.set_value(ProjectSettings.get_setting('dialogic/extensions_folder', 'res://addons/dialogic_additions')) + + update_color_palette() + + %SectionList.clear() + %SectionList.create_item() + var cached_events := DialogicResourceUtil.get_event_cache() + var sections := [] + var section_order: Array = DialogicUtil.get_editor_setting('event_section_order', ['Main', 'Logic', 'Flow', 'Audio', 'Visuals','Other', 'Helper']) + for ev in cached_events: + if !ev.event_category in sections: + sections.append(ev.event_category) + var item: TreeItem = %SectionList.create_item(null) + item.set_text(0, ev.event_category) + item.add_button(0, get_theme_icon("ArrowUp", "EditorIcons")) + item.add_button(0, get_theme_icon("ArrowDown", "EditorIcons")) + if ev.event_category in section_order: + + item.move_before(item.get_parent().get_child(min(section_order.find(ev.event_category),item.get_parent().get_child_count()-1))) + + %SectionList.get_root().get_child(0).set_button_disabled(0, 0, true) + %SectionList.get_root().get_child(-1).set_button_disabled(0, 1, true) + + +func _on_section_list_button_clicked(item:TreeItem, column, id, mouse_button_index): + if id == 0: + item.move_before(item.get_parent().get_child(item.get_index()-1)) + else: + item.move_after(item.get_parent().get_child(item.get_index()+1)) + + for child in %SectionList.get_root().get_children(): + child.set_button_disabled(0, 0, false) + child.set_button_disabled(0, 1, false) + + %SectionList.get_root().get_child(0).set_button_disabled(0, 0, true) + %SectionList.get_root().get_child(-1).set_button_disabled(0, 1, true) + + var sections := [] + for child in %SectionList.get_root().get_children(): + sections.append(child.get_text(0)) + + DialogicUtil.set_editor_setting('event_section_order', sections) + force_event_button_list_reload() + + +func force_event_button_list_reload() -> void: + find_parent('EditorsManager').editors['Timeline'].node.get_node('%VisualEditor').load_event_buttons() + + +func update_color_palette() -> void: + # Color Palette + for child in %Colors.get_children(): + child.queue_free() + for color in DialogicUtil.get_color_palette(): + var button := ColorPickerButton.new() + button.custom_minimum_size = Vector2(50 ,50) * DialogicUtil.get_editor_scale() + %Colors.add_child(button) + button.color = DialogicUtil.get_color(color) + button.color_changed.connect(_on_color_change) + + +func _on_color_change(color:Color) -> void: + var new_palette := {} + for i in %Colors.get_children(): + new_palette['Color'+str(i.get_index()+1)] = i.color + DialogicUtil.set_editor_setting('color_palette', new_palette) + + + +func _on_reset_colors_button() -> void: + DialogicUtil.set_editor_setting('color_palette', null) + update_color_palette() + + +func _on_physics_timer_button_toggled(is_toggled: bool) -> void: + ProjectSettings.set_setting('dialogic/timer/process_in_physics', is_toggled) + ProjectSettings.save() + + +func _on_ExtensionsFolder_value_changed(property:String, value:String) -> void: + if value == null or value.is_empty(): + value = 'res://addons/dialogic_additions' + ProjectSettings.set_setting('dialogic/extensions_folder', value) + ProjectSettings.save() + + +func _on_layout_node_end_behaviour_item_selected(index:int) -> void: + ProjectSettings.set_setting('dialogic/layout/end_behaviour', index) + ProjectSettings.save() + + +################################################################################ +## EXTENSION CREATOR +################################################################################ + +func _on_create_extension_button_pressed() -> void: + %CreateExtensionButton.hide() + %ExtensionCreator.show() + + %NameEdit.text = "" + %NameEdit.grab_focus() + + +func _on_submit_extension_button_pressed() -> void: + if %NameEdit.text.is_empty(): + return + + var extensions_folder: String = ProjectSettings.get_setting('dialogic/extensions_folder', 'res://addons/dialogic_additions') + + extensions_folder = extensions_folder.path_join(%NameEdit.text.to_pascal_case()) + DirAccess.make_dir_recursive_absolute(extensions_folder) + var mode: int = %ExtensionMode.selected + + var file: FileAccess + var indexer_content := "@tool\nextends DialogicIndexer\n\n" + if mode != 1: # don't add event in Subsystem Only mode + indexer_content += """func _get_events() -> Array: + return [this_folder.path_join('event_"""+%NameEdit.text.to_snake_case()+""".gd')]\n\n""" + file = FileAccess.open(extensions_folder.path_join('event_'+%NameEdit.text.to_snake_case()+'.gd'), FileAccess.WRITE) + file.store_string( + +#region EXTENDED EVENT SCRIPT +"""@tool +extends DialogicEvent +class_name Dialogic"""+%NameEdit.text.to_pascal_case()+"""Event + +# Define properties of the event here + +func _execute() -> void: + # This will execute when the event is reached + finish() # called to continue with the next event + + +#region INITIALIZE +################################################################################ +# Set fixed settings of this event +func _init() -> void: + event_name = \""""+%NameEdit.text.capitalize()+"""\" + event_category = "Other" + +\n +#endregion + +#region SAVING/LOADING +################################################################################ +func get_shortcode() -> String: + return \""""+%NameEdit.text.to_snake_case()+"""\" + +func get_shortcode_parameters() -> Dictionary: + return { + #param_name : property_info + #"my_parameter" : {"property": "property", "default": "Default"}, + } + +# You can alternatively overwrite these 3 functions: to_text(), from_text(), is_valid_event() +#endregion + + +#region EDITOR REPRESENTATION +################################################################################ + +func build_event_editor() -> void: + pass + +#endregion +""") + +#endregion + if mode != 0: # don't add subsystem in event only mode + indexer_content += """func _get_subsystems() -> Array: + return [{'name':'"""+%NameEdit.text.to_pascal_case()+"""', 'script':this_folder.path_join('subsystem_"""+%NameEdit.text.to_snake_case()+""".gd')}]""" + file = FileAccess.open(extensions_folder.path_join('subsystem_'+%NameEdit.text.to_snake_case()+'.gd'), FileAccess.WRITE) + file.store_string( + +# region EXTENDED SUBSYSTEM SCRIPT +"""extends DialogicSubsystem + +## Describe the subsystems purpose here. + + +#region STATE +#################################################################################################### + +func clear_game_state(clear_flag:=Dialogic.ClearFlags.FULL_CLEAR) -> void: + pass + +func load_game_state(load_flag:=LoadFlags.FULL_LOAD) -> void: + pass + +#endregion + + +#region MAIN METHODS +#################################################################################################### + +# Add some useful methods here. + +#endregion +""") + file = FileAccess.open(extensions_folder.path_join('index.gd'), FileAccess.WRITE) + file.store_string(indexer_content) + + %ExtensionCreator.hide() + %CreateExtensionButton.show() + + find_parent('EditorView').plugin_reference.get_editor_interface().get_resource_filesystem().scan_sources() + force_event_button_list_reload() + + + +func _on_reload_pressed() -> void: + DialogicUtil._update_autoload_subsystem_access() diff --git a/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_general.tscn b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_general.tscn new file mode 100644 index 0000000..264427b --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_general.tscn @@ -0,0 +1,283 @@ +[gd_scene load_steps=6 format=3 uid="uid://b873ho41sklv8"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Settings/settings_general.gd" id="2"] +[ext_resource type="PackedScene" uid="uid://dbpkta2tjsqim" path="res://addons/dialogic/Editor/Common/hint_tooltip_icon.tscn" id="2_kqhx5"] +[ext_resource type="PackedScene" uid="uid://7mvxuaulctcq" path="res://addons/dialogic/Editor/Events/Fields/field_file.tscn" id="3_i7rug"] + +[sub_resource type="Image" id="Image_e1gle"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_4wgbv"] +image = SubResource("Image_e1gle") + +[node name="General" type="VBoxContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("2") + +[node name="PaletteTitle" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="SectionPaletteTitle" type="Label" parent="PaletteTitle"] +layout_mode = 2 +theme_type_variation = &"DialogicSettingsSection" +text = "Color Palette" + +[node name="HintTooltip" parent="PaletteTitle" instance=ExtResource("2_kqhx5")] +layout_mode = 2 +tooltip_text = "These colors are used for the events." +texture = SubResource("ImageTexture_4wgbv") +hint_text = "These colors are used for the events." + +[node name="ResetColorsButton" type="Button" parent="PaletteTitle"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 0 +tooltip_text = "Reset Colors to default" +icon = SubResource("ImageTexture_4wgbv") +flat = true + +[node name="ScrollContainer" type="ScrollContainer" parent="."] +layout_mode = 2 +horizontal_scroll_mode = 3 +vertical_scroll_mode = 0 + +[node name="Colors" type="HBoxContainer" parent="ScrollContainer"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="HSeparator" type="HSeparator" parent="."] +layout_mode = 2 + +[node name="HBoxContainer2" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="SectionBehaviourTitle" type="Label" parent="HBoxContainer2"] +layout_mode = 2 +theme_type_variation = &"DialogicSettingsSection" +text = "Layout Node Behaviour" + +[node name="HintTooltip" parent="HBoxContainer2" instance=ExtResource("2_kqhx5")] +layout_mode = 2 +tooltip_text = "The layout scene configured in the Layout editor is automatically +instanced when calling Dialogic.start(). Depending on your game, +you might want it to be deleted after the dialogue, be hidden +(as reinstancing often is wasting resources) or kept visible. " +texture = SubResource("ImageTexture_4wgbv") +hint_text = "The layout scene configured in the Layout editor is automatically +instanced when calling Dialogic.start(). Depending on your game, +you might want it to be deleted after the dialogue, be hidden +(as reinstancing often is wasting resources) or kept visible. " + +[node name="HBoxContainer3" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Label" type="Label" parent="HBoxContainer3"] +layout_mode = 2 +text = "On timeline end" + +[node name="LayoutNodeEndBehaviour" type="OptionButton" parent="HBoxContainer3"] +unique_name_in_owner = true +layout_mode = 2 +item_count = 3 +selected = 0 +fit_to_longest_item = false +popup/item_0/text = "Delete Layout Node" +popup/item_0/id = 0 +popup/item_1/text = "Hide Layout Node" +popup/item_1/id = 1 +popup/item_2/text = "Keep Layout Node" +popup/item_2/id = 2 + +[node name="HSeparator4" type="HSeparator" parent="."] +layout_mode = 2 + +[node name="HBoxContainer6" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="HBoxContainer4" type="VBoxContainer" parent="HBoxContainer6"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="HBoxContainer5" type="HBoxContainer" parent="HBoxContainer6/HBoxContainer4"] +layout_mode = 2 + +[node name="SectionExtensionsTitle" type="Label" parent="HBoxContainer6/HBoxContainer4/HBoxContainer5"] +layout_mode = 2 +theme_type_variation = &"DialogicSettingsSection" +text = "Extensions" + +[node name="HintTooltip" parent="HBoxContainer6/HBoxContainer4/HBoxContainer5" instance=ExtResource("2_kqhx5")] +layout_mode = 2 +tooltip_text = "Configure where dialogic looks for custom modules. + +You will have to restart the project to see the change take action." +texture = SubResource("ImageTexture_4wgbv") +hint_text = "Configure where dialogic looks for custom modules. + +You will have to restart the project to see the change take action." + +[node name="Reload" type="Button" parent="HBoxContainer6/HBoxContainer4/HBoxContainer5"] +layout_mode = 2 +text = "Reload" +flat = true + +[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer6/HBoxContainer4"] +layout_mode = 2 + +[node name="Label" type="Label" parent="HBoxContainer6/HBoxContainer4/HBoxContainer"] +layout_mode = 2 +text = "Extensions folder" + +[node name="ExtensionsFolderPicker" parent="HBoxContainer6/HBoxContainer4/HBoxContainer" instance=ExtResource("3_i7rug")] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder = "res://addons/dialogic_additions/Events" +file_mode = 2 +resource_icon = SubResource("ImageTexture_4wgbv") + +[node name="VSeparator" type="VSeparator" parent="HBoxContainer6"] +layout_mode = 2 + +[node name="ExtensionsPanel" type="PanelContainer" parent="HBoxContainer6"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_type_variation = &"DialogicPanelA" + +[node name="VBox" type="VBoxContainer" parent="HBoxContainer6/ExtensionsPanel"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="HBoxContainer6" type="HBoxContainer" parent="HBoxContainer6/ExtensionsPanel/VBox"] +layout_mode = 2 + +[node name="Label" type="Label" parent="HBoxContainer6/ExtensionsPanel/VBox/HBoxContainer6"] +layout_mode = 2 +theme_type_variation = &"DialogicSubTitle" +text = "Extension Creator " + +[node name="HintTooltip" parent="HBoxContainer6/ExtensionsPanel/VBox/HBoxContainer6" instance=ExtResource("2_kqhx5")] +layout_mode = 2 +tooltip_text = "Use the Exension Creator to quickly setup custom modules!" +texture = SubResource("ImageTexture_4wgbv") +hint_text = "Use the Exension Creator to quickly setup custom modules!" + +[node name="CreateExtensionButton" type="Button" parent="HBoxContainer6/ExtensionsPanel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +text = "Create New Extension" + +[node name="ExtensionCreator" type="VBoxContainer" parent="HBoxContainer6/ExtensionsPanel/VBox"] +unique_name_in_owner = true +visible = false +layout_mode = 2 + +[node name="ExtensionCreatorOptions" type="GridContainer" parent="HBoxContainer6/ExtensionsPanel/VBox/ExtensionCreator"] +layout_mode = 2 +columns = 2 + +[node name="NameLabel" type="Label" parent="HBoxContainer6/ExtensionsPanel/VBox/ExtensionCreator/ExtensionCreatorOptions"] +layout_mode = 2 +text = "Name:" + +[node name="NameEdit" type="LineEdit" parent="HBoxContainer6/ExtensionsPanel/VBox/ExtensionCreator/ExtensionCreatorOptions"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "e.g. \"Print\", \"Item\", \"Door\", \"Quest\"" + +[node name="ModeLabel" type="Label" parent="HBoxContainer6/ExtensionsPanel/VBox/ExtensionCreator/ExtensionCreatorOptions"] +layout_mode = 2 +text = "Setup mode:" + +[node name="ExtensionMode" type="OptionButton" parent="HBoxContainer6/ExtensionsPanel/VBox/ExtensionCreator/ExtensionCreatorOptions"] +unique_name_in_owner = true +layout_mode = 2 +item_count = 4 +selected = 0 +popup/item_0/text = "Event only" +popup/item_0/id = 0 +popup/item_1/text = "Event+Subsystem" +popup/item_1/id = 1 +popup/item_2/text = "Subsystem only" +popup/item_2/id = 2 +popup/item_3/text = "Complex" +popup/item_3/id = 3 + +[node name="SubmitExtensionButton" type="Button" parent="HBoxContainer6/ExtensionsPanel/VBox/ExtensionCreator"] +unique_name_in_owner = true +layout_mode = 2 +text = "Create" + +[node name="HSeparator2" type="HSeparator" parent="."] +layout_mode = 2 + +[node name="HBoxContainer7" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="TimerTitle" type="Label" parent="HBoxContainer7"] +layout_mode = 2 +theme_type_variation = &"DialogicSettingsSection" +text = "Timer processing" + +[node name="HintTooltip" parent="HBoxContainer7" instance=ExtResource("2_kqhx5")] +layout_mode = 2 +tooltip_text = "Change whether dialogics timers process in physics_process (frame-rate independent) or process." +texture = SubResource("ImageTexture_4wgbv") +hint_text = "Change whether dialogics timers process in physics_process (frame-rate independent) or process." + +[node name="HBoxContainer4" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Label" type="Label" parent="HBoxContainer4"] +layout_mode = 2 +text = "Process timers in physics_process" + +[node name="PhysicsTimerButton" type="CheckBox" parent="HBoxContainer4"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="HSeparator5" type="HSeparator" parent="."] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="SectionSections" type="Label" parent="HBoxContainer"] +layout_mode = 2 +theme_type_variation = &"DialogicSettingsSection" +text = "Section Order" + +[node name="HintTooltip" parent="HBoxContainer" instance=ExtResource("2_kqhx5")] +layout_mode = 2 +tooltip_text = "You can change the order of the event sections here. " +texture = SubResource("ImageTexture_4wgbv") +hint_text = "You can change the order of the event sections here. " + +[node name="SectionList" type="Tree" parent="."] +unique_name_in_owner = true +custom_minimum_size = Vector2(150, 150) +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/button_margin = 0 +allow_reselect = true +allow_rmb_select = true +hide_folding = true +hide_root = true +drop_mode_flags = 1 + +[connection signal="item_selected" from="HBoxContainer3/LayoutNodeEndBehaviour" to="." method="_on_layout_node_end_behaviour_item_selected"] +[connection signal="pressed" from="HBoxContainer6/HBoxContainer4/HBoxContainer5/Reload" to="." method="_on_reload_pressed"] +[connection signal="pressed" from="HBoxContainer6/ExtensionsPanel/VBox/CreateExtensionButton" to="." method="_on_create_extension_button_pressed"] +[connection signal="pressed" from="HBoxContainer6/ExtensionsPanel/VBox/ExtensionCreator/SubmitExtensionButton" to="." method="_on_submit_extension_button_pressed"] +[connection signal="button_clicked" from="SectionList" to="." method="_on_section_list_button_clicked"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_modules.gd b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_modules.gd new file mode 100644 index 0000000..008453e --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_modules.gd @@ -0,0 +1,443 @@ +@tool +extends DialogicSettingsPage + + +func _get_title() -> String: + return "Modules" + +func _get_priority() -> int: + return 0 + +func _is_feature_tab() -> bool: + return true + + +func _ready() -> void: + if get_parent() is SubViewport: + return + %Refresh.icon = get_theme_icon("Loop", "EditorIcons") + %Search.right_icon = get_theme_icon("Search", "EditorIcons") + + %Filter_Events.icon = get_theme_icon("Favorites", "EditorIcons") + %Filter_Subsystems.icon = get_theme_icon("Callable", "EditorIcons") + %Filter_Styles.icon = get_theme_icon("PopupMenu", "EditorIcons") + %Filter_EffectsAndModifiers.icon = get_theme_icon("RichTextEffect", "EditorIcons") + %Filter_Editors.icon = get_theme_icon("ConfirmationDialog", "EditorIcons") + %Filter_Settings.icon = get_theme_icon("PluginScript", "EditorIcons") + %Collapse.icon = get_theme_icon("CollapseTree", "EditorIcons") + + %EventDefaultsPanel.add_theme_stylebox_override('panel', get_theme_stylebox("Background", "EditorStyles")) + + %ExternalLink.icon = get_theme_icon("Help", "EditorIcons") + + +func _refresh() -> void: + %EventDefaultsPanel.hide() + load_modules_tree() + + +func _on_refresh_pressed() -> void: + DialogicUtil.get_indexers(true, true) + DialogicResourceUtil.update_event_cache() + load_modules_tree() + + +func filters_updated(fake_arg:Variant) -> void: + load_modules_tree() + + +func _on_collapse_toggled(button_pressed:bool) -> void: + for item in %Tree.get_root().get_children(): + item.collapsed = button_pressed + + if button_pressed: + %Collapse.icon = get_theme_icon("ExpandTree", "EditorIcons") + %Collapse.tooltip_text = "Expand All" + else: + %Collapse.icon = get_theme_icon("CollapseTree", "EditorIcons") + %Collapse.tooltip_text = "Collapse All" + + +func _on_search_text_changed(new_text:String) -> void: + for filter in [%Filter_Events, %Filter_Subsystems, %Filter_Editors, %Filter_EffectsAndModifiers, %Filter_Settings, %Filter_Styles]: + filter.text = "" + filter.set_meta("counter", 0) + + var hidden_events: Array = DialogicUtil.get_editor_setting('hidden_event_buttons', []) + + for child in %Tree.get_root().get_children(): + if new_text.to_lower() in child.get_text(0).to_lower() or new_text.is_empty(): + for sub_child in child.get_children(): + sub_child.visible = sub_child.get_meta('filter_button').button_pressed + sub_child.get_meta('filter_button').set_meta('counter', sub_child.get_meta('filter_button').get_meta('counter')+1) + sub_child.get_meta('filter_button').text = str(sub_child.get_meta('filter_button').get_meta('counter')) + child.visible = true + else: + for sub_child in child.get_children(): + sub_child.visible = sub_child.get_meta('filter_button').button_pressed and new_text.to_lower() in sub_child.get_text(0).to_lower() + + if new_text.to_lower() in sub_child.get_text(0).to_lower(): + sub_child.get_meta('filter_button').set_meta('counter', sub_child.get_meta('filter_button').get_meta('counter')+1) + sub_child.get_meta('filter_button').text = str(sub_child.get_meta('filter_button').get_meta('counter')) + + for i in range(child.get_button_count(0)): + child.erase_button(0, child.get_button_count(0)-1) + var any_visible := false + var counter := 0 + for sub_child in child.get_children(): + if sub_child.visible: + child.add_button(0, sub_child.get_icon(0), counter, false, sub_child.get_text(0)) + if sub_child.get_metadata(0) and sub_child.get_metadata(0)['type'] == 'Event' and sub_child.get_metadata(0)['hidden']: + var color: Color = sub_child.get_icon_modulate(0) + color.a = 0.5 + child.set_button_color(0, counter, color) + else: + child.set_button_color(0, counter, sub_child.get_icon_modulate(0)) + counter += 1 + any_visible = true + child.visible = any_visible + + + +func load_modules_tree() -> void: + %Tree.clear() + var root: TreeItem = %Tree.create_item() + var cached_events := DialogicResourceUtil.get_event_cache() + var hidden_events: Array = DialogicUtil.get_editor_setting('hidden_event_buttons', []) + var indexers := DialogicUtil.get_indexers() + for i in indexers: + var module_item: TreeItem = %Tree.create_item(root) + module_item.set_text(0, i.get_script().resource_path.trim_suffix('/index.gd').get_file()) + module_item.set_metadata(0, {'type':'Module'}) + + # Events + for ev in i._get_events(): + if not ResourceLoader.exists(ev): + continue + var event_item: TreeItem = %Tree.create_item(module_item) + event_item.set_icon(0, get_theme_icon("Favorites", "EditorIcons")) + for cached_event in cached_events: + if cached_event.get_script().resource_path == ev: + event_item.set_text(0, cached_event.event_name + " Event") + event_item.set_icon_modulate(0, cached_event.event_color) + var hidden: bool = cached_event.event_name in hidden_events + event_item.set_metadata(0, {'type':'Event', 'event':cached_event, 'hidden':hidden}) + event_item.add_button(0, get_theme_icon("GuiVisibilityVisible", "EditorIcons"), 0, false, "Toggle Event Button Visibility") + if hidden: + event_item.set_button(0, 0, get_theme_icon("GuiVisibilityHidden", "EditorIcons")) + event_item.set_meta('filter_button', %Filter_Events) + event_item.visible = %Filter_Events.button_pressed + + # Subsystems + for subsys in i._get_subsystems(): + var subsys_item: TreeItem = %Tree.create_item(module_item) + subsys_item.set_icon(0, get_theme_icon("Callable", "EditorIcons")) + subsys_item.set_text(0, subsys.name + " Subsystem") + subsys_item.set_icon_modulate(0, get_theme_color("readonly_color", "Editor")) + subsys_item.set_metadata(0, {'type':'Subsystem', 'info':subsys}) + subsys_item.set_meta('filter_button', %Filter_Subsystems) + subsys_item.visible = %Filter_Subsystems.button_pressed + + # Style scenes + for style in i._get_layout_parts(): + var style_item: TreeItem = %Tree.create_item(module_item) + style_item.set_icon(0, get_theme_icon("PopupMenu", "EditorIcons")) + style_item.set_text(0, style.name) + style_item.set_icon_modulate(0, get_theme_color("property_color_x", "Editor")) + style_item.set_metadata(0, {'type':'Style', 'info':style}) + style_item.set_meta('filter_button', %Filter_Styles) + style_item.visible = %Filter_Styles.button_pressed + + # Text Effects + for effect in i._get_text_effects(): + var effect_item: TreeItem = %Tree.create_item(module_item) + effect_item.set_icon(0, get_theme_icon("RichTextEffect", "EditorIcons")) + effect_item.set_text(0, "Text effect ["+effect.command+"]") + effect_item.set_icon_modulate(0, get_theme_color("property_color_z", "Editor")) + effect_item.set_metadata(0, {'type':'Effect', 'info':effect}) + effect_item.set_meta('filter_button', %Filter_EffectsAndModifiers) + effect_item.visible = %Filter_EffectsAndModifiers.button_pressed + + # Text Modifiers + for mod in i._get_text_modifiers(): + var mod_item: TreeItem = %Tree.create_item(module_item) + mod_item.set_icon(0, get_theme_icon("RichTextEffect", "EditorIcons")) + mod_item.set_text(0, mod.method.capitalize()) + mod_item.set_icon_modulate(0, get_theme_color("property_color_z", "Editor")) + mod_item.set_metadata(0, {'type':'Modifier', 'info':mod}) + mod_item.set_meta('filter_button', %Filter_EffectsAndModifiers) + mod_item.visible = %Filter_EffectsAndModifiers.button_pressed + + # Settings + for settings in i._get_settings_pages(): + var settings_item: TreeItem = %Tree.create_item(module_item) + settings_item.set_icon(0, get_theme_icon("PluginScript", "EditorIcons")) + settings_item.set_text(0, module_item.get_text(0) + " Settings") + settings_item.set_icon_modulate(0, get_theme_color("readonly_color", "Editor")) + settings_item.set_metadata(0, {'type':'Settings', 'info':settings}) + settings_item.set_meta('filter_button', %Filter_Settings) + settings_item.visible = %Filter_Settings.button_pressed + + # Editors + for editor in i._get_editors(): + var editor_item: TreeItem = %Tree.create_item(module_item) + editor_item.set_icon(0, get_theme_icon("ConfirmationDialog", "EditorIcons")) + editor_item.set_text(0, editor.get_file().trim_suffix('.tscn').capitalize()) + editor_item.set_icon_modulate(0, get_theme_color("readonly_color", "Editor")) + editor_item.set_metadata(0, {'type':'Editor', 'info':editor}) + editor_item.set_meta('filter_button', %Filter_Editors) + editor_item.visible = %Filter_Editors.button_pressed + + module_item.collapsed = %Collapse.button_pressed + + _on_search_text_changed(%Search.text) + if %Tree.get_root().get_child_count(): %Tree.set_selected(%Tree.get_root().get_child(0), 0) + + +func _on_tree_button_clicked(item:TreeItem, column:int, id:int, mouse_button_index:int) -> void: + match item.get_metadata(0)['type']: + 'Module': + item.collapsed = false + %Tree.set_selected(item.get_child(id), 0) + 'Event': + # Visibility item clicked + if id == 0: + var meta: Dictionary= item.get_metadata(0) + if meta['hidden']: + item.set_button(0, 0, get_theme_icon("GuiVisibilityVisible", "EditorIcons")) + item.get_parent().set_button_color(0, item.get_index(), item.get_icon_modulate(0)) + if item == %Tree.get_selected(): + %VisibilityToggle.button_pressed = true + else: + item.set_button(0, 0, get_theme_icon("GuiVisibilityHidden", "EditorIcons")) + var color: Color = item.get_icon_modulate(0) + color.a = 0.5 + item.get_parent().set_button_color(0, item.get_index(), color) + if item == %Tree.get_selected(): + %VisibilityToggle.button_pressed = false + meta['hidden'] = !meta['hidden'] + item.set_metadata(0, meta) + change_event_visibility(meta['event'], !meta['hidden']) + + +func _on_tree_item_selected() -> void: + var selected_item: TreeItem = %Tree.get_selected() + + var metadata: Variant = selected_item.get_metadata(0) + + %Title.text = selected_item.get_text(0) + %EventDefaultsPanel.hide() + %Icon.texture = null + %ExternalLink.hide() + %VisibilityToggle.hide() + + if metadata is Dictionary: + match metadata.type: + 'Event': + %GeneralInfo.text = "Events can be used in timelines and do all kinds of things. They often interact with subsystems and dialogic nodes." + + load_event_settings(metadata.event) + if %EventDefaults.get_child_count(): + %EventDefaultsPanel.show() + + if metadata.event.help_page_path: + %ExternalLink.show() + %ExternalLink.set_meta('url', metadata.event.help_page_path) + %Icon.texture = metadata.event._get_icon() + if !metadata.event.disable_editor_button: + %VisibilityToggle.show() + %VisibilityToggle.button_pressed = !metadata.event.event_name in DialogicUtil.get_editor_setting('hidden_event_buttons', []) + if %VisibilityToggle.button_pressed: + %VisibilityToggle.icon = get_theme_icon("GuiVisibilityVisible", "EditorIcons") + else: + %VisibilityToggle.icon = get_theme_icon("GuiVisibilityHidden", "EditorIcons") + # ------------------------------------------------- + 'Subsystem': + %GeneralInfo.text = "Subsystems hold specialized functionality. They mostly manage communication between events and dialogic nodes. Often they provide handy methods that can be accessed by the user like this: Dialogic.Subsystem.a_method()." + # ------------------------------------------------- + 'Effect': + %GeneralInfo.text = "Text effects can be used in text events. They will be executed once reached and can take a single argument." + # ------------------------------------------------- + 'Modifier': + %GeneralInfo.text = "Modifiers can modify text from text events before it is shown." + # ------------------------------------------------- + 'Style': + %GeneralInfo.text = "Style presets can be activated and modified in the Styles editor. They provide the design of the dialog interface in your game." + # ------------------------------------------------- + 'Editor': + %GeneralInfo.text = "Editors provide a user interface for editing dialogic data." + # ------------------------------------------------- + 'Settings': + %GeneralInfo.text = "Settings pages provide settings that are usually used by subsystems, events and dialogic nodes." + # ------------------------------------------------- + '_': + %GeneralInfo.text = "" + + +func _on_external_link_pressed() -> void: + if %ExternalLink.has_meta('url'): + OS.shell_open(%ExternalLink.get_meta('url')) + + +func change_event_visibility(event:DialogicEvent, visibility:bool) -> void: + if event: + var list: Array= DialogicUtil.get_editor_setting('hidden_event_buttons', []) + if visibility: + list.erase(event.event_name) + else: + list.append(event.event_name) + DialogicUtil.set_editor_setting('hidden_event_buttons', list) + force_event_button_list_update() + + +func _on_visibility_toggle_toggled(button_pressed:bool) -> void: + change_event_visibility(%Tree.get_selected().get_metadata(0).event, button_pressed) + + if button_pressed: + %VisibilityToggle.icon = get_theme_icon("GuiVisibilityVisible", "EditorIcons") + %Tree.get_selected().set_button(0, 0, get_theme_icon("GuiVisibilityVisible", "EditorIcons")) + %Tree.get_selected().get_parent().set_button_color(0, %Tree.get_selected().get_index(), %Tree.get_selected().get_icon_modulate(0)) + else: + %VisibilityToggle.icon = get_theme_icon("GuiVisibilityHidden", "EditorIcons") + %Tree.get_selected().set_button(0, 0, get_theme_icon("GuiVisibilityHidden", "EditorIcons")) + var color: Color = %Tree.get_selected().get_icon_modulate(0) + color.a = 0.5 + %Tree.get_selected().get_parent().set_button_color(0, %Tree.get_selected().get_index(), color) + + + +func force_event_button_list_update() -> void: + find_parent('EditorsManager').editors['Timeline'].node.get_node('%VisualEditor').load_event_buttons() + +################################################################################ +## EVENT DEFAULT SETTINGS +################################################################################ +func load_event_settings(event:DialogicEvent) -> void: + for child in %EventDefaults.get_children(): + child.queue_free() + + var event_default_overrides: Dictionary = ProjectSettings.get_setting('dialogic/event_default_overrides', {}) + + var params := event.get_shortcode_parameters() + for prop in params: + var current_value: Variant = params[prop].default + if event_default_overrides.get(event.event_name, {}).has(params[prop].property): + current_value = event_default_overrides.get(event.event_name, {}).get(params[prop].property) + + # Label + var label := Label.new() + label.text = prop.capitalize() + %EventDefaults.add_child(label) + + var reset := Button.new() + reset.icon = get_theme_icon("Clear", "EditorIcons") + reset.flat = true + + %EventDefaults.add_child(reset) + + # Editing field + var editor_node: Node = null + match typeof(event.get(params[prop].property)): + TYPE_STRING: + editor_node = LineEdit.new() + editor_node.custom_minimum_size.x = 150 + editor_node.text = str(current_value) + editor_node.text_changed.connect(_on_event_default_string_submitted.bind(params[prop].property)) + TYPE_INT, TYPE_FLOAT: + if params[prop].has('suggestions'): + editor_node = OptionButton.new() + for i in params[prop].suggestions.call(): + editor_node.add_item(i, int(params[prop].suggestions.call()[i].value)) + editor_node.select(int(current_value)) + editor_node.item_selected.connect(_on_event_default_option_selected.bind(editor_node, params[prop].property)) + else: + editor_node = SpinBox.new() + + editor_node.allow_greater = true + editor_node.allow_lesser = true + if typeof(event.get(params[prop].property)) == TYPE_INT: + editor_node.step = 1 + else: + editor_node.step = 0.001 + + editor_node.value = float(current_value) + editor_node.value_changed.connect(_on_event_default_number_changed.bind(params[prop].property)) + + TYPE_VECTOR2: + editor_node = load("res://addons/dialogic/Editor/Events/Fields/field_vector2.tscn").instantiate() + editor_node.set_value(current_value) + editor_node.property_name = params[prop].property + editor_node.value_changed.connect(_on_event_default_value_changed) + + TYPE_BOOL: + editor_node = CheckBox.new() + editor_node.button_pressed = bool(current_value) + editor_node.toggled.connect(_on_event_default_bool_toggled.bind(params[prop].property)) + + TYPE_ARRAY: + editor_node = load("res://addons/dialogic/Editor/Events/Fields/field_array.tscn").instantiate() + editor_node.set_value(current_value) + editor_node.property_name = params[prop].property + editor_node.value_changed.connect(_on_event_default_value_changed) + + TYPE_DICTIONARY: + editor_node = load("res://addons/dialogic/Editor/Events/Fields/field_dictionary.tscn").instantiate() + editor_node.set_value(current_value) + editor_node.property_name = params[prop].property + editor_node.value_changed.connect(_on_event_default_value_changed) + %EventDefaults.add_child(editor_node) + reset.pressed.connect(reset_event_default_override.bind(prop, editor_node, params[prop].default)) + + +func set_event_default_override(prop:String, value:Variant) -> void: + var event_default_overrides: Dictionary = ProjectSettings.get_setting('dialogic/event_default_overrides', {}) + var event: DialogicEvent = %Tree.get_selected().get_metadata(0).event + + if not event_default_overrides.has(event.event_name): + event_default_overrides[event.event_name] = {} + + event_default_overrides[event.event_name][prop] = value + + ProjectSettings.set_setting('dialogic/event_default_overrides', event_default_overrides) + + +func reset_event_default_override(prop:String, node:Node, default:Variant) -> void: + var event_default_overrides: Dictionary = ProjectSettings.get_setting('dialogic/event_default_overrides', {}) + var event: DialogicEvent = %Tree.get_selected().get_metadata(0).event + + if not event_default_overrides.has(event.event_name): + return + + event_default_overrides[event.event_name].erase(prop) + + ProjectSettings.set_setting('dialogic/event_default_overrides', event_default_overrides) + + if node is CheckBox: + node.button_pressed = default + elif node is LineEdit: + node.text = default + elif node.has_method('set_value'): + node.set_value(default) + elif node is ColorPickerButton: + node.color = default + elif node is OptionButton: + node.select(default) + elif node is SpinBox: + node.value = default + + +func _on_event_default_string_submitted(text:String, prop:String) -> void: + set_event_default_override(prop, text) + +func _on_event_default_option_selected(index:int, option_button:OptionButton, prop:String) -> void: + set_event_default_override(prop, option_button.get_item_id(index)) + +func _on_event_default_number_changed(value:float, prop:String) -> void: + set_event_default_override(prop, value) + +func _on_event_default_value_changed(prop:String, value:Variant) -> void: + set_event_default_override(prop, value) + +func _on_event_default_bool_toggled(value:bool, prop:String) -> void: + set_event_default_override(prop, value) + diff --git a/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_modules.tscn b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_modules.tscn new file mode 100644 index 0000000..e43a96a --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_modules.tscn @@ -0,0 +1,236 @@ +[gd_scene load_steps=7 format=3 uid="uid://o7ljiritpgap"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Settings/settings_modules.gd" id="1_l2hk0"] + +[sub_resource type="Image" id="Image_570p8"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_lce2m"] +image = SubResource("Image_570p8") + +[sub_resource type="Image" id="Image_ihhvm"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 131, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 128, 128, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 93, 93, 55, 255, 97, 97, 58, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 97, 97, 42, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 98, 98, 47, 255, 97, 97, 42, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 93, 93, 233, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 94, 94, 46, 255, 93, 93, 236, 255, 93, 93, 233, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 93, 93, 252, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_137g7"] +image = SubResource("Image_ihhvm") + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_315cl"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(1, 0.365, 0.365, 1) +draw_center = false +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +corner_detail = 1 + +[node name="ModuleManagement" type="HSplitContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_bottom = -157.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_vertical = 3 +theme_override_constants/separation = 0 +script = ExtResource("1_l2hk0") +short_info = "Here you can manage modules: +- change event defaults +- hide events from the event list" + +[node name="Overview" type="VBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="ScrollContainer" type="ScrollContainer" parent="Overview"] +layout_mode = 2 +size_flags_horizontal = 3 +follow_focus = true +horizontal_scroll_mode = 3 +vertical_scroll_mode = 0 + +[node name="HBox" type="HBoxContainer" parent="Overview/ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 8 +alignment = 2 + +[node name="Filter_Events" type="Button" parent="Overview/ScrollContainer/HBox"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Include Events" +toggle_mode = true +button_pressed = true +text = "0" +flat = true +icon_alignment = 2 + +[node name="Filter_Subsystems" type="Button" parent="Overview/ScrollContainer/HBox"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Include Subsystems" +toggle_mode = true +button_pressed = true +text = "0" +flat = true +icon_alignment = 2 + +[node name="Filter_EffectsAndModifiers" type="Button" parent="Overview/ScrollContainer/HBox"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Include Text Effects and Modifiers" +toggle_mode = true +button_pressed = true +text = "0" +flat = true +icon_alignment = 2 + +[node name="Filter_Styles" type="Button" parent="Overview/ScrollContainer/HBox"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Include Preset Style Scenes" +toggle_mode = true +button_pressed = true +text = "0" +flat = true +icon_alignment = 2 + +[node name="Filter_Settings" type="Button" parent="Overview/ScrollContainer/HBox"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Include Settings Pages" +toggle_mode = true +text = "0" +flat = true +icon_alignment = 2 + +[node name="Filter_Editors" type="Button" parent="Overview/ScrollContainer/HBox"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Include Editors" +toggle_mode = true +text = "0" +flat = true +icon_alignment = 2 + +[node name="Search" type="LineEdit" parent="Overview/ScrollContainer/HBox"] +unique_name_in_owner = true +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +placeholder_text = "Search" +clear_button_enabled = true + +[node name="Refresh" type="Button" parent="Overview/ScrollContainer/HBox"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Refresh" + +[node name="Collapse" type="Button" parent="Overview/ScrollContainer/HBox"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Collapse All" +toggle_mode = true + +[node name="Tree" type="Tree" parent="Overview"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +allow_reselect = true +hide_root = true + +[node name="Scroll" type="ScrollContainer" parent="."] +show_behind_parent = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 0 +size_flags_stretch_ratio = 0.75 +horizontal_scroll_mode = 3 +vertical_scroll_mode = 0 + +[node name="Settings" type="VBoxContainer" parent="Scroll"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="HBox" type="HBoxContainer" parent="Scroll/Settings"] +layout_mode = 2 + +[node name="Icon" type="TextureRect" parent="Scroll/Settings/HBox"] +unique_name_in_owner = true +layout_mode = 2 +expand_mode = 3 + +[node name="Title" type="Label" parent="Scroll/Settings/HBox"] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"DialogicSubTitle" + +[node name="ExternalLink" type="Button" parent="Scroll/Settings/HBox"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +icon = SubResource("ImageTexture_lce2m") +flat = true + +[node name="VisibilityToggle" type="Button" parent="Scroll/Settings/HBox"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +toggle_mode = true +button_pressed = true +icon = SubResource("ImageTexture_137g7") +flat = true + +[node name="EventDefaultsPanel" type="PanelContainer" parent="Scroll/Settings"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_315cl") + +[node name="VBox" type="VBoxContainer" parent="Scroll/Settings/EventDefaultsPanel"] +layout_mode = 2 + +[node name="Title" type="Label" parent="Scroll/Settings/EventDefaultsPanel/VBox"] +layout_mode = 2 +text = "Edit event defaults:" + +[node name="EventDefaults" type="GridContainer" parent="Scroll/Settings/EventDefaultsPanel/VBox"] +unique_name_in_owner = true +layout_mode = 2 +columns = 3 + +[node name="GeneralInfo" type="Label" parent="Scroll/Settings"] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"DialogicHintText2" +autowrap_mode = 3 + +[connection signal="toggled" from="Overview/ScrollContainer/HBox/Filter_Events" to="." method="filters_updated"] +[connection signal="toggled" from="Overview/ScrollContainer/HBox/Filter_Subsystems" to="." method="filters_updated"] +[connection signal="toggled" from="Overview/ScrollContainer/HBox/Filter_EffectsAndModifiers" to="." method="filters_updated"] +[connection signal="toggled" from="Overview/ScrollContainer/HBox/Filter_Styles" to="." method="filters_updated"] +[connection signal="toggled" from="Overview/ScrollContainer/HBox/Filter_Settings" to="." method="filters_updated"] +[connection signal="toggled" from="Overview/ScrollContainer/HBox/Filter_Editors" to="." method="filters_updated"] +[connection signal="text_changed" from="Overview/ScrollContainer/HBox/Search" to="." method="_on_search_text_changed"] +[connection signal="pressed" from="Overview/ScrollContainer/HBox/Refresh" to="." method="_on_refresh_pressed"] +[connection signal="toggled" from="Overview/ScrollContainer/HBox/Collapse" to="." method="_on_collapse_toggled"] +[connection signal="button_clicked" from="Overview/Tree" to="." method="_on_tree_button_clicked"] +[connection signal="item_selected" from="Overview/Tree" to="." method="_on_tree_item_selected"] +[connection signal="pressed" from="Scroll/Settings/HBox/ExternalLink" to="." method="_on_external_link_pressed"] +[connection signal="toggled" from="Scroll/Settings/HBox/VisibilityToggle" to="." method="_on_visibility_toggle_toggled"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_page.gd b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_page.gd new file mode 100644 index 0000000..2b7dd81 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_page.gd @@ -0,0 +1,35 @@ +@tool +extends Control +class_name DialogicSettingsPage + +@export_multiline var short_info := "" + +## Called to get the title of the page +func _get_title() -> String: + return name + + +## Called to get the ordering of the page +func _get_priority() -> int: + return 0 + + +## Called to know whether to put this in the features section +func _is_feature_tab() -> bool: + return false + + +## Called when the settings editor is opened +func _refresh() -> void: + pass + + +## Called before the settings editor closes (another editor is opened) +## Can be used to safe stuff +func _about_to_close() -> void: + pass + + +## Return a section with information. +func _get_info_section() -> Control: + return null diff --git a/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_translation.gd b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_translation.gd new file mode 100644 index 0000000..fe0714e --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_translation.gd @@ -0,0 +1,660 @@ +@tool +extends DialogicSettingsPage + +## Settings tab that allows enabeling and updating translation csv-files. + + +enum TranslationModes {PER_PROJECT, PER_TIMELINE, NONE} +enum SaveLocationModes {INSIDE_TRANSLATION_FOLDER, NEXT_TO_TIMELINE, NONE} + +var loading := false +@onready var settings_editor: Control = find_parent('Settings') + +## The default CSV filename that contains the translations for character +## properties. +const DEFAULT_CHARACTER_CSV_NAME := "dialogic_character_translations.csv" +## The default CSV filename that contains the translations for timelines. +## Only used when all timelines are supposed to be translated in one file. +const DEFAULT_TIMELINE_CSV_NAME := "dialogic_timeline_translations.csv" + +const DEFAULT_GLOSSARY_CSV_NAME := "dialogic_glossary_translations.csv" + +const _USED_LOCALES_SETTING := "dialogic/translation/locales" + +## Contains translation changes that were made during the last update. + +## Unique locales that will be set after updating the CSV files. +var _unique_locales := [] + +func _get_icon() -> Texture2D: + return get_theme_icon("Translation", "EditorIcons") + + +func _is_feature_tab() -> bool: + return true + + +func _ready() -> void: + %TransEnabled.toggled.connect(store_changes) + %OrigLocale.get_suggestions_func = get_locales + %OrigLocale.resource_icon = get_theme_icon("Translation", "EditorIcons") + %OrigLocale.value_changed.connect(store_changes) + %TestingLocale.get_suggestions_func = get_locales + %TestingLocale.resource_icon = get_theme_icon("Translation", "EditorIcons") + %TestingLocale.value_changed.connect(store_changes) + %TransFolderPicker.value_changed.connect(store_changes) + %AddSeparatorEnabled.toggled.connect(store_changes) + + %SaveLocationMode.item_selected.connect(store_changes) + %TransMode.item_selected.connect(store_changes) + + %UpdateCsvFiles.pressed.connect(_on_update_translations_pressed) + %UpdateCsvFiles.icon = get_theme_icon("Add", "EditorIcons") + + %CollectTranslations.pressed.connect(collect_translations) + %CollectTranslations.icon = get_theme_icon("File", "EditorIcons") + + %TransRemove.pressed.connect(_on_erase_translations_pressed) + %TransRemove.icon = get_theme_icon("Remove", "EditorIcons") + + %UpdateConfirmationDialog.add_button("Keep old & Generate new", false, "generate_new") + + %UpdateConfirmationDialog.custom_action.connect(_on_custom_action) + + _verify_translation_file() + + +func _on_custom_action(action: String) -> void: + if action == "generate_new": + update_csv_files() + + +func _refresh() -> void: + loading = true + + %TransEnabled.button_pressed = ProjectSettings.get_setting('dialogic/translation/enabled', false) + %TranslationSettings.visible = %TransEnabled.button_pressed + %OrigLocale.set_value(ProjectSettings.get_setting('dialogic/translation/original_locale', TranslationServer.get_tool_locale())) + %TransMode.select(ProjectSettings.get_setting('dialogic/translation/file_mode', 1)) + %TransFolderPicker.set_value(ProjectSettings.get_setting('dialogic/translation/translation_folder', '')) + %TestingLocale.set_value(ProjectSettings.get_setting('internationalization/locale/test', '')) + %AddSeparatorEnabled.button_pressed = ProjectSettings.get_setting('dialogic/translation/add_separator', false) + + _verify_translation_file() + + loading = false + + +func store_changes(_fake_arg: Variant = null, _fake_arg2: Variant = null) -> void: + if loading: + return + + _verify_translation_file() + + ProjectSettings.set_setting('dialogic/translation/enabled', %TransEnabled.button_pressed) + %TranslationSettings.visible = %TransEnabled.button_pressed + ProjectSettings.set_setting('dialogic/translation/original_locale', %OrigLocale.current_value) + ProjectSettings.set_setting('dialogic/translation/file_mode', %TransMode.selected) + ProjectSettings.set_setting('dialogic/translation/translation_folder', %TransFolderPicker.current_value) + ProjectSettings.set_setting('internationalization/locale/test', %TestingLocale.current_value) + ProjectSettings.set_setting('dialogic/translation/save_mode', %SaveLocationMode.selected) + ProjectSettings.set_setting('dialogic/translation/add_separator', %AddSeparatorEnabled.button_pressed) + ProjectSettings.save() + + +## Checks whether the translation folder path is required. +## If it is, disables the "Update CSV files" button and shows a warning. +## +## The translation folder path is required when either of the following is true: +## - The translation mode is set to "Per Project". +## - The save location mode is set to "Inside Translation Folder". +func _verify_translation_file() -> void: + var translation_folder: String = %TransFolderPicker.current_value + var file_mode: TranslationModes = %TransMode.selected + + if file_mode == TranslationModes.PER_PROJECT: + %SaveLocationMode.disabled = true + else: + %SaveLocationMode.disabled = false + + var valid_translation_folder := (!translation_folder.is_empty() + and DirAccess.dir_exists_absolute(translation_folder)) + + %UpdateCsvFiles.disabled = not valid_translation_folder + + var status_message := "" + + if not valid_translation_folder: + status_message += "⛔ Requires valid translation folder to translate character names" + + if file_mode == TranslationModes.PER_PROJECT: + status_message += " and the project CSV file." + else: + status_message += "." + + %StatusMessage.text = status_message + + +func get_locales(_filter: String) -> Dictionary: + var suggestions := {} + suggestions['Default'] = {'value':'', 'tooltip':"Will use the fallback locale set in the project settings."} + suggestions[TranslationServer.get_tool_locale()] = {'value':TranslationServer.get_tool_locale()} + + var used_locales: Array = ProjectSettings.get_setting(_USED_LOCALES_SETTING, TranslationServer.get_all_languages()) + + for locale: String in used_locales: + var language_name := TranslationServer.get_language_name(locale) + + # Invalid locales return an empty String. + if language_name.is_empty(): + continue + + suggestions[locale] = { 'value': locale, 'tooltip': language_name } + + return suggestions + + +func _on_update_translations_pressed() -> void: + var save_mode: SaveLocationModes = %SaveLocationMode.selected + var file_mode: TranslationModes = %TransMode.selected + var translation_folder: String = %TransFolderPicker.current_value + + var old_save_mode: SaveLocationModes = ProjectSettings.get_setting('dialogic/translation/intern/save_mode', save_mode) + var old_file_mode: TranslationModes = ProjectSettings.get_setting('dialogic/translation/intern/file_mode', file_mode) + var old_translation_folder: String = ProjectSettings.get_setting('dialogic/translation/intern/translation_folder', translation_folder) + + if (old_save_mode == save_mode + and old_file_mode == file_mode + and old_translation_folder == translation_folder): + update_csv_files() + return + + %UpdateConfirmationDialog.popup_centered() + + +## Used by the dialog to inform that the settings were changed. +func _delete_and_update() -> void: + erase_translations() + update_csv_files() + + +## Creates or updates the glossary CSV files. +func _handle_glossary_translation( + csv_data: CsvUpdateData, + save_location_mode: SaveLocationModes, + translation_mode: TranslationModes, + translation_folder_path: String, + orig_locale: String) -> void: + + var glossary_csv: DialogicCsvFile = null + var glossary_paths: Array = ProjectSettings.get_setting('dialogic/glossary/glossary_files', []) + var add_separator_lines: bool = ProjectSettings.get_setting('dialogic/translation/add_separator', false) + + for glossary_path: String in glossary_paths: + + if glossary_csv == null: + var csv_name := "" + + # Get glossary CSV file name. + match translation_mode: + TranslationModes.PER_PROJECT: + csv_name = DEFAULT_GLOSSARY_CSV_NAME + + TranslationModes.PER_TIMELINE: + var glossary_name: String = glossary_path.trim_suffix('.tres') + var path_parts := glossary_name.split("/") + var file_name := path_parts[-1] + csv_name = "dialogic_" + file_name + '_translation.csv' + + var glossary_csv_path := "" + # Get glossary CSV file path. + match save_location_mode: + SaveLocationModes.INSIDE_TRANSLATION_FOLDER: + glossary_csv_path = translation_folder_path.path_join(csv_name) + + SaveLocationModes.NEXT_TO_TIMELINE: + glossary_csv_path = glossary_path.get_base_dir().path_join(csv_name) + + # Create or update glossary CSV file. + glossary_csv = DialogicCsvFile.new(glossary_csv_path, orig_locale, add_separator_lines) + + if (glossary_csv.is_new_file): + csv_data.new_glossaries += 1 + else: + csv_data.updated_glossaries += 1 + + var glossary: DialogicGlossary = load(glossary_path) + glossary_csv.collect_lines_from_glossary(glossary) + glossary_csv.add_translation_keys_to_glossary(glossary) + ResourceSaver.save(glossary) + + #If per-file mode is used, save this csv and begin a new one + if translation_mode == TranslationModes.PER_TIMELINE: + glossary_csv.update_csv_file_on_disk() + glossary_csv = null + + # If a Per-Project glossary is still open, we need to save it. + if glossary_csv != null: + glossary_csv.update_csv_file_on_disk() + glossary_csv = null + + +## Keeps information about the amount of new and updated CSV rows and what +## resources were populated with translation IDs. +## The final data can be used to display a status message. +class CsvUpdateData: + var new_events := 0 + var updated_events := 0 + + var new_timelines := 0 + var updated_timelines := 0 + + var new_names := 0 + var updated_names := 0 + + var new_glossaries := 0 + var updated_glossaries := 0 + + var new_glossary_entries := 0 + var updated_glossary_entries := 0 + + +func update_csv_files() -> void: + _unique_locales = [] + var orig_locale: String = ProjectSettings.get_setting('dialogic/translation/original_locale', '').strip_edges() + var save_location_mode: SaveLocationModes = ProjectSettings.get_setting('dialogic/translation/save_mode', SaveLocationModes.NEXT_TO_TIMELINE) + var translation_mode: TranslationModes = ProjectSettings.get_setting('dialogic/translation/file_mode', TranslationModes.PER_PROJECT) + var translation_folder_path: String = ProjectSettings.get_setting('dialogic/translation/translation_folder', 'res://') + var add_separator_lines: bool = ProjectSettings.get_setting('dialogic/translation/add_separator', false) + + var csv_data := CsvUpdateData.new() + + if orig_locale.is_empty(): + orig_locale = ProjectSettings.get_setting('internationalization/locale/fallback') + + ProjectSettings.set_setting('dialogic/translation/intern/save_mode', save_location_mode) + ProjectSettings.set_setting('dialogic/translation/intern/file_mode', translation_mode) + ProjectSettings.set_setting('dialogic/translation/intern/translation_folder', translation_folder_path) + + var current_timeline := _close_active_timeline() + + var csv_per_project: DialogicCsvFile = null + var per_project_csv_path := translation_folder_path.path_join(DEFAULT_TIMELINE_CSV_NAME) + + if translation_mode == TranslationModes.PER_PROJECT: + csv_per_project = DialogicCsvFile.new(per_project_csv_path, orig_locale, add_separator_lines) + + if (csv_per_project.is_new_file): + csv_data.new_timelines += 1 + else: + csv_data.updated_timelines += 1 + + # Iterate over all timelines. + # Create or update CSV files. + # Transform the timeline into translatable lines and collect into the CSV file. + for timeline_path: String in DialogicResourceUtil.list_resources_of_type('.dtl'): + var csv_file: DialogicCsvFile = csv_per_project + + # Swap the CSV file to the Per Timeline one. + if translation_mode == TranslationModes.PER_TIMELINE: + var per_timeline_path: String = timeline_path.trim_suffix('.dtl') + var path_parts := per_timeline_path.split("/") + var timeline_name: String = path_parts[-1] + + # Adjust the file path to the translation location mode. + if save_location_mode == SaveLocationModes.INSIDE_TRANSLATION_FOLDER: + var prefixed_timeline_name := "dialogic_" + timeline_name + per_timeline_path = translation_folder_path.path_join(prefixed_timeline_name) + + + per_timeline_path += '_translation.csv' + csv_file = DialogicCsvFile.new(per_timeline_path, orig_locale, false) + csv_data.new_timelines += 1 + + # Load and process timeline, turn events into resources. + var timeline: DialogicTimeline = load(timeline_path) + + if timeline.events.size() == 0: + print_rich("[color=yellow]Empty timeline, skipping: " + timeline_path + "[/color]") + continue + + timeline.process() + + # Collect timeline into CSV. + csv_file.collect_lines_from_timeline(timeline) + + # in case new translation_id's were added, we save the timeline again + timeline.set_meta("timeline_not_saved", true) + ResourceSaver.save(timeline, timeline_path) + + if translation_mode == TranslationModes.PER_TIMELINE: + csv_file.update_csv_file_on_disk() + + csv_data.new_events += csv_file.new_rows + csv_data.updated_events += csv_file.updated_rows + + _handle_glossary_translation( + csv_data, + save_location_mode, + translation_mode, + translation_folder_path, + orig_locale + ) + + _handle_character_names( + csv_data, + orig_locale, + translation_folder_path, + add_separator_lines + ) + + if translation_mode == TranslationModes.PER_PROJECT: + csv_per_project.update_csv_file_on_disk() + + _silently_open_timeline(current_timeline) + + # Trigger reimport. + find_parent('EditorView').plugin_reference.get_editor_interface().get_resource_filesystem().scan_sources() + + var status_message := "Events created {new_events} found {updated_events} + Names created {new_names} found {updated_names} + CSVs created {new_timelines} found {updated_timelines} + Glossary created {new_glossaries} found {updated_glossaries} + Entries created {new_glossary_entries} found {updated_glossary_entries}" + + var status_message_args := { + 'new_events': csv_data.new_events, + 'updated_events': csv_data.updated_events, + 'new_timelines': csv_data.new_timelines, + 'updated_timelines': csv_data.updated_timelines, + 'new_glossaries': csv_data.new_glossaries, + 'updated_glossaries': csv_data.updated_glossaries, + 'new_names': csv_data.new_names, + 'updated_names': csv_data.updated_names, + 'new_glossary_entries': csv_data.new_glossary_entries, + 'updated_glossary_entries': csv_data.updated_glossary_entries, + } + + %StatusMessage.text = status_message.format(status_message_args) + ProjectSettings.set_setting(_USED_LOCALES_SETTING, _unique_locales) + + +## Iterates over all character resource files and creates or updates CSV files +## that contain the translations for character properties. +## This will save each character resource file to disk. +func _handle_character_names( + csv_data: CsvUpdateData, + original_locale: String, + translation_folder_path: String, + add_separator_lines: bool) -> void: + var names_csv_path := translation_folder_path.path_join(DEFAULT_CHARACTER_CSV_NAME) + var character_name_csv: DialogicCsvFile = DialogicCsvFile.new(names_csv_path, + original_locale, + add_separator_lines + ) + + var all_characters := {} + + for character_path: String in DialogicResourceUtil.list_resources_of_type('.dch'): + var character: DialogicCharacter = load(character_path) + + if character._translation_id.is_empty(): + csv_data.new_names += 1 + + else: + csv_data.updated_names += 1 + + var translation_id := character.get_set_translation_id() + all_characters[translation_id] = character + + ResourceSaver.save(character) + + character_name_csv.collect_lines_from_characters(all_characters) + character_name_csv.update_csv_file_on_disk() + + +func collect_translations() -> void: + var translation_files := [] + var translation_mode: TranslationModes = ProjectSettings.get_setting('dialogic/translation/file_mode', TranslationModes.PER_PROJECT) + + if translation_mode == TranslationModes.PER_TIMELINE: + + for timeline_path: String in DialogicResourceUtil.list_resources_of_type('.translation'): + + for file: String in DialogicUtil.listdir(timeline_path.get_base_dir()): + file = timeline_path.get_base_dir().path_join(file) + + if file.ends_with('.translation'): + + if not file in translation_files: + translation_files.append(file) + + if translation_mode == TranslationModes.PER_PROJECT: + var translation_folder: String = ProjectSettings.get_setting('dialogic/translation/translation_folder', 'res://') + + for file: String in DialogicUtil.listdir(translation_folder): + file = translation_folder.path_join(file) + + if file.ends_with('.translation'): + + if not file in translation_files: + translation_files.append(file) + + var all_translation_files: Array = ProjectSettings.get_setting('internationalization/locale/translations', []) + var orig_file_amount := len(all_translation_files) + + # This array keeps track of valid translation file paths. + var found_file_paths := [] + var removed_translation_files := 0 + + for file_path: String in translation_files: + # If the file path is not valid, we must clean it up. + if ResourceLoader.exists(file_path): + found_file_paths.append(file_path) + else: + removed_translation_files += 1 + continue + + if not file_path in all_translation_files: + all_translation_files.append(file_path) + + var path_without_suffix := file_path.trim_suffix('.translation') + var locale_part := path_without_suffix.split(".")[-1] + _collect_locale(locale_part) + + + var valid_translation_files := PackedStringArray(all_translation_files) + ProjectSettings.set_setting('internationalization/locale/translations', valid_translation_files) + ProjectSettings.save() + + %StatusMessage.text = ( + "Added translation files: " + str(len(all_translation_files)-orig_file_amount) + + "\nRemoved translation files: " + str(removed_translation_files) + + "\nTotal translation files: " + str(len(all_translation_files))) + + +func _on_erase_translations_pressed() -> void: + %EraseConfirmationDialog.popup_centered() + + +## Deletes translation files generated by [param csv_name]. +## The [param csv_name] may not contain the file extension (.csv). +## +## Returns a vector, value 1 is amount of deleted translation files. +## Value +func delete_translations_files(translation_files: Array, csv_name: String) -> int: + var deleted_files := 0 + + for file_path: String in DialogicResourceUtil.list_resources_of_type('.translation'): + var base_name: String = file_path.get_basename() + var path_parts := base_name.split("/") + var translation_name: String = path_parts[-1] + + if translation_name.begins_with(csv_name): + + if OK == DirAccess.remove_absolute(file_path): + var project_translation_file_index := translation_files.find(file_path) + + if project_translation_file_index > -1: + translation_files.remove_at(project_translation_file_index) + + deleted_files += 1 + print_rich("[color=green]Deleted translation file: " + file_path + "[/color]") + else: + print_rich("[color=yellow]Failed to delete translation file: " + file_path + "[/color]") + + + return deleted_files + + +## Iterates over all timelines and deletes their CSVs and timeline +## translation IDs. +## Deletes the Per-Project CSV file and the character name CSV file. +func erase_translations() -> void: + var files: PackedStringArray = ProjectSettings.get_setting('internationalization/locale/translations', []) + var translation_files := Array(files) + ProjectSettings.set_setting(_USED_LOCALES_SETTING, []) + + var deleted_csv_files := 0 + var deleted_translation_files := 0 + var cleaned_timelines := 0 + var cleaned_characters := 0 + var cleaned_events := 0 + var cleaned_glossaries := 0 + + var current_timeline := _close_active_timeline() + + # Delete all Dialogic CSV files and their translation files. + for csv_path: String in DialogicResourceUtil.list_resources_of_type(".csv"): + var csv_path_parts: PackedStringArray = csv_path.split("/") + var csv_name: String = csv_path_parts[-1].trim_suffix(".csv") + + # Handle Dialogic CSVs only. + if not csv_name.begins_with("dialogic_"): + continue + + # Delete the CSV file. + if OK == DirAccess.remove_absolute(csv_path): + deleted_csv_files += 1 + print_rich("[color=green]Deleted CSV file: " + csv_path + "[/color]") + + deleted_translation_files += delete_translations_files(translation_files, csv_name) + else: + print_rich("[color=yellow]Failed to delete CSV file: " + csv_path + "[/color]") + + # Clean timelines. + for timeline_path: String in DialogicResourceUtil.list_resources_of_type(".dtl"): + + # Process the timeline. + var timeline: DialogicTimeline = load(timeline_path) + timeline.process() + cleaned_timelines += 1 + + # Remove event translation IDs. + for event: DialogicEvent in timeline.events: + + if event._translation_id and not event._translation_id.is_empty(): + event.remove_translation_id() + event.update_text_version() + cleaned_events += 1 + + if "character" in event: + # Remove character translation IDs. + var character: DialogicCharacter = event.character + + if character != null and not character._translation_id.is_empty(): + character.remove_translation_id() + cleaned_characters += 1 + + timeline.set_meta("timeline_not_saved", true) + ResourceSaver.save(timeline, timeline_path) + + _erase_glossary_translation_ids() + _erase_character_name_translation_ids() + + ProjectSettings.set_setting('dialogic/translation/id_counter', 16) + ProjectSettings.set_setting('internationalization/locale/translations', PackedStringArray(translation_files)) + ProjectSettings.save() + + find_parent('EditorView').plugin_reference.get_editor_interface().get_resource_filesystem().scan_sources() + + var status_message := "Timelines cleaned {cleaned_timelines} + Events cleaned {cleaned_events} + Characters cleaned {cleaned_characters} + Glossaries cleaned {cleaned_glossaries} + + CSVs erased {erased_csv_files} + Translations erased {erased_translation_files}" + + var status_message_args := { + 'cleaned_timelines': cleaned_timelines, + 'cleaned_characters': cleaned_characters, + 'cleaned_events': cleaned_events, + 'cleaned_glossaries': cleaned_glossaries, + 'erased_csv_files': deleted_csv_files, + 'erased_translation_files': deleted_translation_files, + } + + _silently_open_timeline(current_timeline) + + # Trigger reimport. + find_parent('EditorView').plugin_reference.get_editor_interface().get_resource_filesystem().scan_sources() + + # Clear the internal settings. + ProjectSettings.clear('dialogic/translation/intern/save_mode') + ProjectSettings.clear('dialogic/translation/intern/file_mode') + ProjectSettings.clear('dialogic/translation/intern/translation_folder') + + _verify_translation_file() + %StatusMessage.text = status_message.format(status_message_args) + + +func _erase_glossary_translation_ids() -> void: + # Clean glossary. + var glossary_paths: Array = ProjectSettings.get_setting('dialogic/glossary/glossary_files', []) + + for glossary_path: String in glossary_paths: + var glossary: DialogicGlossary = load(glossary_path) + glossary.remove_translation_id() + glossary.remove_entry_translation_ids() + glossary.clear_translation_keys() + ResourceSaver.save(glossary, glossary_path) + print_rich("[color=green]Cleaned up glossary file: " + glossary_path + "[/color]") + + +func _erase_character_name_translation_ids() -> void: + for character_path: String in DialogicResourceUtil.list_resources_of_type('.dch'): + var character: DialogicCharacter = load(character_path) + + character.remove_translation_id() + ResourceSaver.save(character) + + +## Closes the current timeline in the Dialogic Editor and returns the timeline +## as a resource. +## If no timeline has been opened, returns null. +func _close_active_timeline() -> Resource: + var timeline_node: DialogicEditor = settings_editor.editors_manager.editors['Timeline']['node'] + # We will close this timeline to ensure it will properly update. + # By saving this reference, we can open it again. + var current_timeline := timeline_node.current_resource + # Clean the current editor, this will also close the timeline. + settings_editor.editors_manager.clear_editor(timeline_node) + + return current_timeline + + +## Opens the timeline resource into the Dialogic Editor. +## If the timeline is null, does nothing. +func _silently_open_timeline(timeline_to_open: Resource) -> void: + if timeline_to_open != null: + settings_editor.editors_manager.edit_resource(timeline_to_open, true, true) + + +## Checks [param locale] for unique locales that have not been added +## to the [_unique_locales] array yet. +func _collect_locale(locale: String) -> void: + if _unique_locales.has(locale): + return + + _unique_locales.append(locale) diff --git a/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_translation.tscn b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_translation.tscn new file mode 100644 index 0000000..61fca18 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Settings/settings_translation.tscn @@ -0,0 +1,368 @@ +[gd_scene load_steps=7 format=3 uid="uid://chpb1mj03xjxv"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/Settings/settings_translation.gd" id="1_dvmyi"] +[ext_resource type="PackedScene" uid="uid://dbpkta2tjsqim" path="res://addons/dialogic/Editor/Common/hint_tooltip_icon.tscn" id="2_k2lou"] +[ext_resource type="PackedScene" uid="uid://dpwhshre1n4t6" path="res://addons/dialogic/Editor/Events/Fields/field_options_dynamic.tscn" id="3_dq4j2"] +[ext_resource type="PackedScene" uid="uid://7mvxuaulctcq" path="res://addons/dialogic/Editor/Events/Fields/field_file.tscn" id="4_kvsma"] + +[sub_resource type="Image" id="Image_g2hic"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_xbph7"] +image = SubResource("Image_g2hic") + +[node name="Translations" type="VBoxContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -101.0 +offset_bottom = 102.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_dvmyi") + +[node name="HBox" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Basics" type="VBoxContainer" parent="HBox"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="Title" type="Label" parent="HBox/Basics"] +layout_mode = 2 +theme_type_variation = &"DialogicSettingsSection" +text = "Basics" + +[node name="VBox4" type="HBoxContainer" parent="HBox/Basics"] +layout_mode = 2 + +[node name="Label" type="Label" parent="HBox/Basics/VBox4"] +layout_mode = 2 +text = "Enable translations" + +[node name="TransEnabled" type="CheckBox" parent="HBox/Basics/VBox4"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="HSeparator5" type="VSeparator" parent="HBox"] +layout_mode = 2 + +[node name="Testing" type="VBoxContainer" parent="HBox"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="Title2" type="Label" parent="HBox/Testing"] +layout_mode = 2 +theme_type_variation = &"DialogicSettingsSection" +text = "Testing" + +[node name="VBox3" type="HBoxContainer" parent="HBox/Testing"] +layout_mode = 2 + +[node name="Label3" type="Label" parent="HBox/Testing/VBox3"] +layout_mode = 2 +text = "Testing locale" + +[node name="HintTooltip8" parent="HBox/Testing/VBox3" instance=ExtResource("2_k2lou")] +layout_mode = 2 +tooltip_text = "Change this locale to test your game in a different language (only in-editor). +Equivalent of the testing local project setting. " +texture = SubResource("ImageTexture_xbph7") +hint_text = "Change this locale to test your game in a different language (only in-editor). +Equivalent of the testing local project setting. + +Update dropdown list via \"Collect Translation\"." + +[node name="TestingLocale" parent="HBox/Testing/VBox3" instance=ExtResource("3_dq4j2")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="HSeparator4" type="HSeparator" parent="."] +layout_mode = 2 + +[node name="TranslationSettings" type="HBoxContainer" parent="."] +unique_name_in_owner = true +layout_mode = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="TranslationSettings"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="SettingsTitle" type="Label" parent="TranslationSettings/VBoxContainer"] +layout_mode = 2 +theme_type_variation = &"DialogicSettingsSection" +text = "Settings" + +[node name="Grid" type="GridContainer" parent="TranslationSettings/VBoxContainer"] +layout_mode = 2 +columns = 2 + +[node name="VBox" type="HBoxContainer" parent="TranslationSettings/VBoxContainer/Grid"] +layout_mode = 2 + +[node name="Label3" type="Label" parent="TranslationSettings/VBoxContainer/Grid/VBox"] +layout_mode = 2 +text = "Default locale" + +[node name="HintTooltip" parent="TranslationSettings/VBoxContainer/Grid/VBox" instance=ExtResource("2_k2lou")] +layout_mode = 2 +tooltip_text = "The locale of the language your timelines are written in." +texture = SubResource("ImageTexture_xbph7") +hint_text = "The locale of the language your timelines are written in." + +[node name="OrigLocale" parent="TranslationSettings/VBoxContainer/Grid" instance=ExtResource("3_dq4j2")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="TransFile" type="HBoxContainer" parent="TranslationSettings/VBoxContainer/Grid"] +layout_mode = 2 + +[node name="Label" type="Label" parent="TranslationSettings/VBoxContainer/Grid/TransFile"] +layout_mode = 2 +text = "Translation folder" + +[node name="HintTooltip3" parent="TranslationSettings/VBoxContainer/Grid/TransFile" instance=ExtResource("2_k2lou")] +layout_mode = 2 +tooltip_text = "Choose a folder to let Dialogic save CSV files in. +Also used when saving \"Inside Translation Folder\"" +texture = SubResource("ImageTexture_xbph7") +hint_text = "Choose a folder to let Dialogic save CSV files in. +Also used when saving \"Inside Translation Folder\"" + +[node name="TransFolderPicker" parent="TranslationSettings/VBoxContainer/Grid" instance=ExtResource("4_kvsma")] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +file_mode = 2 + +[node name="VBox2" type="HBoxContainer" parent="TranslationSettings/VBoxContainer/Grid"] +layout_mode = 2 + +[node name="OutputModeLabel" type="Label" parent="TranslationSettings/VBoxContainer/Grid/VBox2"] +layout_mode = 2 +text = "Output mode" + +[node name="OutputModeTooltip" parent="TranslationSettings/VBoxContainer/Grid/VBox2" instance=ExtResource("2_k2lou")] +layout_mode = 2 +tooltip_text = "Decides how many CSV files will be created. + +• \"Per Type\": Uses one CSV file for each type of resource: Timelines, characters, and glossaries. +For example, 10 timelines will be combined into 1 CSV file. + +• \"Per File\": Uses one CSV file for each resource file. +For example, 10 timelines will result in 10 CSV files. + +The \"Per File\" option utilises \"Output location\", in contrast, the \"Per Type\" will always use the Translation folder." +texture = SubResource("ImageTexture_xbph7") +hint_text = "Decides how many CSV files will be created. + +• \"Per Type\": Uses one CSV file for each type of resource: Timelines, characters, and glossaries. +For example, 10 timelines will be combined into 1 CSV file. + +• \"Per File\": Uses one CSV file for each resource file. +For example, 10 timelines will result in 10 CSV files. + +The \"Per File\" option utilises \"Output location\", in contrast, the \"Per Type\" will always use the Translation folder." + +[node name="TransMode" type="OptionButton" parent="TranslationSettings/VBoxContainer/Grid"] +unique_name_in_owner = true +layout_mode = 2 +item_count = 2 +selected = 0 +popup/item_0/text = "Per Type" +popup/item_0/id = 0 +popup/item_1/text = "Per File" +popup/item_1/id = 1 + +[node name="OutputLocation" type="HBoxContainer" parent="TranslationSettings/VBoxContainer/Grid"] +layout_mode = 2 + +[node name="OutputLocationLabel" type="Label" parent="TranslationSettings/VBoxContainer/Grid/OutputLocation"] +layout_mode = 2 +text = "Output location" + +[node name="OutputLocationTooltip" parent="TranslationSettings/VBoxContainer/Grid/OutputLocation" instance=ExtResource("2_k2lou")] +layout_mode = 2 +tooltip_text = "Decides where to save the generated CSV files. + +• \"Inside Translation Folder\": Uses the \"Translation folder\". + +• \"Next To Timeline\": Places them in the resource type's folder. + +This button requires the \"Per File\" Output mode. +A resource type can be: Timelines, characters, and glossaries." +texture = SubResource("ImageTexture_xbph7") +hint_text = "Decides where to save the generated CSV files. + +• \"Inside Translation Folder\": Uses the \"Translation folder\". + +• \"Next To Timeline\": Places them in the resource type's folder. + +This button requires the \"Per File\" Output mode. +A resource type can be: Timelines, characters, and glossaries." + +[node name="SaveLocationMode" type="OptionButton" parent="TranslationSettings/VBoxContainer/Grid"] +unique_name_in_owner = true +layout_mode = 2 +disabled = true +item_count = 2 +selected = 0 +popup/item_0/text = "Inside Translation Folder" +popup/item_0/id = 0 +popup/item_1/text = "Next to File" +popup/item_1/id = 1 + +[node name="Control" type="Control" parent="TranslationSettings/VBoxContainer/Grid"] +visible = false +layout_mode = 2 + +[node name="AddSeparatorHBox" type="HBoxContainer" parent="TranslationSettings/VBoxContainer/Grid"] +layout_mode = 2 + +[node name="AddSeparatorLabel" type="Label" parent="TranslationSettings/VBoxContainer/Grid/AddSeparatorHBox"] +layout_mode = 2 +text = "Add Separator Lines" + +[node name="HintAddSeparatorEnabled" parent="TranslationSettings/VBoxContainer/Grid/AddSeparatorHBox" instance=ExtResource("2_k2lou")] +layout_mode = 2 +tooltip_text = "Adds an empty line into per-project CSVs to differentiate between sections. + +For example, when a new glossary item or timeline starts, an empty line will be added." +texture = SubResource("ImageTexture_xbph7") +hint_text = "Adds an empty line into per-project CSVs to differentiate between sections. + +For example, when a new glossary item or timeline starts, an empty line will be added." + +[node name="AddSeparatorEnabled" type="CheckBox" parent="TranslationSettings/VBoxContainer/Grid"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="HSeparator6" type="VSeparator" parent="TranslationSettings"] +layout_mode = 2 + +[node name="VBoxContainer2" type="VBoxContainer" parent="TranslationSettings"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="HBoxContainer" type="HBoxContainer" parent="TranslationSettings/VBoxContainer2"] +layout_mode = 2 + +[node name="Title3" type="Label" parent="TranslationSettings/VBoxContainer2/HBoxContainer"] +layout_mode = 2 +theme_type_variation = &"DialogicSettingsSection" +text = "Actions" + +[node name="Actions" type="GridContainer" parent="TranslationSettings/VBoxContainer2"] +layout_mode = 2 +columns = 2 + +[node name="UpdateCsvFiles" type="Button" parent="TranslationSettings/VBoxContainer2/Actions"] +unique_name_in_owner = true +layout_mode = 2 +disabled = true +text = "Update CSV files" +icon = SubResource("ImageTexture_xbph7") + +[node name="HintTooltip5" parent="TranslationSettings/VBoxContainer2/Actions" instance=ExtResource("2_k2lou")] +layout_mode = 2 +tooltip_text = "This button will scan all timelines and generate or update their CSV files. + +A Dialogic CSV file will be prefixed with \"dialogic_\". + +This action will be disabled if the \"Translation folder\" is missing or has an invalid path." +texture = SubResource("ImageTexture_xbph7") +hint_text = "This button will scan all timelines and generate or update their CSV files. + +A Dialogic CSV file will be prefixed with \"dialogic_\". + +This action will be disabled if the \"Translation folder\" is missing or has an invalid path." + +[node name="CollectTranslations" type="Button" parent="TranslationSettings/VBoxContainer2/Actions"] +unique_name_in_owner = true +layout_mode = 2 +text = "Collect translations" +icon = SubResource("ImageTexture_xbph7") + +[node name="HintTooltip6" parent="TranslationSettings/VBoxContainer2/Actions" instance=ExtResource("2_k2lou")] +layout_mode = 2 +tooltip_text = "Godot imports CSV files as \".translation\" files. +This buttons adds them to \"Project Settings -> Localization\". +" +texture = SubResource("ImageTexture_xbph7") +hint_text = "Godot imports CSV files as \".translation\" files. +This buttons adds them to \"Project Settings -> Localization\". +" + +[node name="AspectRatioContainer2" type="AspectRatioContainer" parent="TranslationSettings/VBoxContainer2/Actions"] +custom_minimum_size = Vector2(0, 31) +layout_mode = 2 + +[node name="AspectRatioContainer" type="AspectRatioContainer" parent="TranslationSettings/VBoxContainer2/Actions"] +custom_minimum_size = Vector2(0, 31) +layout_mode = 2 + +[node name="TransRemove" type="Button" parent="TranslationSettings/VBoxContainer2/Actions"] +unique_name_in_owner = true +layout_mode = 2 +text = "Remove translations" +icon = SubResource("ImageTexture_xbph7") + +[node name="HintTooltip7" parent="TranslationSettings/VBoxContainer2/Actions" instance=ExtResource("2_k2lou")] +layout_mode = 2 +tooltip_text = "Be very careful with this button! + +It will try to delete any \".csv\" and \".translation\" files that are related to Dialogic. +CSV and translation files prefixed with \"dialogic_\" are treated as Dialogic-related. + +Removes translation IDs (eg. #id:33) from timelines and characters." +texture = SubResource("ImageTexture_xbph7") +hint_text = "Be very careful with this button! + +It will try to delete any \".csv\" and \".translation\" files that are related to Dialogic. +CSV and translation files prefixed with \"dialogic_\" are treated as Dialogic-related. + +Removes translation IDs (eg. #id:33) from timelines and characters." + +[node name="StatusMessage" type="Label" parent="TranslationSettings/VBoxContainer2"] +unique_name_in_owner = true +layout_mode = 2 +text = "⛔ Requires valid translation folder to translate character names and the project CSV file." +autowrap_mode = 3 + +[node name="UpdateConfirmationDialog" type="ConfirmationDialog" parent="."] +unique_name_in_owner = true +title = "Please Decide..." +size = Vector2i(490, 200) +ok_button_text = "Delete old & Generate new" +dialog_text = "You have previously generated CSVs and translation files with different Translation Settings! + +Please consider to delete the old CSVs and then generate new changes." +dialog_autowrap = true + +[node name="EraseConfirmationDialog" type="ConfirmationDialog" parent="."] +unique_name_in_owner = true +position = Vector2i(0, 36) +size = Vector2i(500, 280) +min_size = Vector2i(300, 70) +ok_button_text = "DELETE ALL" +dialog_text = "You are about to: +- Delete all CSVs prefixed with \"dialogic_\". +- Delete the related CSV import files. +- Delete the related translation files. +- Remove translation IDs from timelines and characters. +- Remove all \"dialogic\" prefixed translations from \"Project Settings -> Localization\". +- Remove the \"_translation_keys\" and \"entries\" starting with \"Glossary/\"." +dialog_autowrap = true + +[node name="AspectRatioContainer" type="AspectRatioContainer" parent="."] +custom_minimum_size = Vector2(0, 31) +layout_mode = 2 + +[connection signal="confirmed" from="UpdateConfirmationDialog" to="." method="_delete_and_update"] +[connection signal="confirmed" from="EraseConfirmationDialog" to="." method="erase_translations"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Theme/MainTheme.tres b/addons/dialogic-main/addons/dialogic/Editor/Theme/MainTheme.tres new file mode 100644 index 0000000..bd77e0f --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Theme/MainTheme.tres @@ -0,0 +1,3 @@ +[gd_resource type="Theme" format=3 uid="uid://cqst728xxipcw"] + +[resource] diff --git a/addons/dialogic-main/addons/dialogic/Editor/Theme/PickerTheme.tres b/addons/dialogic-main/addons/dialogic/Editor/Theme/PickerTheme.tres new file mode 100644 index 0000000..36b1955 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/Theme/PickerTheme.tres @@ -0,0 +1,7 @@ +[gd_resource type="Theme" format=2] + +[resource] +Button/colors/font_color = Color( 1, 1, 1, 1 ) +Button/colors/font_color_disabled = Color( 0.901961, 0.901961, 0.901961, 0.2 ) +Button/colors/font_color_hover = Color( 0.870588, 0.870588, 0.870588, 1 ) +Button/colors/font_color_pressed = Color( 1, 1, 1, 1 ) diff --git a/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/CodeCompletionHelper.gd b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/CodeCompletionHelper.gd new file mode 100644 index 0000000..8a12cd5 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/CodeCompletionHelper.gd @@ -0,0 +1,324 @@ +@tool +extends Node + +enum Modes {TEXT_EVENT_ONLY, FULL_HIGHLIGHTING} + +var syntax_highlighter: SyntaxHighlighter = load("res://addons/dialogic/Editor/TimelineEditor/TextEditor/syntax_highlighter.gd").new() +var text_syntax_highlighter: SyntaxHighlighter = load("res://addons/dialogic/Editor/TimelineEditor/TextEditor/syntax_highlighter.gd").new() + + +# These RegEx's are used to deduce information from the current line for auto-completion + +# To find the currently typed word and the symbol before +var completion_word_regex := RegEx.new() +# To find the shortcode of the current shortcode event (basically the type) +var completion_shortcode_getter_regex := RegEx.new() +# To find the parameter name of the current if typing a value +var completion_shortcode_param_getter_regex := RegEx.new() +# To find the value of a paramater that is being typed +var completion_shortcode_value_regex := RegEx.new() + +# Stores references to all shortcode events for parameter and value suggestions +var shortcode_events := {} +var custom_syntax_events := [] +var text_event: DialogicTextEvent = null + +func _ready() -> void: + # Compile RegEx's + completion_word_regex.compile("(?(\\W)|^)(?\\w*)\\x{FFFF}") + completion_shortcode_getter_regex.compile("\\[(?\\w*)") + completion_shortcode_param_getter_regex.compile("(?\\w*)\\W*=\\s*\"?(\\w|\\s)*"+String.chr(0xFFFF)) + completion_shortcode_value_regex.compile(r'(\[|\s)[^\[\s=]*="(?[^"$]*)'+String.chr(0xFFFF)) + + text_syntax_highlighter.mode = text_syntax_highlighter.Modes.TEXT_EVENT_ONLY + +#region AUTO COMPLETION +################################################################################ + +# Helper that gets the current line with a special character where the caret is +func get_code_completion_line(text:CodeEdit) -> String: + return text.get_line(text.get_caret_line()).insert(text.get_caret_column(), String.chr(0xFFFF)).strip_edges() + + +# Helper that gets the currently typed word +func get_code_completion_word(text:CodeEdit) -> String: + var result := completion_word_regex.search(get_code_completion_line(text)) + return result.get_string('word') if result else "" + +# Helper that gets the currently typed parameter +func get_code_completion_parameter_value(text:CodeEdit) -> String: + var result := completion_shortcode_value_regex.search(get_code_completion_line(text)) + return result.get_string('value') if result else "" + + +# Helper that gets the symbol before the current word +func get_code_completion_prev_symbol(text:CodeEdit) -> String: + var result := completion_word_regex.search(get_code_completion_line(text)) + return result.get_string('s') if result else "" + + +func get_line_untill_caret(line:String) -> String: + return line.substr(0, line.find(String.chr(0xFFFF))) + + +# Called if something was typed +# Adds all kinds of options depending on the +# content of the current line, the last word and the symbol that came before +# Triggers opening of the popup +func request_code_completion(force:bool, text:CodeEdit, mode:=Modes.FULL_HIGHLIGHTING) -> void: + ## TODO remove this once https://github.com/godotengine/godot/issues/38560 is fixed + if mode != Modes.FULL_HIGHLIGHTING: + return + + # make sure shortcode event references are loaded + if mode == Modes.FULL_HIGHLIGHTING: + var hidden_events: Array = DialogicUtil.get_editor_setting('hidden_event_buttons', []) + if shortcode_events.is_empty(): + for event in DialogicResourceUtil.get_event_cache(): + if event.get_shortcode() != 'default_shortcode': + shortcode_events[event.get_shortcode()] = event + + else: + custom_syntax_events.append(event) + if event.event_name in hidden_events: + event.set_meta('hidden', true) + if event is DialogicTextEvent: + text_event = event + # this is done to force-load the text effects regex which is used below + event.load_text_effects() + + # fill helpers + var line := get_code_completion_line(text) + var word := get_code_completion_word(text) + var symbol := get_code_completion_prev_symbol(text) + var line_part := get_line_untill_caret(line) + + ## Note on use of KIND types for options. + # These types are mostly useless for us. + # However I decidede to assign some special cases for them: + # - KIND_PLAIN_TEXT is only shown if the beginnging of the option is already typed + # !word.is_empty() and option.begins_with(word) + # - KIND_CLASS is only shown if anything from the options is already typed + # !word.is_empty() and word in option + # - KIND_CONSTANT is shown and checked against the beginning + # option.begins_with(word) + # - KIND_MEMBER is shown and searched completely + # word in option + + ## Note on VALUE key + # The value key is used to store a potential closing string for the completion. + # The completion will check if the string is already present and add it otherwise. + + # Shortcode event suggestions + if mode == Modes.FULL_HIGHLIGHTING and syntax_highlighter.line_is_shortcode_event(text.get_caret_line()): + if symbol == '[': + # suggest shortcodes if a shortcode event has just begun + var shortcodes := shortcode_events.keys() + shortcodes.sort() + for shortcode in shortcodes: + if shortcode_events[shortcode].get_meta('hidden', false): + continue + if shortcode_events[shortcode].get_shortcode_parameters().is_empty(): + text.add_code_completion_option(CodeEdit.KIND_MEMBER, shortcode, shortcode, shortcode_events[shortcode].event_color.lerp(syntax_highlighter.normal_color, 0.3), shortcode_events[shortcode]._get_icon()) + else: + text.add_code_completion_option(CodeEdit.KIND_MEMBER, shortcode, shortcode+" ", shortcode_events[shortcode].event_color.lerp(syntax_highlighter.normal_color, 0.3), shortcode_events[shortcode]._get_icon()) + else: + var full_event_text: String = syntax_highlighter.get_full_event(text.get_caret_line()) + var current_shortcode := completion_shortcode_getter_regex.search(full_event_text) + if !current_shortcode: + text.update_code_completion_options(false) + return + + var code := current_shortcode.get_string('code') + if !code in shortcode_events.keys(): + text.update_code_completion_options(false) + return + + # suggest parameters + if symbol == ' ' and line.count('"')%2 == 0: + var parameters: Array = shortcode_events[code].get_shortcode_parameters().keys() + for param in parameters: + if !param+'=' in full_event_text: + text.add_code_completion_option(CodeEdit.KIND_MEMBER, param, param+'="' , shortcode_events[code].event_color.lerp(syntax_highlighter.normal_color, 0.3), text.get_theme_icon("MemberProperty", "EditorIcons")) + + # suggest values + elif symbol == '=' or symbol == '"': + var current_parameter_gex := completion_shortcode_param_getter_regex.search(line) + if !current_parameter_gex: + text.update_code_completion_options(false) + return + + var current_parameter := current_parameter_gex.get_string('param') + if !shortcode_events[code].get_shortcode_parameters().has(current_parameter): + text.update_code_completion_options(false) + return + if !shortcode_events[code].get_shortcode_parameters()[current_parameter].has('suggestions'): + if typeof(shortcode_events[code].get_shortcode_parameters()[current_parameter].default) == TYPE_BOOL: + suggest_bool(text, shortcode_events[code].event_color.lerp(syntax_highlighter.normal_color, 0.3)) + elif len(word) > 0: + text.add_code_completion_option(CodeEdit.KIND_VARIABLE, word, word, shortcode_events[code].event_color.lerp(syntax_highlighter.normal_color, 0.3), text.get_theme_icon("GuiScrollArrowRight", "EditorIcons"), '" ') + text.update_code_completion_options(true) + return + + var suggestions: Dictionary = shortcode_events[code].get_shortcode_parameters()[current_parameter]['suggestions'].call() + suggest_custom_suggestions(suggestions, text, shortcode_events[code].event_color.lerp(syntax_highlighter.normal_color, 0.3)) + + # Force update and showing of the popup + text.update_code_completion_options(true) + return + + + for event in custom_syntax_events: + if mode == Modes.TEXT_EVENT_ONLY and !event is DialogicTextEvent: + continue + + if ! ' ' in line_part: + event._get_start_code_completion(self, text) + + if event.is_valid_event(line): + event._get_code_completion(self, text, line, word, symbol) + break + + # Force update and showing of the popup + text.update_code_completion_options(true) + + + +# Helper that adds all characters as options +func suggest_characters(text:CodeEdit, type := CodeEdit.KIND_MEMBER, text_event_start:=false) -> void: + for character in DialogicResourceUtil.get_character_directory(): + var result: String = character + if " " in character: + result = '"'+character+'"' + if text_event_start and load(DialogicResourceUtil.get_character_directory()[character]).portraits.is_empty(): + result += ':' + text.add_code_completion_option(type, character, result, syntax_highlighter.character_name_color, load("res://addons/dialogic/Editor/Images/Resources/character.svg")) + + +# Helper that adds all timelines as options +func suggest_timelines(text:CodeEdit, type := CodeEdit.KIND_MEMBER, color:=Color()) -> void: + for timeline in DialogicResourceUtil.get_timeline_directory(): + text.add_code_completion_option(type, timeline, timeline+'/', color, text.get_theme_icon("TripleBar", "EditorIcons")) + + +func suggest_labels(text:CodeEdit, timeline:String='', end:='', color:=Color()) -> void: + if timeline in DialogicResourceUtil.get_label_cache(): + for i in DialogicResourceUtil.get_label_cache()[timeline]: + text.add_code_completion_option(CodeEdit.KIND_MEMBER, i, i+end, color, load("res://addons/dialogic/Modules/Jump/icon_label.png")) + + +# Helper that adds all portraits of a given character as options +func suggest_portraits(text:CodeEdit, character_name:String, end_check:=')') -> void: + if !character_name in DialogicResourceUtil.get_character_directory(): + return + var character_resource: DialogicCharacter = load(DialogicResourceUtil.get_character_directory()[character_name]) + for portrait in character_resource.portraits: + text.add_code_completion_option(CodeEdit.KIND_MEMBER, portrait, portrait, syntax_highlighter.character_portrait_color, load("res://addons/dialogic/Editor/Images/Resources/character.svg"), end_check) + if character_resource.portraits.is_empty(): + text.add_code_completion_option(CodeEdit.KIND_MEMBER, 'Has no portraits!', '', syntax_highlighter.character_portrait_color, load("res://addons/dialogic/Editor/Images/Pieces/warning.svg")) + + +# Helper that adds all variable paths as options +func suggest_variables(text:CodeEdit): + for variable in DialogicUtil.list_variables(ProjectSettings.get_setting('dialogic/variables')): + text.add_code_completion_option(CodeEdit.KIND_MEMBER, variable, variable, syntax_highlighter.variable_color, text.get_theme_icon("MemberProperty", "EditorIcons"), '}') + + +# Helper that adds true and false as options +func suggest_bool(text:CodeEdit, color:Color): + text.add_code_completion_option(CodeEdit.KIND_VARIABLE, 'true', 'true', color, text.get_theme_icon("GuiChecked", "EditorIcons"), '" ') + text.add_code_completion_option(CodeEdit.KIND_VARIABLE, 'false', 'false', color, text.get_theme_icon("GuiUnchecked", "EditorIcons"), '" ') + + +func suggest_custom_suggestions(suggestions:Dictionary, text:CodeEdit, color:Color) -> void: + for key in suggestions.keys(): + if suggestions[key].has('text_alt'): + text.add_code_completion_option(CodeEdit.KIND_VARIABLE, key, suggestions[key].text_alt[0], color, suggestions[key].get('icon', null), '" ') + else: + text.add_code_completion_option(CodeEdit.KIND_VARIABLE, key, str(suggestions[key].value), color, suggestions[key].get('icon', null), '" ') + + +# Filters the list of all possible options, depending on what was typed +# Purpose of the different Kinds is explained in [_request_code_completion] +func filter_code_completion_candidates(candidates:Array, text:CodeEdit) -> Array: + var valid_candidates := [] + var current_word := get_code_completion_word(text) + for candidate in candidates: + if candidate.kind == text.KIND_PLAIN_TEXT: + if !current_word.is_empty() and candidate.insert_text.begins_with(current_word): + valid_candidates.append(candidate) + elif candidate.kind == text.KIND_MEMBER: + if current_word.is_empty() or current_word.to_lower() in candidate.insert_text.to_lower(): + valid_candidates.append(candidate) + elif candidate.kind == text.KIND_VARIABLE: + var current_param_value := get_code_completion_parameter_value(text) + if current_param_value.is_empty() or current_param_value.to_lower() in candidate.insert_text.to_lower(): + valid_candidates.append(candidate) + elif candidate.kind == text.KIND_CONSTANT: + if current_word.is_empty() or candidate.insert_text.begins_with(current_word): + valid_candidates.append(candidate) + elif candidate.kind == text.KIND_CLASS: + if !current_word.is_empty() and current_word.to_lower() in candidate.insert_text.to_lower(): + valid_candidates.append(candidate) + return valid_candidates + + +# Called when code completion was activated +# Inserts the selected item +func confirm_code_completion(replace:bool, text:CodeEdit) -> void: + # Note: I decided to ALWAYS use replace mode, as dialogic is supposed to be beginner friendly + + var code_completion := text.get_code_completion_option(text.get_code_completion_selected_index()) + + var word := get_code_completion_word(text) + if code_completion.kind == CodeEdit.KIND_VARIABLE: + word = get_code_completion_parameter_value(text) + + text.remove_text(text.get_caret_line(), text.get_caret_column()-len(word), text.get_caret_line(), text.get_caret_column()) + + # Something has changed between 4.2 and 4.3 + # Probably about how carets are reset when text is removed or idk. + # To keep compatibility with 4.2 for at least a while this should do the trick: + # TODO: Remove once compatibility for 4.2 is dropped. + if Engine.get_version_info().hex >= 0x040300: + text.set_caret_column(text.get_caret_column()) + else: + text.set_caret_column(text.get_caret_column()-len(word)) + + text.insert_text_at_caret(code_completion.insert_text) + + if code_completion.has('default_value') and typeof(code_completion['default_value']) == TYPE_STRING: + var next_letter := text.get_line(text.get_caret_line()).substr(text.get_caret_column(), len(code_completion['default_value'])) + if next_letter == code_completion['default_value'] or next_letter[0] == code_completion['default_value'][0]: + text.set_caret_column(text.get_caret_column()+1) + else: + text.insert_text_at_caret(code_completion['default_value']) + + +#endregion + +#region SYMBOL CLICKING +################################################################################ + +# Performs an action (like opening a link) when a valid symbol was clicked +func symbol_lookup(symbol:String, line:int, column:int) -> void: + if symbol in shortcode_events.keys(): + if !shortcode_events[symbol].help_page_path.is_empty(): + OS.shell_open(shortcode_events[symbol].help_page_path) + if symbol in DialogicResourceUtil.get_character_directory(): + EditorInterface.edit_resource(DialogicResourceUtil.get_resource_from_identifier(symbol, 'dch')) + if symbol in DialogicResourceUtil.get_timeline_directory(): + EditorInterface.edit_resource(DialogicResourceUtil.get_resource_from_identifier(symbol, 'dtl')) + + +# Called to test if a symbol can be clicked +func symbol_validate(symbol:String, text:CodeEdit) -> void: + if symbol in shortcode_events.keys(): + if !shortcode_events[symbol].help_page_path.is_empty(): + text.set_symbol_lookup_word_as_valid(true) + if symbol in DialogicResourceUtil.get_character_directory(): + text.set_symbol_lookup_word_as_valid(true) + if symbol in DialogicResourceUtil.get_timeline_directory(): + text.set_symbol_lookup_word_as_valid(true) + +#endregion diff --git a/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/syntax_highlighter.gd b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/syntax_highlighter.gd new file mode 100644 index 0000000..400dbe2 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/syntax_highlighter.gd @@ -0,0 +1,201 @@ +@tool +extends SyntaxHighlighter + +## Syntax highlighter for the dialogic text timeline editor and text events in the visual editor. + +enum Modes {TEXT_EVENT_ONLY, FULL_HIGHLIGHTING} +var mode := Modes.FULL_HIGHLIGHTING + + +## RegEx's +var word_regex := RegEx.new() +var region_regex := RegEx.new() +var number_regex := RegEx.create_from_string(r"(\d|\.)+") +var shortcode_regex := RegEx.create_from_string(r"\W*\[(?\w*)(?[^\]]*)?") +var shortcode_param_regex := RegEx.create_from_string(r'((?[^\s=]*)\s*=\s*"(?([^=]|\\=)*)(? void: + update_colors() + DialogicUtil.get_dialogic_plugin().get_editor_interface().get_base_control().theme_changed.connect(update_colors) + + +func update_colors() -> void: + if not DialogicUtil.get_dialogic_plugin(): + return + var editor_settings: EditorSettings = DialogicUtil.get_dialogic_plugin().get_editor_interface().get_editor_settings() + normal_color = editor_settings.get('text_editor/theme/highlighting/text_color') + translation_id_color = editor_settings.get('text_editor/theme/highlighting/comment_color') + + code_flow_color = editor_settings.get("text_editor/theme/highlighting/control_flow_keyword_color") + boolean_operator_color = code_flow_color.lightened(0.5) + variable_color = editor_settings.get('text_editor/theme/highlighting/engine_type_color') + string_color = editor_settings.get('text_editor/theme/highlighting/string_color') + character_name_color = editor_settings.get('text_editor/theme/highlighting/symbol_color').lerp(normal_color, 0.3) + character_portrait_color = character_name_color.lerp(normal_color, 0.5) + + +func _get_line_syntax_highlighting(line:int) -> Dictionary: + var str_line := get_text_edit().get_line(line) + + if shortcode_events.is_empty(): + for event in DialogicResourceUtil.get_event_cache(): + if event.get_shortcode() != 'default_shortcode': + shortcode_events[event.get_shortcode()] = event + else: + custom_syntax_events.append(event) + if event is DialogicTextEvent: + text_event = event + text_event.load_text_effects() + + var dict := {} + dict[0] = {'color':normal_color} + + dict = color_translation_id(dict, str_line) + + if mode == Modes.FULL_HIGHLIGHTING: + if line_is_shortcode_event(line): + var full_event := get_full_event(line) + var result := shortcode_regex.search(full_event) + if result: + if result.get_string('id') in shortcode_events: + if full_event.begins_with(str_line): + dict[result.get_start('id')] = {"color":shortcode_events[result.get_string('id')].event_color.lerp(normal_color, 0.4)} + dict[result.get_end('id')] = {"color":normal_color} + + if result.get_string('args'): + color_shortcode_content(dict, str_line, result.get_start('args'), result.get_end('args'), shortcode_events[result.get_string('id')].event_color) + else: + color_shortcode_content(dict, str_line, 0, 0, shortcode_events[result.get_string('id')].event_color) + return fix_dict(dict) + + else: + for event in custom_syntax_events: + if event.is_valid_event(str_line.strip_edges()): + dict = event._get_syntax_highlighting(self, dict, str_line) + return fix_dict(dict) + + else: + dict = text_event._get_syntax_highlighting(self, dict, str_line) + return fix_dict(dict) + + +func line_is_shortcode_event(line_idx:int) -> bool: + var str_line := get_text_edit().get_line(line_idx) + if text_event.text_effects_regex.search(str_line.get_slice(' ', 0)): + return false + + if str_line.strip_edges().begins_with("["): + return true + + if line_idx > 0 and get_text_edit().get_line(line_idx-1).ends_with('\\'): + return line_is_shortcode_event(line_idx-1) + + return false + + +func get_full_event(line_idx:int) -> String: + var str_line := get_text_edit().get_line(line_idx) + var offset := 1 + # Add previous lines + while get_text_edit().get_line(line_idx-offset).ends_with('\\'): + str_line = get_text_edit().get_line(line_idx-offset).trim_suffix('\\')+"\n"+str_line + offset += 1 + + # This is commented out, as it is not needed right now. + # However without it, this isn't actually the full event. + # Might need to be included some day. + #offset = 0 + ## Add following lines + #while get_text_edit().get_line(line_idx+offset).ends_with('\\'): + #str_line = str_line.trim_suffix('\\')+"\n"+get_text_edit().get_line(line_idx+offset) + #offset += 1 + + return str_line + +func fix_dict(dict:Dictionary) -> Dictionary: + var d := {} + var k := dict.keys() + k.sort() + for i in k: + d[i] = dict[i] + return d + + +func color_condition(dict:Dictionary, line:String, from:int = 0, to:int = 0) -> Dictionary: + dict = color_word(dict, code_flow_color, line, 'or', from, to) + dict = color_word(dict, code_flow_color, line, 'and', from, to) + dict = color_word(dict, code_flow_color, line, '==', from, to) + dict = color_word(dict, code_flow_color, line, '!=', from, to) + if !">=" in line: + dict = color_word(dict, code_flow_color, line, '>', from, to) + else: + dict = color_word(dict, code_flow_color, line, '>=', from, to) + if !"<=" in line: + dict = color_word(dict, code_flow_color, line, '<', from, to) + else: + dict = color_word(dict, code_flow_color, line, '<=', from, to) + dict = color_region(dict, variable_color, line, '{', '}', from, to) + dict = color_region(dict, string_color, line, '"', '"', from, to) + + + return dict + + +func color_translation_id(dict:Dictionary, line:String) -> Dictionary: + dict = color_region(dict, translation_id_color, line, '#id:', '') + return dict + + +func color_word(dict:Dictionary, color:Color, line:String, word:String, from:int= 0, to:int = 0) -> Dictionary: + word_regex.compile("\\W(?"+word+")\\W") + if to <= from: + to = len(line)-1 + for i in word_regex.search_all(line.substr(from, to-from+2)): + dict[i.get_start('word')+from] = {'color':color} + dict[i.get_end('word')+from] = {'color':normal_color} + return dict + + +func color_region(dict:Dictionary, color:Color, line:String, start:String, end:String, from:int = 0, to:int = 0, base_color:Color=normal_color) -> Dictionary: + if start in "()[].": + start = "\\"+start + if end in "()[].": + end = "\\"+end + + if end.is_empty(): + region_regex.compile("(? Dictionary: + if to <= from: + to = len(line)-1 + var args_result := shortcode_param_regex.search_all(line.substr(from, to-from+2)) + for x in args_result: + dict[x.get_start()+from] = {"color":base_color.lerp(normal_color, 0.5)} + dict[x.get_start('value')+from-1] = {"color":base_color.lerp(normal_color, 0.7)} + dict[x.get_end()+from] = {"color":normal_color} + return dict diff --git a/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/timeline_editor_text.gd b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/timeline_editor_text.gd new file mode 100644 index 0000000..4d12adc --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/timeline_editor_text.gd @@ -0,0 +1,306 @@ +@tool +extends CodeEdit + +## Sub-Editor that allows editing timelines in a text format. + +@onready var timeline_editor := get_parent().get_parent() +@onready var code_completion_helper: Node= find_parent('EditorsManager').get_node('CodeCompletionHelper') + +var label_regex := RegEx.create_from_string('label +(?[^\n]+)') + +func _ready() -> void: + await find_parent('EditorView').ready + syntax_highlighter = code_completion_helper.syntax_highlighter + timeline_editor.editors_manager.sidebar.content_item_activated.connect(_on_content_item_clicked) + + +func _on_text_editor_text_changed() -> void: + timeline_editor.current_resource_state = DialogicEditor.ResourceStates.UNSAVED + request_code_completion(true) + $UpdateTimer.start() + + +func clear_timeline() -> void: + text = '' + update_content_list() + + +func load_timeline(timeline:DialogicTimeline) -> void: + clear_timeline() + + text = timeline.as_text() + + timeline_editor.current_resource.set_meta("timeline_not_saved", false) + clear_undo_history() + + await get_tree().process_frame + update_content_list() + + +func save_timeline() -> void: + if !timeline_editor.current_resource: + return + + var text_array: Array = text_timeline_to_array(text) + + timeline_editor.current_resource.events = text_array + timeline_editor.current_resource.events_processed = false + ResourceSaver.save(timeline_editor.current_resource, timeline_editor.current_resource.resource_path) + + timeline_editor.current_resource.set_meta("timeline_not_saved", false) + timeline_editor.current_resource_state = DialogicEditor.ResourceStates.SAVED + DialogicResourceUtil.update_directory('dtl') + + +func text_timeline_to_array(text:String) -> Array: + # Parse the lines down into an array + var events := [] + + var lines := text.split('\n', true) + var idx := -1 + + while idx < len(lines)-1: + idx += 1 + var line: String = lines[idx] + var line_stripped: String = line.strip_edges(true, true) + events.append(line) + + return events + + +################################################################################ +## HELPFUL EDITOR FUNCTIONALITY +################################################################################ + +func _gui_input(event): + if not event is InputEventKey: return + if not event.is_pressed(): return + match event.as_text(): + "Ctrl+K": + toggle_comment() + "Alt+Up": + move_line(-1) + "Alt+Down": + move_line(1) + "Ctrl+Shift+D": + duplicate_line() + _: + return + get_viewport().set_input_as_handled() + +# Toggle the selected lines as comments +func toggle_comment() -> void: + var cursor: Vector2 = Vector2(get_caret_column(), get_caret_line()) + var selection := Rect2i( + Vector2i(get_selection_origin_line(), get_selection_origin_column()), + Vector2i(get_caret_line(), get_caret_column())) + var from: int = cursor.y + var to: int = cursor.y + if has_selection(): + from = get_selection_from_line() + to = get_selection_to_line() + + var lines: PackedStringArray = text.split("\n") + var will_comment: bool = false + for i in range(from, to+1): + if not lines[i].begins_with("#"): + will_comment = true + + for i in range(from, to + 1): + if will_comment: + lines[i] = "#" + lines[i] + else: + lines[i] = lines[i].trim_prefix("#") + + text = "\n".join(lines) + if will_comment: + cursor.x += 1 + selection.position.y += 1 + selection.size.y += 1 + else: + cursor.x -= 1 + selection.position.y -= 1 + selection.size.y -= 1 + select(selection.position.x, selection.position.y, selection.size.x, selection.size.y) + text_changed.emit() + + +# Move the selected lines up or down +func move_line(offset: int) -> void: + offset = clamp(offset, -1, 1) + + var cursor: Vector2 = Vector2(get_caret_column(), get_caret_line()) + var reselect: bool = false + var from: int = cursor.y + var to: int = cursor.y + if has_selection(): + reselect = true + from = get_selection_from_line() + to = get_selection_to_line() + + var lines := text.split("\n") + + if from + offset < 0 or to + offset >= lines.size(): return + + var target_from_index: int = from - 1 if offset == -1 else to + 1 + var target_to_index: int = to if offset == -1 else from + var line_to_move: String = lines[target_from_index] + lines.remove_at(target_from_index) + lines.insert(target_to_index, line_to_move) + + text = "\n".join(lines) + + cursor.y += offset + from += offset + to += offset + if reselect: + select(from, 0, to, get_line_width(to)) + set_caret_line(cursor.y) + set_caret_column(cursor.x) + text_changed.emit() + + +func duplicate_line() -> void: + var cursor: Vector2 = Vector2(get_caret_column(), get_caret_line()) + var from: int = cursor.y + var to: int = cursor.y+1 + if has_selection(): + from = get_selection_from_line() + to = get_selection_to_line()+1 + + var lines := text.split("\n") + var lines_to_dupl: PackedStringArray = lines.slice(from, to) + + text = "\n".join(lines.slice(0, from)+lines_to_dupl+lines.slice(from)) + + set_caret_line(cursor.y+to-from) + set_caret_column(cursor.x) + text_changed.emit() + + +# Allows dragging files into the editor +func _can_drop_data(at_position:Vector2, data:Variant) -> bool: + if typeof(data) == TYPE_DICTIONARY and 'files' in data.keys() and len(data.files) == 1: + return true + return false + + +# Allows dragging files into the editor +func _drop_data(at_position:Vector2, data:Variant) -> void: + if typeof(data) == TYPE_DICTIONARY and 'files' in data.keys() and len(data.files) == 1: + set_caret_column(get_line_column_at_pos(at_position).x) + set_caret_line(get_line_column_at_pos(at_position).y) + var result: String = data.files[0] + if get_line(get_caret_line())[get_caret_column()-1] != '"': + result = '"'+result + if get_line(get_caret_line())[get_caret_column()] != '"': + result = result+'"' + + insert_text_at_caret(result) + + +func _on_update_timer_timeout() -> void: + update_content_list() + + +func update_content_list() -> void: + var labels: PackedStringArray = [] + for i in label_regex.search_all(text): + labels.append(i.get_string('name')) + timeline_editor.editors_manager.sidebar.update_content_list(labels) + + +func _on_content_item_clicked(label:String) -> void: + if label == "~ Top": + set_caret_line(0) + set_caret_column(0) + adjust_viewport_to_caret() + return + + for i in label_regex.search_all(text): + if i.get_string('name') == label: + set_caret_column(0) + set_caret_line(text.count('\n', 0, i.get_start()+1)) + center_viewport_to_caret() + return + + +func _search_timeline(search_text:String) -> bool: + set_search_text(search_text) + queue_redraw() + set_meta("current_search", search_text) + + return search(search_text, 0, 0, 0).y != -1 + + +func _search_navigate_down() -> void: + search_navigate(false) + + +func _search_navigate_up() -> void: + search_navigate(true) + + +func search_navigate(navigate_up := false) -> void: + if not has_meta("current_search"): + return + var pos: Vector2i + var search_from_line := 0 + var search_from_column := 0 + if has_selection(): + if navigate_up: + search_from_line = get_selection_from_line() + search_from_column = get_selection_from_column()-1 + if search_from_column == -1: + if search_from_line == 0: + search_from_line = get_line_count() + else: + search_from_line -= 1 + search_from_column = max(get_line(search_from_line).length()-1,0) + else: + search_from_line = get_selection_to_line() + search_from_column = get_selection_to_column() + else: + search_from_line = get_caret_line() + search_from_column = get_caret_column() + + pos = search(get_meta("current_search"), 4 if navigate_up else 0, search_from_line, search_from_column) + select(pos.y, pos.x, pos.y, pos.x+len(get_meta("current_search"))) + set_caret_line(pos.y) + center_viewport_to_caret() + queue_redraw() + + +################################################################################ +## AUTO COMPLETION +################################################################################ + +# Called if something was typed +func _request_code_completion(force:bool): + code_completion_helper.request_code_completion(force, self) + + +# Filters the list of all possible options, depending on what was typed +# Purpose of the different Kinds is explained in [_request_code_completion] +func _filter_code_completion_candidates(candidates:Array) -> Array: + return code_completion_helper.filter_code_completion_candidates(candidates, self) + + +# Called when code completion was activated +# Inserts the selected item +func _confirm_code_completion(replace:bool) -> void: + code_completion_helper.confirm_code_completion(replace, self) + + +################################################################################ +## SYMBOL CLICKING +################################################################################ + +# Performs an action (like opening a link) when a valid symbol was clicked +func _on_symbol_lookup(symbol, line, column): + code_completion_helper.symbol_lookup(symbol, line, column) + + +# Called to test if a symbol can be clicked +func _on_symbol_validate(symbol:String) -> void: + code_completion_helper.symbol_validate(symbol, self) diff --git a/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/timeline_editor_text.tscn b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/timeline_editor_text.tscn new file mode 100644 index 0000000..1ba6230 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/TextEditor/timeline_editor_text.tscn @@ -0,0 +1,32 @@ +[gd_scene load_steps=2 format=3 uid="uid://defdeav8rli6o"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/TimelineEditor/TextEditor/timeline_editor_text.gd" id="1_1kbx2"] + +[node name="TimelineTextEditor" type="CodeEdit"] +offset_top = 592.0 +offset_right = 1024.0 +offset_bottom = 600.0 +theme_override_constants/line_spacing = 10 +wrap_mode = 1 +highlight_current_line = true +draw_tabs = true +minimap_draw = true +caret_blink = true +line_folding = true +gutters_draw_line_numbers = true +gutters_draw_fold_gutter = true +code_completion_enabled = true +code_completion_prefixes = Array[String](["[", "{"]) +indent_automatic = true +auto_brace_completion_enabled = true +auto_brace_completion_highlight_matching = true +script = ExtResource("1_1kbx2") + +[node name="UpdateTimer" type="Timer" parent="."] +one_shot = true + +[connection signal="code_completion_requested" from="." to="." method="_on_code_completion_requested"] +[connection signal="symbol_lookup" from="." to="." method="_on_symbol_lookup"] +[connection signal="symbol_validate" from="." to="." method="_on_symbol_validate"] +[connection signal="text_changed" from="." to="." method="_on_text_editor_text_changed"] +[connection signal="timeout" from="UpdateTimer" to="." method="_on_update_timer_timeout"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/AddEventButton.gd b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/AddEventButton.gd new file mode 100644 index 0000000..7318bd4 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/AddEventButton.gd @@ -0,0 +1,63 @@ +@tool +extends Button + +@export var visible_name := "" +@export var event_id := "" +@export var event_icon: Texture: + get: + return event_icon + set(texture): + event_icon = texture + icon = event_icon +@export var event_sorting_index: int = 0 +@export var resource: DialogicEvent +@export var dialogic_color_name := "" + + +func _ready() -> void: + tooltip_text = visible_name + + custom_minimum_size = Vector2(get_theme_font("font", "Label").get_string_size(text).x+35,30) * DialogicUtil.get_editor_scale() + + add_theme_color_override("font_color", get_theme_color("font_color", "Editor")) + add_theme_color_override("font_color_hover", get_theme_color("accent_color", "Editor")) + apply_base_button_style() + + +func apply_base_button_style() -> void: + var nstyle: StyleBoxFlat = get_parent().get_theme_stylebox('normal', 'Button').duplicate() + nstyle.border_width_left = 5 * DialogicUtil.get_editor_scale() + add_theme_stylebox_override('normal', nstyle) + var hstyle: StyleBoxFlat = get_parent().get_theme_stylebox('hover', 'Button').duplicate() + hstyle.border_width_left = 5 * DialogicUtil.get_editor_scale() + add_theme_stylebox_override('hover', hstyle) + set_color(resource.event_color) + + +func set_color(color:Color) -> void: + var style := get_theme_stylebox('normal', 'Button') + style.border_color = color + add_theme_stylebox_override('normal', style) + style = get_theme_stylebox('hover', 'Button') + style.border_color = color + add_theme_stylebox_override('hover', style) + + +func toggle_name(on:= false) -> void: + if !on: + text = "" + custom_minimum_size = Vector2(40, 40) * DialogicUtil.get_editor_scale() + var style := get_theme_stylebox('normal', 'Button') + style.bg_color = style.border_color.darkened(0.2) + add_theme_stylebox_override('normal', style) + style = get_theme_stylebox('hover', 'Button') + style.bg_color = style.border_color + add_theme_stylebox_override('hover', style) + else: + text = visible_name + custom_minimum_size = Vector2(get_theme_font("font", 'Label').get_string_size(text).x+35,30) * DialogicUtil.get_editor_scale() + apply_base_button_style() + + +func _on_button_down() -> void: + find_parent('VisualEditor').get_node('%TimelineArea').start_dragging(1, resource) diff --git a/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/AddEventButton.tscn b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/AddEventButton.tscn new file mode 100644 index 0000000..2aad5ef --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/AddEventButton.tscn @@ -0,0 +1,46 @@ +[gd_scene load_steps=4 format=3 uid="uid://depcrpeh3f4rv"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/TimelineEditor/VisualEditor/AddEventButton.gd" id="1_s43sc"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qx31r"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.1, 0.1, 0.1, 0.6) +border_width_left = 3 +border_color = Color(0.231373, 0.545098, 0.94902, 1) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_n1o16"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.225, 0.225, 0.225, 0.6) +border_width_left = 3 +border_color = Color(0.231373, 0.545098, 0.94902, 1) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +corner_detail = 5 + +[node name="AddEventButton" type="Button"] +custom_minimum_size = Vector2(44, 30) +offset_right = 97.0 +offset_bottom = 42.0 +tooltip_text = "S" +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_styles/normal = SubResource("StyleBoxFlat_qx31r") +theme_override_styles/hover = SubResource("StyleBoxFlat_n1o16") +alignment = 0 +expand_icon = true +script = ExtResource("1_s43sc") +visible_name = "S" + +[connection signal="button_down" from="." to="." method="_on_button_down"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/TimelineArea.gd b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/TimelineArea.gd new file mode 100644 index 0000000..0baa46b --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/TimelineArea.gd @@ -0,0 +1,199 @@ +@tool +extends ScrollContainer + +# Script of the TimelineArea (that contains the event blocks). +# Manages the drawing of the event lines and event dragging. + + +enum DragTypes {NOTHING, NEW_EVENT, EXISTING_EVENTS} + +var drag_type: DragTypes = DragTypes.NOTHING +var drag_data: Variant +var drag_to_position := 0 +var dragging := false + + +signal drag_completed(type, index, data) +signal drag_canceled() + + +func _ready() -> void: + resized.connect(add_extra_scroll_area_to_timeline) + %Timeline.child_entered_tree.connect(add_extra_scroll_area_to_timeline) + + # This prevents the view to turn black if you are editing this scene in Godot + if find_parent('EditorView'): + %TimelineArea.get_theme_color("background_color", "CodeEdit") + + +#region EVENT DRAGGING +################################################################################ + +func start_dragging(type:DragTypes, data:Variant) -> void: + dragging = true + drag_type = type + drag_data = data + + +func _input(event:InputEvent) -> void: + if !dragging: + return + if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT: + if !event.is_pressed(): + finish_dragging() + + +func _process(delta:float) -> void: + if !dragging: + return + + for child in %Timeline.get_children(): + if (child.global_position.y < get_global_mouse_position().y) and \ + (child.global_position.y+child.size.y > get_global_mouse_position().y): + + if get_global_mouse_position().y > child.global_position.y+(child.size.y/2.0): + drag_to_position = child.get_index()+1 + queue_redraw() + else: + drag_to_position = child.get_index() + queue_redraw() + + +func finish_dragging() -> void: + dragging = false + if get_global_rect().has_point(get_global_mouse_position()): + drag_completed.emit(drag_type, drag_to_position, drag_data) + else: + drag_canceled.emit() + queue_redraw() + +#endregion + + +#region LINE DRAWING +################################################################################ + +func _draw() -> void: + var line_width := 5 * DialogicUtil.get_editor_scale() + var horizontal_line_length := 100 * DialogicUtil.get_editor_scale() + var color_multiplier := Color(1,1,1,0.25) + var selected_color_multiplier := Color(1,1,1,1) + + + ## Draw Event Lines + for idx in range($Timeline.get_child_count()): + var block: Control = $Timeline.get_child(idx) + + if not "resource" in block: + continue + + if not block.visible: + continue + + if block.resource is DialogicEndBranchEvent: + continue + + if not (block.has_any_enabled_body_content or block.resource.can_contain_events): + continue + + var icon_panel_height: int = block.get_node('%IconPanel').size.y + var rect_position: Vector2 = block.get_node('%IconPanel').global_position+Vector2(0,1)*block.get_node('%IconPanel').size+Vector2(0,-4) + var color: Color = block.resource.event_color + + if block.is_selected() or block.end_node and block.end_node.is_selected(): + color *= selected_color_multiplier + else: + color *= color_multiplier + + if block.expanded and not block.resource.can_contain_events: + draw_rect(Rect2(rect_position-global_position+Vector2(line_width, 0), Vector2(line_width, block.size.y-block.get_node('%IconPanel').size.y)), color) + + ## If the indentation has not changed, nothing else happens + if idx >= $Timeline.get_child_count()-1 or block.current_indent_level >= $Timeline.get_child(idx+1).current_indent_level: + continue + + ## Draw connection between opening and end branch events + if block.resource.can_contain_events: + var end_node: Node = block.end_node + + if end_node != null: + var v_length: float = end_node.global_position.y+end_node.size.y/2-rect_position.y + #var rect_size := Vector2(line_width, ) + var offset := Vector2(line_width, 0) + + # Draw vertical line + draw_rect(Rect2(rect_position-global_position+offset, Vector2(line_width, v_length)), color) + # Draw horizonal line (on END BRANCH event) + draw_rect(Rect2( + rect_position.x+line_width-global_position.x+offset.x, + rect_position.y+v_length-line_width-global_position.y, + horizontal_line_length-offset.x, + line_width), + color) + + if block.resource.wants_to_group: + var group_color: Color = block.resource.event_color*color_multiplier + var group_starter := true + if idx != 0: + var block_above := $Timeline.get_child(idx-1) + if block_above.resource.event_name == block.resource.event_name: + group_starter = false + if block_above.resource is DialogicEndBranchEvent and block_above.parent_node.resource.event_name == block.resource.event_name: + group_starter = false + + ## Draw small horizontal line on any event in group + draw_rect(Rect2( + rect_position.x-global_position.x-line_width, + rect_position.y-global_position.y-icon_panel_height/2, + line_width, + line_width), + group_color) + + if group_starter: + ## Find the last event in the group (or that events END BRANCH) + var sub_idx := idx + var group_end_idx := idx + while sub_idx < $Timeline.get_child_count()-1: + sub_idx += 1 + if $Timeline.get_child(sub_idx).current_indent_level == block.current_indent_level-1: + group_end_idx = sub_idx-1 + break + + var end_node := $Timeline.get_child(group_end_idx) + + var offset := Vector2(-2*line_width, -icon_panel_height/2) + var v_length: float = end_node.global_position.y - rect_position.y + icon_panel_height + + ## Draw vertical line + draw_rect(Rect2( + rect_position.x - global_position.x + offset.x, + rect_position.y - global_position.y + offset.y, + line_width, + v_length), + group_color) + + + ## Draw line that indicates the dragging position + if dragging and get_global_rect().has_point(get_global_mouse_position()): + var height: int = 0 + if drag_to_position == %Timeline.get_child_count(): + height = %Timeline.get_child(-1).global_position.y+%Timeline.get_child(-1).size.y-global_position.y-(line_width/2.0) + else: + height = %Timeline.get_child(drag_to_position).global_position.y-global_position.y-(line_width/2.0) + + draw_line(Vector2(0, height), Vector2(size.x*0.9, height), get_theme_color("accent_color", "Editor"), line_width*.3) + +#endregion + + +#region SPACE BELOW +################################################################################ + +func add_extra_scroll_area_to_timeline(fake_arg:Variant=null) -> void: + if %Timeline.get_children().size() > 4: + %Timeline.custom_minimum_size.y = 0 + %Timeline.size.y = 0 + if %Timeline.size.y + 200 > %TimelineArea.size.y: + %Timeline.custom_minimum_size = Vector2(0, %Timeline.size.y + 200) + +#endregion diff --git a/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/timeline_editor_visual.gd b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/timeline_editor_visual.gd new file mode 100644 index 0000000..bd350cb --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/timeline_editor_visual.gd @@ -0,0 +1,1279 @@ +@tool +extends Container + +## Visual mode of the timeline editor. + + +################## EDITOR NODES ################################################ +################################################################################ +var TimelineUndoRedo := UndoRedo.new() +@onready var timeline_editor := get_parent().get_parent() +var event_node +var sidebar_collapsed := false + +################## SIGNALS ##################################################### +################################################################################ +signal selection_updated +signal batch_loaded +signal timeline_loaded + + +################## TIMELINE LOADING ############################################ +################################################################################ +var _batches := [] +var _building_timeline := false +var _timeline_changed_while_loading := false +var _initialized := false + +################## TIMELINE EVENT MANAGEMENT ################################### +################################################################################ +var selected_items: Array = [] +var drag_allowed := false + + +#region CREATE/SAVE/LOAD +################################################################################ + +func something_changed() -> void: + timeline_editor.current_resource_state = DialogicEditor.ResourceStates.UNSAVED + + +func save_timeline() -> void: + if !is_inside_tree(): + return + + # return if resource is unchanged + if timeline_editor.current_resource_state != DialogicEditor.ResourceStates.UNSAVED: + return + + # create a list of text versions of all the events with the right indent + var new_events := [] + var indent := 0 + for event in %Timeline.get_children(): + if 'event_name' in event.resource: + event.resource.update_text_version() + new_events.append(event.resource) + + if !timeline_editor.current_resource: + return + + timeline_editor.current_resource.events = new_events + timeline_editor.current_resource.events_processed = true + var error: int = ResourceSaver.save(timeline_editor.current_resource, timeline_editor.current_resource.resource_path) + + if error != OK: + print('[Dialogic] Saving error: ', error) + + timeline_editor.current_resource.set_meta("unsaved", false) + timeline_editor.current_resource_state = DialogicEditor.ResourceStates.SAVED + DialogicResourceUtil.update_directory('dtl') + + +func _notification(what:int) -> void: + if what == NOTIFICATION_WM_CLOSE_REQUEST: + save_timeline() + + +func load_timeline(resource:DialogicTimeline) -> void: + if _building_timeline: + _timeline_changed_while_loading = true + await batch_loaded + _timeline_changed_while_loading = false + _building_timeline = false + + clear_timeline_nodes() + + if timeline_editor.current_resource.events.size() == 0: + pass + else: + await timeline_editor.current_resource.process() + + if timeline_editor.current_resource.events.size() == 0: + return + + var data := resource.events + var page := 1 + var batch_size := 10 + _batches = [] + _building_timeline = true + while batch_events(data, batch_size, page).size() != 0: + _batches.append(batch_events(data, batch_size, page)) + page += 1 + batch_loaded.emit() + # Reset the scroll position + %TimelineArea.scroll_vertical = 0 + + +func batch_events(array: Array, size: int, batch_number: int) -> Array: + return array.slice((batch_number - 1) * size, batch_number * size) + + +# a list of all events like choice and condition events (so they get connected to their end events) +var opener_events_stack := [] + +func load_batch(data:Array) -> void: + var current_batch: Array = _batches.pop_front() + if current_batch: + for i in current_batch: + if i is DialogicEndBranchEvent: + create_end_branch_event(%Timeline.get_child_count(), opener_events_stack.pop_back()) + else: + var piece := add_event_node(i, %Timeline.get_child_count()) + if i.can_contain_events: + opener_events_stack.push_back(piece) + batch_loaded.emit() + + +func _on_batch_loaded() -> void: + if _timeline_changed_while_loading: + return + if _batches.size() > 0: + indent_events() + await get_tree().process_frame + load_batch(_batches) + return + + if opener_events_stack: + + for ev in opener_events_stack: + create_end_branch_event(%Timeline.get_child_count(), ev) + + opener_events_stack = [] + indent_events() + update_content_list() + _building_timeline = false + + +func clear_timeline_nodes() -> void: + deselect_all_items() + for event in %Timeline.get_children(): + event.free() +#endregion + + +#region SETUP +################################################################################ + +func _ready() -> void: + event_node = load("res://addons/dialogic/Editor/Events/EventBlock/event_block.tscn") + + batch_loaded.connect(_on_batch_loaded) + + await find_parent('EditorView').ready + timeline_editor.editors_manager.sidebar.content_item_activated.connect(_on_content_item_clicked) + %Timeline.child_order_changed.connect(update_content_list) + + var editor_scale := DialogicUtil.get_editor_scale() + %RightSidebar.size.x = DialogicUtil.get_editor_setting("dialogic/editor/right_sidebar_width", 200 * editor_scale) + $View.split_offset = -DialogicUtil.get_editor_setting("dialogic/editor/right_sidebar_width", 200 * editor_scale) + sidebar_collapsed = DialogicUtil.get_editor_setting("dialogic/editor/right_sidebar_collapsed", false) + + load_event_buttons() + _on_right_sidebar_resized() + _initialized = true + + +func load_event_buttons() -> void: + sidebar_collapsed = DialogicUtil.get_editor_setting("dialogic/editor/right_sidebar_collapsed", false) + + # Clear previous event buttons + for child in %RightSidebar.get_child(0).get_children(): + + if child is FlowContainer: + + for button in child.get_children(): + button.queue_free() + + + for child in %RightSidebar.get_child(0).get_children(): + child.get_parent().remove_child(child) + child.queue_free() + + # Event buttons + var button_scene := load("res://addons/dialogic/Editor/TimelineEditor/VisualEditor/AddEventButton.tscn") + + var scripts := DialogicResourceUtil.get_event_cache() + var hidden_buttons :Array = DialogicUtil.get_editor_setting('hidden_event_buttons', []) + var sections := {} + + for event_script in scripts: + var event_resource: Variant + + if typeof(event_script) == TYPE_STRING: + event_resource = load(event_script).new() + else: + event_resource = event_script + + if event_resource.disable_editor_button == true: + continue + + if event_resource.event_name in hidden_buttons: + continue + + var button: Button = button_scene.instantiate() + button.resource = event_resource + button.visible_name = event_resource.event_name + button.event_icon = event_resource._get_icon() + button.set_color(event_resource.event_color) + button.dialogic_color_name = event_resource.dialogic_color_name + button.event_sorting_index = event_resource.event_sorting_index + + button.button_up.connect(_add_event_button_pressed.bind(event_resource)) + + if !event_resource.event_category in sections: + var section := VBoxContainer.new() + section.name = event_resource.event_category + + var section_header := HBoxContainer.new() + section_header.add_child(Label.new()) + section_header.get_child(0).text = event_resource.event_category + section_header.get_child(0).size_flags_horizontal = SIZE_SHRINK_BEGIN + section_header.get_child(0).theme_type_variation = "DialogicSection" + section_header.add_child(HSeparator.new()) + section_header.get_child(1).size_flags_horizontal = SIZE_EXPAND_FILL + section.add_child(section_header) + + var button_container := FlowContainer.new() + section.add_child(button_container) + + sections[event_resource.event_category] = button_container + %RightSidebar.get_child(0).add_child(section, true) + + sections[event_resource.event_category].add_child(button) + button.toggle_name(!sidebar_collapsed) + + # Sort event button + while event_resource.event_sorting_index < sections[event_resource.event_category].get_child(max(0, button.get_index()-1)).resource.event_sorting_index: + sections[event_resource.event_category].move_child(button, button.get_index()-1) + + # Sort event sections + var sections_order: Array = DialogicUtil.get_editor_setting('event_section_order', + ['Main', 'Flow', 'Logic', 'Audio', 'Visual','Other', 'Helper']) + + sections_order.reverse() + for section_name in sections_order: + if %RightSidebar.get_child(0).has_node(section_name): + %RightSidebar.get_child(0).move_child(%RightSidebar.get_child(0).get_node(section_name), 0) + + # Resize RightSidebar + %RightSidebar.custom_minimum_size.x = 50 * DialogicUtil.get_editor_scale() + + _on_right_sidebar_resized() +#endregion + + +#region CONTENT LIST +################################################################################ + +func _on_content_item_clicked(label:String) -> void: + if label == "~ Top": + %TimelineArea.scroll_vertical = 0 + return + + for event in %Timeline.get_children(): + if 'event_name' in event.resource and event.resource is DialogicLabelEvent: + if event.resource.name == label: + scroll_to_piece(event.get_index()) + return + + +func update_content_list() -> void: + if not is_inside_tree(): + return + + var labels: PackedStringArray = [] + + for event in %Timeline.get_children(): + + if 'event_name' in event.resource and event.resource is DialogicLabelEvent: + labels.append(event.resource.name) + + timeline_editor.editors_manager.sidebar.update_content_list(labels) + + +#endregion + + +#region DRAG & DROP + DRAGGING EVENTS +################################################################################# + +# SIGNAL handles input on the events mainly for selection and moving events +func _on_event_block_gui_input(event: InputEvent, item: Node) -> void: + if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT: + if event.is_pressed(): + if len(selected_items) > 1 and item in selected_items and !Input.is_key_pressed(KEY_CTRL): + pass + elif not _is_item_selected(item) and not len(selected_items) > 1: + select_item(item) + elif len(selected_items) > 1 or Input.is_key_pressed(KEY_CTRL): + select_item(item) + + drag_allowed = true + + if len(selected_items) > 0 and event is InputEventMouseMotion: + if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT): + if !%TimelineArea.dragging and !get_viewport().gui_is_dragging() and drag_allowed: + sort_selection() + %TimelineArea.start_dragging(%TimelineArea.DragTypes.EXISTING_EVENTS, selected_items) + + +## Activated by TimelineArea drag_completed +func _on_timeline_area_drag_completed(type:int, index:int, data:Variant) -> void: + if type == %TimelineArea.DragTypes.NEW_EVENT: + var resource: DialogicEvent = data.duplicate() + resource._load_custom_defaults() + + add_event_undoable(resource, index) + + elif type == %TimelineArea.DragTypes.EXISTING_EVENTS: + if not (len(data) == 1 and data[0].get_index()+1 == index): + move_blocks_to_index(data, index) + + await get_tree().process_frame + something_changed() + scroll_to_piece(index) + indent_events() +#endregion + + +#region CREATING THE TIMELINE +################################################################################ +# Adding an event to the timeline +func add_event_node(event_resource:DialogicEvent, at_index:int = -1, auto_select: bool = false, indent: bool = false) -> Control: + if event_resource is DialogicEndBranchEvent: + return create_end_branch_event(at_index, %Timeline.get_child(0)) + + if event_resource['event_node_ready'] == false: + if event_resource['event_node_as_text'] != "": + event_resource._load_from_string(event_resource['event_node_as_text']) + + var block: Control = event_node.instantiate() + block.resource = event_resource + event_resource.editor_node = block + event_resource._enter_visual_editor(timeline_editor) + block.content_changed.connect(something_changed) + + if event_resource.event_name == "Label": + block.content_changed.connect(update_content_list) + if at_index == -1: + if len(selected_items) != 0: + selected_items[0].add_sibling(block) + else: + %Timeline.add_child(block) + else: + %Timeline.add_child(block) + %Timeline.move_child(block, at_index) + + block.gui_input.connect(_on_event_block_gui_input.bind(block)) + + # Building editing part + block.build_editor(true, event_resource.expand_by_default) + + if auto_select: + select_item(block, false) + + # Indent on create + if indent: + indent_events() + + return block + + +func create_end_branch_event(at_index:int, parent_node:Node) -> Node: + var end_branch_event: Control = load("res://addons/dialogic/Editor/Events/BranchEnd.tscn").instantiate() + end_branch_event.resource = DialogicEndBranchEvent.new() + end_branch_event.gui_input.connect(_on_event_block_gui_input.bind(end_branch_event)) + parent_node.end_node = end_branch_event + end_branch_event.parent_node = parent_node + end_branch_event.add_end_control(parent_node.resource.get_end_branch_control()) + %Timeline.add_child(end_branch_event) + %Timeline.move_child(end_branch_event, at_index) + return end_branch_event + + +# combination of the above that establishes the correct connection between the event and it's end branch +func add_event_with_end_branch(resource, at_index:int=-1, auto_select:bool = false, indent:bool = false) -> void: + var event := add_event_node(resource, at_index, auto_select, indent) + create_end_branch_event(at_index+1, event) + + +## Adds an event (either single nodes or with end branches) to the timeline with UndoRedo support +func add_event_undoable(event_resource: DialogicEvent, at_index: int = -1) -> void: + TimelineUndoRedo.create_action("[D] Add "+event_resource.event_name+" event.") + if event_resource.can_contain_events: + TimelineUndoRedo.add_do_method(add_event_with_end_branch.bind(event_resource, at_index, true, true)) + TimelineUndoRedo.add_undo_method(delete_events_at_index.bind(at_index, 2)) + else: + TimelineUndoRedo.add_do_method(add_event_node.bind(event_resource, at_index, true, true)) + TimelineUndoRedo.add_undo_method(delete_events_at_index.bind(at_index, 1)) + TimelineUndoRedo.commit_action() +#endregion + + +#region DELETING, COPY, PASTE +################################################################################ + +## Lists the given events (as text) based on their indexes. +## This is used to store info for undo/redo. +## Based on the action you might want to include END_BRANCHES or not (see EndBranchMode) +func get_events_indexed(events:Array) -> Dictionary: + var indexed_dict := {} + for event in events: + # do not collect selected end branches (e.g. on delete, copy, etc.) + if event.resource is DialogicEndBranchEvent: + continue + + indexed_dict[event.get_index()] = event.resource.to_text() + + # store an end branch if it is selected or connected to a selected event + if 'end_node' in event and event.end_node: + event = event.end_node + indexed_dict[event.get_index()] = event.resource.to_text() + elif event.resource is DialogicEndBranchEvent: + if event.parent_node in events: # add local index + indexed_dict[event.get_index()] += str(events.find(event.parent_node)) + else: # add global index + indexed_dict[event.get_index()] += '#'+str(event.parent_node.get_index()) + return indexed_dict + + +## Returns an indexed dictionary of [amount] events at [index] +func get_events_at_index_indexed(index:int, amount:int) -> Dictionary: + var events := [] + + for i in range(amount): + events.append(%Timeline.get_child(index+i)) + + return get_events_indexed(events) + + +## Selects events based on an indexed dictionary +func select_events_indexed(indexed_events:Dictionary) -> void: + selected_items = [] + for event_index in indexed_events.keys(): + selected_items.append(%Timeline.get_child(event_index)) + + +## Adds events based on an indexed dictionary +func add_events_indexed(indexed_events:Dictionary) -> void: + # sort the dictionaries indexes just in case + var indexes := indexed_events.keys() + indexes.sort() + + var events := [] + for event_idx in indexes: + # first get a new resource from the text version + var event_resource :DialogicEvent + for i in DialogicResourceUtil.get_event_cache(): + if i._test_event_string(indexed_events[event_idx]): + event_resource = i.duplicate() + break + + event_resource.from_text(indexed_events[event_idx]) + + # now create the visual block. + deselect_all_items() + if event_resource is DialogicEndBranchEvent: + var idx: String = indexed_events[event_idx].trim_prefix('<>') + if idx.begins_with('#'): # a global index + events.append(create_end_branch_event(%Timeline.get_child_count(), %Timeline.get_child(int(idx.trim_prefix('#'))))) + else: # a local index (index in the added events list) + events.append(create_end_branch_event(%Timeline.get_child_count(), events[int(idx)])) + %Timeline.move_child(events[-1], event_idx) + else: + events.append(add_event_node(event_resource)) + %Timeline.move_child(events[-1], event_idx) + + selected_items = events + visual_update_selection() + indent_events() + something_changed() + + +## Deletes events based on an indexed dictionary +func delete_events_indexed(indexed_events:Dictionary) -> void: + if indexed_events.is_empty(): + return + + var idx_shift := 0 + for idx in indexed_events: + if 'end_node' in %Timeline.get_child(idx-idx_shift) and %Timeline.get_child(idx-idx_shift).end_node != null and is_instance_valid(%Timeline.get_child(idx-idx_shift).end_node): + %Timeline.get_child(idx-idx_shift).end_node.parent_node = null + if %Timeline.get_child(idx-idx_shift) != null and is_instance_valid(%Timeline.get_child(idx-idx_shift)): + if %Timeline.get_child(idx-idx_shift) in selected_items: + selected_items.erase(%Timeline.get_child(idx-idx_shift)) + %Timeline.get_child(idx-idx_shift).queue_free() + %Timeline.get_child(idx-idx_shift).get_parent().remove_child(%Timeline.get_child(idx-idx_shift)) + idx_shift += 1 + + indent_events() + something_changed() + + +func delete_selected_events() -> void: + # try to find which item to select afterwards + var next_node := %Timeline.get_child(mini(%Timeline.get_child_count() - 1, selected_items[-1].get_index() + 1)) + if _is_item_selected(next_node): + next_node = null + + delete_events_indexed(get_events_indexed(selected_items)) + + # select next + if next_node != null: + select_item(next_node, false) + elif %Timeline.get_child_count() > 0: + next_node = %Timeline.get_child(max(0, %Timeline.get_child_count() - 1)) + select_item(next_node, false) + else: + deselect_all_items() + + +func cut_events_indexed(indexed_events:Dictionary) -> void: + select_events_indexed(indexed_events) + copy_selected_events() + delete_events_indexed(indexed_events) + + +func copy_selected_events() -> void: + if len(selected_items) == 0: + return + + var event_copy_array := [] + for item in selected_items: + event_copy_array.append(item.resource.to_text()) + if item.resource is DialogicEndBranchEvent: + if item.parent_node in selected_items: # add local index + event_copy_array[-1] += str(selected_items.find(item.parent_node)) + else: # add global index + event_copy_array[-1] += '#'+str(item.parent_node.get_index()) + DisplayServer.clipboard_set(var_to_str({ + "events":event_copy_array, + "project_name": ProjectSettings.get_setting("application/config/name") + })) + + +func get_clipboard_data() -> Array: + var clipboard_parse: Variant = str_to_var(DisplayServer.clipboard_get()) + + if clipboard_parse is Dictionary: + if clipboard_parse.has("project_name"): + if clipboard_parse.project_name != ProjectSettings.get_setting("application/config/name"): + print("[Dialogic] Be careful when copying from another project!") + if clipboard_parse.has('events'): + return clipboard_parse.events + return [] + + +func add_events_at_index(event_list:Array, at_index:int) -> void: + var new_indexed_events := {} + + for i in range(len(event_list)): + new_indexed_events[at_index+i] = event_list[i] + + add_events_indexed(new_indexed_events) + + +func delete_events_at_index(at_index:int, amount:int = 1)-> void: + var new_indexed_events := {} + # delete_events_indexed actually only needs the keys, so we give trash as values + for i in range(amount): + new_indexed_events[at_index+i] = "" + delete_events_indexed(new_indexed_events) + indent_events() + +#endregion + + +#region BLOCK SELECTION +################################################################################ + +func _is_item_selected(item: Node) -> bool: + return item in selected_items + + +func select_item(item: Node, multi_possible:bool = true) -> void: + if item == null: + return + + if Input.is_key_pressed(KEY_CTRL) and multi_possible: + # deselect the item if it is selected + if _is_item_selected(item): + selected_items.erase(item) + else: + selected_items.append(item) + elif Input.is_key_pressed(KEY_SHIFT) and multi_possible: + if len(selected_items) == 0: + selected_items = [item] + else: + var index: int = selected_items[-1].get_index() + var goal_idx := item.get_index() + while true: + if index < goal_idx: index += 1 + else: index -= 1 + if not %Timeline.get_child(index) in selected_items: + selected_items.append(%Timeline.get_child(index)) + + if index == goal_idx: + break + else: + if len(selected_items) == 1: + if _is_item_selected(item): + selected_items.erase(item) + else: + selected_items = [item] + else: + selected_items = [item] + + sort_selection() + visual_update_selection() + + +# checks all the events and sets their styles (selected/deselected) +func visual_update_selection() -> void: + for item in %Timeline.get_children(): + item.visual_deselect() + if 'end_node' in item and item.end_node != null: + item.end_node.unhighlight() + for item in selected_items: + item.visual_select() + if 'end_node' in item and item.end_node != null: + item.end_node.highlight() + %TimelineArea.queue_redraw() + + +## Sorts the selection using 'custom_sort_selection' +func sort_selection() -> void: + selected_items.sort_custom(custom_sort_selection) + + +## Compares two event blocks based on their position in the timeline +func custom_sort_selection(item1, item2) -> bool: + return item1.get_index() < item2.get_index() + + +func select_all_items() -> void: + selected_items = [] + for event in %Timeline.get_children(): + selected_items.append(event) + visual_update_selection() + + +func deselect_all_items() -> void: + selected_items = [] + visual_update_selection() +#endregion + + +#region CREATING NEW EVENTS USING THE BUTTONS +################################################################################ + +# Event Creation signal for buttons +# If force_resource is true, the event will be added with the actual resource +func _add_event_button_pressed(event_resource:DialogicEvent, force_resource := false): + if %TimelineArea.get_global_rect().has_point(get_global_mouse_position()) and !force_resource: + return + + var at_index := -1 + if selected_items: + at_index = selected_items[-1].get_index()+1 + else: + at_index = %Timeline.get_child_count() + + var resource: DialogicEvent = null + if force_resource: + resource = event_resource + else: + resource = event_resource.duplicate() + resource._load_custom_defaults() + + resource.created_by_button = true + + add_event_undoable(resource, at_index) + + resource.created_by_button = false + + something_changed() + scroll_to_piece(at_index) + indent_events() +#endregion + + +#region BLOCK GETTERS +################################################################################ + +func get_block_above(block:Node) -> Node: + if block.get_index() > 0: + return %Timeline.get_child(block.get_index() - 1) + return null + + +func get_block_below(block:Node) -> Node: + if block.get_index() < %Timeline.get_child_count() - 1: + return %Timeline.get_child(block.get_index() + 1) + return null +#endregion + + +#region BLOCK MOVEMENT +################################################################################ + + +func move_blocks_to_index(blocks:Array, index:int): + # the amount of events that were BEFORE the new index (thus shifting the index) + var index_shift := 0 + for event in blocks: + if event.resource is DialogicEndBranchEvent: + if !event.parent_node in blocks: + if index <= event.parent_node.get_index(): + return + if "end_node" in event and event.end_node: + if !event.end_node in blocks: + if event.end_node.get_index() == event.get_index()+1: + blocks.append(event.end_node) + else: + return + index_shift += int(event.get_index() < index) + + var do_indexes := {} + var undo_indexes := {} + + var event_count := 0 + for event in blocks: + do_indexes[event.get_index()] = index + event_count + undo_indexes[index -index_shift+event_count] = event.get_index()+index_shift*int(index < event.get_index())#+int((index -index_shift+event_count) < event.get_index()) + event_count += 1 + + # complex check to avoid tangling conditions & choices + for idx in do_indexes: + var event := %Timeline.get_child(idx) + if !event.resource is DialogicEndBranchEvent and !event.resource.can_contain_events: + continue + + if event.resource is DialogicEndBranchEvent: + if !event.parent_node or event.parent_node.get_index() in do_indexes: + continue + elif event.resource.can_contain_events: + if !event.end_node or event.end_node.get_index() in do_indexes: + continue + + var check_from := 0 + var check_to := 0 + + if event.resource is DialogicEndBranchEvent: + check_from = event.parent_node.get_index()+1 + check_to = index + else: + check_from = index + check_to = event.end_node.get_index() + + for c_idx in range(check_from, check_to): + if c_idx in do_indexes: + continue + var c_event := %Timeline.get_child(c_idx) + if c_event.resource is DialogicEndBranchEvent and c_event.parent_node.get_index() < check_from: + return + if c_event.resource.can_contain_events and c_event.end_node.get_index() > check_to: + return + + TimelineUndoRedo.create_action('[D] Move events.') + TimelineUndoRedo.add_do_method(move_events_by_indexes.bind(do_indexes)) + TimelineUndoRedo.add_undo_method(move_events_by_indexes.bind(undo_indexes)) + TimelineUndoRedo.commit_action() + + +func move_events_by_indexes(index_dict:Dictionary) -> void: + var sorted_indexes := index_dict.keys() + sorted_indexes.sort() + + var evts := {} + var count := 0 + for idx in sorted_indexes: + evts[idx] =%Timeline.get_child(idx-count) + %Timeline.remove_child(%Timeline.get_child(idx-count)) + count += 1 + if idx < index_dict[idx]: + index_dict[idx] -= len(sorted_indexes.filter(func(x):return x<=index_dict[idx]-count-1)) + + for idx in sorted_indexes: + %Timeline.add_child(evts[idx]) + %Timeline.move_child(evts[idx], index_dict[idx]) + + indent_events() + visual_update_selection() + something_changed() + + +func offset_blocks_by_index(blocks:Array, offset:int): + var do_indexes := {} + var undo_indexes := {} + + for event in blocks: + if event.resource is DialogicEndBranchEvent: + if !event.parent_node in blocks: + if event.get_index()+offset+int(offset>0) <= event.parent_node.get_index(): + continue + if "end_node" in event and event.end_node: + if !event.end_node in blocks: + if event.get_index()+offset+int(offset>0) > event.end_node.get_index(): + if event.end_node.get_index() == event.get_index()+1: + blocks.append(event.end_node) + else: + return + do_indexes[event.get_index()] = event.get_index()+offset+int(offset>0) + undo_indexes[event.get_index()+offset] = event.get_index()+int(offset<0) + + + TimelineUndoRedo.create_action("[D] Move events.") + TimelineUndoRedo.add_do_method(move_events_by_indexes.bind(do_indexes)) + TimelineUndoRedo.add_undo_method(move_events_by_indexes.bind(undo_indexes)) + + TimelineUndoRedo.commit_action() +#endregion + + +#region VISIBILITY/VISUALS +################################################################################ + +func scroll_to_piece(piece_index:int) -> void: + await get_tree().process_frame + var height: float = %Timeline.get_child(min(piece_index, %Timeline.get_child_count()-1)).position.y + if height < %TimelineArea.scroll_vertical or height > %TimelineArea.scroll_vertical+%TimelineArea.size.y: + %TimelineArea.scroll_vertical = height + + +func indent_events() -> void: + var indent: int = 0 + var event_list: Array = %Timeline.get_children() + + if event_list.size() < 2: + return + + var currently_hidden := false + var hidden_count := 0 + var hidden_until: Control = null + + # will be applied to the indent after the current event + var delayed_indent: int = 0 + + for block in event_list: + if (not "resource" in block): + continue + + if (not currently_hidden) and block.resource.can_contain_events and block.end_node and block.collapsed: + currently_hidden = true + hidden_until = block.end_node + hidden_count = 0 + elif currently_hidden and block == hidden_until: + block.update_hidden_events_indicator(hidden_count) + currently_hidden = false + hidden_until = null + elif currently_hidden: + block.hide() + hidden_count += 1 + else: + block.show() + if block.resource is DialogicEndBranchEvent: + block.update_hidden_events_indicator(0) + + delayed_indent = 0 + + if block.resource.can_contain_events: + delayed_indent = 1 + + if block.resource.wants_to_group: + indent += 1 + + elif block.resource is DialogicEndBranchEvent: + block.parent_node_changed() + delayed_indent -= 1 + if block.parent_node.resource.wants_to_group: + delayed_indent -= 1 + + if indent >= 0: + block.set_indent(indent) + else: + block.set_indent(0) + indent += delayed_indent + + await get_tree().process_frame + await get_tree().process_frame + %TimelineArea.queue_redraw() + + +#region SPECIAL BLOCK OPERATIONS +################################################################################ + +func _on_event_popup_menu_index_pressed(index:int) -> void: + var item: Control = %EventPopupMenu.current_event + if index == 0: + if not item in selected_items: + selected_items = [item] + duplicate_selected() + elif index == 2: + if not item.resource.help_page_path.is_empty(): + OS.shell_open(item.resource.help_page_path) + elif index == 3: + find_parent('EditorView').plugin_reference.get_editor_interface().set_main_screen_editor('Script') + find_parent('EditorView').plugin_reference.get_editor_interface().edit_script(item.resource.get_script(), 1, 1) + elif index == 5 or index == 6: + if index == 5: + offset_blocks_by_index(selected_items, -1) + else: + offset_blocks_by_index(selected_items, +1) + + elif index == 8: + var events_indexed : Dictionary + if item in selected_items: + events_indexed = get_events_indexed(selected_items) + else: + events_indexed = get_events_indexed([item]) + TimelineUndoRedo.create_action("[D] Deleting 1 event.") + TimelineUndoRedo.add_do_method(delete_events_indexed.bind(events_indexed)) + TimelineUndoRedo.add_undo_method(add_events_indexed.bind(events_indexed)) + TimelineUndoRedo.commit_action() + indent_events() + + +func _on_right_sidebar_resized() -> void: + var _scale := DialogicUtil.get_editor_scale() + + if %RightSidebar.size.x < 160 * _scale and (not sidebar_collapsed or not _initialized): + sidebar_collapsed = true + + for section in %RightSidebar.get_node('EventContainer').get_children(): + + for con in section.get_children(): + + if con.get_child_count() == 0: + continue + + if con.get_child(0) is Label: + con.get_child(0).hide() + + elif con.get_child(0) is Button: + + for button in con.get_children(): + button.toggle_name(false) + + + elif %RightSidebar.size.x > 160 * _scale and (sidebar_collapsed or not _initialized): + sidebar_collapsed = false + + for section in %RightSidebar.get_node('EventContainer').get_children(): + + for con in section.get_children(): + + if con.get_child_count() == 0: + continue + + if con.get_child(0) is Label: + con.get_child(0).show() + + elif con.get_child(0) is Button: + for button in con.get_children(): + button.toggle_name(true) + + if _initialized: + DialogicUtil.set_editor_setting("dialogic/editor/right_sidebar_width", %RightSidebar.size.x) + DialogicUtil.set_editor_setting("dialogic/editor/right_sidebar_collapsed", sidebar_collapsed) + +#endregion + + +#region SHORTCUTS +################################################################################ + +func duplicate_selected() -> void: + if len(selected_items) > 0: + var events := get_events_indexed(selected_items).values() + var at_index: int = selected_items[-1].get_index()+1 + TimelineUndoRedo.create_action("[D] Duplicate "+str(len(events))+" event(s).") + TimelineUndoRedo.add_do_method(add_events_at_index.bind(events, at_index)) + TimelineUndoRedo.add_undo_method(delete_events_at_index.bind(at_index, len(events))) + TimelineUndoRedo.commit_action() + + +func _input(event:InputEvent) -> void: + if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed == false: + drag_allowed = false + + # we protect this with is_visible_in_tree to not + # invoke a shortcut by accident + if !((event is InputEventKey or !event is InputEventWithModifiers) and is_visible_in_tree()): + return + + + if "pressed" in event: + if !event.pressed: + return + + + ## Some shortcuts should always work + match event.as_text(): + "Ctrl+T": # Add text event + _add_event_button_pressed(DialogicTextEvent.new(), true) + get_viewport().set_input_as_handled() + + "Ctrl+Shift+T", "Ctrl+Alt+T", "Ctrl+Option+T": # Add text event with current or previous character + get_viewport().set_input_as_handled() + var ev := DialogicTextEvent.new() + ev.character = get_previous_character(event.as_text() == "Ctrl+Alt+T" or event.as_text() == "Ctrl+Option+T") + _add_event_button_pressed(ev, true) + + "Ctrl+E": # Add character join event + _add_event_button_pressed(DialogicCharacterEvent.new(), true) + get_viewport().set_input_as_handled() + + "Ctrl+Shift+E": # Add character update event + var ev := DialogicCharacterEvent.new() + ev.action = DialogicCharacterEvent.Actions.UPDATE + _add_event_button_pressed(ev, true) + get_viewport().set_input_as_handled() + + "Ctrl+Alt+E", "Ctrl+Option+E": # Add character leave event + var ev := DialogicCharacterEvent.new() + ev.action = DialogicCharacterEvent.Actions.LEAVE + _add_event_button_pressed(ev, true) + get_viewport().set_input_as_handled() + + "Ctrl+J": # Add jump event + _add_event_button_pressed(DialogicJumpEvent.new(), true) + get_viewport().set_input_as_handled() + "Ctrl+L": # Add label event + _add_event_button_pressed(DialogicLabelEvent.new(), true) + get_viewport().set_input_as_handled() + + ## Some shortcuts should be disabled when writing text. + var focus_owner: Control = get_viewport().gui_get_focus_owner() + if focus_owner is TextEdit or focus_owner is LineEdit or (focus_owner is Button and focus_owner.get_parent_control().name == "Spin"): + return + + match event.as_text(): + "Ctrl+Z": # UNDO + TimelineUndoRedo.undo() + indent_events() + get_viewport().set_input_as_handled() + + "Ctrl+Shift+Z", "Ctrl+Y": # REDO + TimelineUndoRedo.redo() + indent_events() + get_viewport().set_input_as_handled() + + "Up": #select previous + if (len(selected_items) == 1): + var prev := maxi(0, selected_items[0].get_index() - 1) + var prev_node := %Timeline.get_child(prev) + if (prev_node != selected_items[0]): + selected_items = [] + select_item(prev_node) + get_viewport().set_input_as_handled() + + "Down": #select next + if (len(selected_items) == 1): + var next := mini(%Timeline.get_child_count() - 1, selected_items[0].get_index() + 1) + var next_node := %Timeline.get_child(next) + if (next_node != selected_items[0]): + selected_items = [] + select_item(next_node) + get_viewport().set_input_as_handled() + + "Delete": + if (len(selected_items) != 0): + var events_indexed := get_events_indexed(selected_items) + TimelineUndoRedo.create_action("[D] Deleting "+str(len(selected_items))+" event(s).") + TimelineUndoRedo.add_do_method(delete_events_indexed.bind(events_indexed)) + TimelineUndoRedo.add_undo_method(add_events_indexed.bind(events_indexed)) + TimelineUndoRedo.commit_action() + get_viewport().set_input_as_handled() + + "Ctrl+A": # select all + if (len(selected_items) != 0): + select_all_items() + get_viewport().set_input_as_handled() + + "Ctrl+Shift+A": # deselect all + if (len(selected_items) != 0): + deselect_all_items() + get_viewport().set_input_as_handled() + + "Ctrl+C": + copy_selected_events() + get_viewport().set_input_as_handled() + + "Ctrl+V": + var events_list := get_clipboard_data() + var paste_position := -1 + if selected_items: + paste_position = selected_items[-1].get_index()+1 + else: + paste_position = %Timeline.get_child_count()-1 + if events_list: + TimelineUndoRedo.create_action("[D] Pasting "+str(len(events_list))+" event(s).") + TimelineUndoRedo.add_do_method(add_events_at_index.bind(events_list, paste_position)) + TimelineUndoRedo.add_undo_method(delete_events_at_index.bind(paste_position+1, len(events_list))) + TimelineUndoRedo.commit_action() + get_viewport().set_input_as_handled() + + + "Ctrl+X": + var events_indexed := get_events_indexed(selected_items) + TimelineUndoRedo.create_action("[D] Cut "+str(len(selected_items))+" event(s).") + TimelineUndoRedo.add_do_method(cut_events_indexed.bind(events_indexed)) + TimelineUndoRedo.add_undo_method(add_events_indexed.bind(events_indexed)) + TimelineUndoRedo.commit_action() + get_viewport().set_input_as_handled() + + "Ctrl+D": + duplicate_selected() + get_viewport().set_input_as_handled() + + "Alt+Up", "Option+Up": + if len(selected_items) > 0: + offset_blocks_by_index(selected_items, -1) + + get_viewport().set_input_as_handled() + + "Alt+Down", "Option+Down": + if len(selected_items) > 0: + offset_blocks_by_index(selected_items, +1) + + get_viewport().set_input_as_handled() + + +func get_previous_character(double_previous := false) -> DialogicCharacter: + var character: DialogicCharacter = null + var idx: int = %Timeline.get_child_count() + if idx == 0: + return null + if len(selected_items): + idx = selected_items[0].get_index() + var one_skipped := false + idx += 1 + for i in range(selected_items[0].get_index()+1): + idx -= 1 + if !('resource' in %Timeline.get_child(idx) and 'character' in %Timeline.get_child(idx).resource): + continue + if %Timeline.get_child(idx).resource.character == null: + continue + if double_previous: + if %Timeline.get_child(idx).resource.character == character: + continue + if character != null: + if one_skipped: + one_skipped = false + else: + character = %Timeline.get_child(idx).resource.character + break + character = %Timeline.get_child(idx).resource.character + else: + character = %Timeline.get_child(idx).resource.character + break + return character + +#endregion + +#region SEARCH +################################################################################ + +var search_results := {} +func _search_timeline(search_text:String) -> bool: + for event in search_results: + if is_instance_valid(search_results[event]): + search_results[event].set_search_text("") + search_results[event].deselect() + search_results[event].queue_redraw() + search_results.clear() + + for block in %Timeline.get_children(): + if block.resource is DialogicTextEvent: + var text_field: TextEdit = block.get_node("%BodyContent").find_child("Field_Text_Multiline", true, false) + text_field.set_search_text(search_text) + if text_field.search(search_text, 0, 0, 0).x != -1: + search_results[block] = text_field + text_field.queue_redraw() + set_meta("current_search", search_text) + search_navigate(false) + return not search_results.is_empty() + + +func _search_navigate_down() -> void: + search_navigate(false) + + +func _search_navigate_up() -> void: + search_navigate(true) + + +func search_navigate(navigate_up := false) -> void: + var search_text: String = get_meta("current_search", "") + + if search_results.is_empty() or %Timeline.get_child_count() == 0: + return + if selected_items.is_empty(): + select_item(%Timeline.get_child(0), false) + + while not selected_items[0] in search_results: + select_item(%Timeline.get_child(wrapi(selected_items[0].get_index()+1, 0, %Timeline.get_child_count()-1)), false) + + var event: Node = selected_items[0] + var counter := 0 + while true: + counter += 1 + var field: TextEdit = search_results[event] + field.queue_redraw() + var result := search_text_field(field, search_text, navigate_up) + var current_line := field.get_selection_from_line() if field.has_selection() else -1 + var current_column := field.get_selection_from_column() if field.has_selection() else -1 + var next_is_in_this_event := false + if result.y == -1: + next_is_in_this_event = false + elif navigate_up: + if current_line == -1: + current_line = field.get_line_count()-1 + current_column = field.get_line(current_line).length() + next_is_in_this_event = result.x < current_column or result.y < current_line + else: + next_is_in_this_event = result.x > current_column or result.y > current_line + + if next_is_in_this_event: + if not event in selected_items: + select_item(event, false) + %TimelineArea.ensure_control_visible(event) + event._on_ToggleBodyVisibility_toggled(true) + field.select(result.y, result.x, result.y, result.x+len(search_text)) + break + + else: + field.deselect() + var index := search_results.keys().find(event) + event = search_results.keys()[wrapi(index+(-1 if navigate_up else 1), 0, search_results.size())] + + if counter > 5: + print("[Dialogic] Search failed.") + break + + +func search_text_field(field:TextEdit, search_text := "", navigate_up:= false) -> Vector2i: + var search_from_line: int = 0 + var search_from_column: int = 0 + if field.has_selection(): + if navigate_up: + search_from_line = field.get_selection_from_line() + search_from_column = field.get_selection_from_column()-1 + if search_from_column == -1: + search_from_line -= 1 + if search_from_line == -1: + return Vector2i(-1, -1) + search_from_column = field.get_line(search_from_line).length()-1 + else: + search_from_line = field.get_selection_to_line() + search_from_column = field.get_selection_to_column() + else: + if navigate_up: + search_from_line = field.get_line_count()-1 + search_from_column = field.get_line(search_from_line).length()-1 + + var search := field.search(search_text, 4 if navigate_up else 0, search_from_line, search_from_column) + return search + +#endregion diff --git a/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/timeline_editor_visual.tscn b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/timeline_editor_visual.tscn new file mode 100644 index 0000000..c3e4ffb --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/VisualEditor/timeline_editor_visual.tscn @@ -0,0 +1,111 @@ +[gd_scene load_steps=10 format=3 uid="uid://ysqbusmy0qma"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/TimelineEditor/VisualEditor/timeline_editor_visual.gd" id="1_8smxc"] +[ext_resource type="Theme" uid="uid://cqst728xxipcw" path="res://addons/dialogic/Editor/Theme/MainTheme.tres" id="2_x0fhp"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/TimelineEditor/VisualEditor/TimelineArea.gd" id="3_sap1x"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/Events/EventBlock/event_right_click_menu.gd" id="4_ugiq6"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_phyjj"] +content_margin_top = 10.0 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_plab4"] +bg_color = Color(0, 0, 0, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dov6v"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(1, 0.365, 0.365, 1) +draw_center = false +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +corner_detail = 1 + +[sub_resource type="Image" id="Image_y3447"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_vg181"] +image = SubResource("Image_y3447") + +[node name="TimelineVisualEditor" type="MarginContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 5 +theme_override_constants/margin_right = 5 +theme_override_constants/margin_bottom = 5 +script = ExtResource("1_8smxc") + +[node name="View" type="HSplitContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme = ExtResource("2_x0fhp") + +[node name="TimelineArea" type="ScrollContainer" parent="View"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_styles/panel = SubResource("StyleBoxEmpty_phyjj") +script = ExtResource("3_sap1x") + +[node name="Timeline" type="VBoxContainer" parent="View/TimelineArea"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="EventPopupMenu" type="PopupMenu" parent="View/TimelineArea"] +unique_name_in_owner = true +size = Vector2i(165, 124) +theme_override_styles/panel = SubResource("StyleBoxFlat_plab4") +theme_override_styles/hover = SubResource("StyleBoxFlat_dov6v") +item_count = 6 +item_0/text = "Documentation" +item_0/icon = SubResource("ImageTexture_vg181") +item_0/id = 0 +item_1/text = "" +item_1/id = -1 +item_1/separator = true +item_2/text = "Move up" +item_2/icon = SubResource("ImageTexture_vg181") +item_2/id = 2 +item_3/text = "Move down" +item_3/icon = SubResource("ImageTexture_vg181") +item_3/id = 3 +item_4/text = "" +item_4/id = -1 +item_4/separator = true +item_5/text = "Delete" +item_5/icon = SubResource("ImageTexture_vg181") +item_5/id = 5 +script = ExtResource("4_ugiq6") + +[node name="RightSidebar" type="ScrollContainer" parent="View"] +unique_name_in_owner = true +custom_minimum_size = Vector2(50, 0) +layout_mode = 2 +size_flags_stretch_ratio = 0.2 +horizontal_scroll_mode = 0 + +[node name="EventContainer" type="VBoxContainer" parent="View/RightSidebar"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.2 + +[connection signal="drag_completed" from="View/TimelineArea" to="." method="_on_timeline_area_drag_completed"] +[connection signal="index_pressed" from="View/TimelineArea/EventPopupMenu" to="." method="_on_event_popup_menu_index_pressed"] +[connection signal="resized" from="View/RightSidebar" to="." method="_on_right_sidebar_resized"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/test_timeline_scene.gd b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/test_timeline_scene.gd new file mode 100644 index 0000000..3c1d170 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/test_timeline_scene.gd @@ -0,0 +1,44 @@ +extends Control + +func _ready() -> void: + print("[Dialogic] Testing scene was started.") + if not ProjectSettings.get_setting('internationalization/locale/test', "").is_empty(): + print("Testing locale is: ", ProjectSettings.get_setting('internationalization/locale/test')) + $PauseIndictator.hide() + + var scene: Node = DialogicUtil.autoload().Styles.load_style(DialogicUtil.get_editor_setting('current_test_style', '')) + if not scene is CanvasLayer: + if scene is Control: + scene.position = get_viewport_rect().size/2.0 + if scene is Node2D: + scene.position = get_viewport_rect().size/2.0 + + randomize() + var current_timeline: String = DialogicUtil.get_editor_setting("current_timeline_path", "") + if not current_timeline: + get_tree().quit() + DialogicUtil.autoload().start(current_timeline) + DialogicUtil.autoload().timeline_ended.connect(get_tree().quit) + DialogicUtil.autoload().signal_event.connect(receive_event_signal) + DialogicUtil.autoload().text_signal.connect(receive_text_signal) + +func receive_event_signal(argument:String) -> void: + print("[Dialogic] Encountered a signal event: ", argument) + +func receive_text_signal(argument:String) -> void: + print("[Dialogic] Encountered a signal in text: ", argument) + +func _input(event:InputEvent) -> void: + if event is InputEventKey and event.pressed and event.keycode == KEY_ESCAPE: + DialogicUtil.autoload().paused = !DialogicUtil.autoload().paused + $PauseIndictator.visible = DialogicUtil.autoload().paused + + if (event is InputEventMouseButton + and event.is_pressed() + and event.button_index == MOUSE_BUTTON_MIDDLE): + var auto_skip: DialogicAutoSkip = DialogicUtil.autoload().Inputs.auto_skip + var is_auto_skip_enabled := auto_skip.enabled + + auto_skip.disable_on_unread_text = false + auto_skip.enabled = not is_auto_skip_enabled + diff --git a/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/test_timeline_scene.tscn b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/test_timeline_scene.tscn new file mode 100644 index 0000000..8789476 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/test_timeline_scene.tscn @@ -0,0 +1,25 @@ +[gd_scene load_steps=2 format=3 uid="uid://ud18ke1g2nw4"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/TimelineEditor/test_timeline_scene.gd" id="1_bamud"] + +[node name="TestTimelineScene" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_bamud") + +[node name="PauseIndictator" type="Label" parent="."] +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -65.0 +offset_top = 7.0 +offset_right = -8.0 +offset_bottom = 33.0 +grow_horizontal = 0 +text = "Paused" +metadata/_edit_layout_mode = 1 diff --git a/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/timeline_editor.gd b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/timeline_editor.gd new file mode 100644 index 0000000..e5302a7 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/timeline_editor.gd @@ -0,0 +1,238 @@ +@tool +extends DialogicEditor + +## Editor that holds both the visual and the text timeline editors. + +# references +enum EditorMode {VISUAL, TEXT} + +var current_editor_mode := EditorMode.VISUAL +var play_timeline_button: Button = null + + +## Overwrite. Register to the editor manager in here. +func _register() -> void: + resource_unsaved.connect(_on_resource_unsaved) + resource_saved.connect(_on_resource_saved) + + # register editor + editors_manager.register_resource_editor('dtl', self) + # add timeline button + var add_timeline_button: Button = editors_manager.add_icon_button( + load("res://addons/dialogic/Editor/Images/Toolbar/add-timeline.svg"), + "Add Timeline", + self) + add_timeline_button.pressed.connect(_on_create_timeline_button_pressed) + add_timeline_button.shortcut = Shortcut.new() + add_timeline_button.shortcut.events.append(InputEventKey.new()) + add_timeline_button.shortcut.events[0].keycode = KEY_1 + add_timeline_button.shortcut.events[0].ctrl_pressed = true + # play timeline button + play_timeline_button = editors_manager.add_custom_button( + "Play Timeline", + get_theme_icon("PlayScene", "EditorIcons"), + self) + play_timeline_button.pressed.connect(play_timeline) + play_timeline_button.tooltip_text = "Play the current timeline (CTRL+F5)" + if OS.get_name() == "macOS": + play_timeline_button.tooltip_text = "Play the current timeline (CTRL+B)" + + %VisualEditor.load_event_buttons() + + current_editor_mode = DialogicUtil.get_editor_setting('timeline_editor_mode', 0) + + match current_editor_mode: + EditorMode.VISUAL: + %VisualEditor.show() + %TextEditor.hide() + %SwitchEditorMode.text = "Text Editor" + EditorMode.TEXT: + %VisualEditor.hide() + %TextEditor.show() + %SwitchEditorMode.text = "Visual Editor" + + $NoTimelineScreen.show() + play_timeline_button.disabled = true + + +func _get_title() -> String: + return "Timeline" + + +func _get_icon() -> Texture: + return get_theme_icon("TripleBar", "EditorIcons") + + +## If this editor supports editing resources, load them here (overwrite in subclass) +func _open_resource(resource:Resource) -> void: + current_resource = resource + current_resource_state = ResourceStates.SAVED + match current_editor_mode: + EditorMode.VISUAL: + %VisualEditor.load_timeline(current_resource) + EditorMode.TEXT: + %TextEditor.load_timeline(current_resource) + $NoTimelineScreen.hide() + %TimelineName.text = DialogicResourceUtil.get_unique_identifier(current_resource.resource_path) + play_timeline_button.disabled = false + + +## If this editor supports editing resources, save them here (overwrite in subclass) +func _save() -> void: + match current_editor_mode: + EditorMode.VISUAL: + %VisualEditor.save_timeline() + EditorMode.TEXT: + %TextEditor.save_timeline() + + +func _input(event: InputEvent) -> void: + if event is InputEventKey: + var keycode := KEY_F5 + if OS.get_name() == "macOS": + keycode = KEY_B + if event.keycode == keycode and event.pressed: + if Input.is_key_pressed(KEY_CTRL): + play_timeline() + + if event.keycode == KEY_F and event.pressed: + if Input.is_key_pressed(KEY_CTRL): + if is_ancestor_of(get_viewport().gui_get_focus_owner()): + search_timeline() + + +## Method to play the current timeline. Connected to the button in the sidebar. +func play_timeline() -> void: + _save() + + var dialogic_plugin := DialogicUtil.get_dialogic_plugin() + + # Save the current opened timeline + DialogicUtil.set_editor_setting('current_timeline_path', current_resource.resource_path) + + DialogicUtil.get_dialogic_plugin().get_editor_interface().play_custom_scene("res://addons/dialogic/Editor/TimelineEditor/test_timeline_scene.tscn") + + +## Method to switch from visual to text editor (and vice versa). Connected to the button in the sidebar. +func toggle_editor_mode() -> void: + match current_editor_mode: + EditorMode.VISUAL: + current_editor_mode = EditorMode.TEXT + %VisualEditor.save_timeline() + %VisualEditor.hide() + %TextEditor.show() + %TextEditor.load_timeline(current_resource) + %SwitchEditorMode.text = "Visual Editor" + EditorMode.TEXT: + current_editor_mode = EditorMode.VISUAL + %TextEditor.save_timeline() + %TextEditor.hide() + %VisualEditor.load_timeline(current_resource) + %VisualEditor.show() + %SwitchEditorMode.text = "Text Editor" + _on_search_text_changed(%Search.text) + DialogicUtil.set_editor_setting('timeline_editor_mode', current_editor_mode) + + +func _on_resource_unsaved() -> void: + if current_resource: + current_resource.set_meta("timeline_not_saved", true) + + +func _on_resource_saved() -> void: + if current_resource: + current_resource.set_meta("timeline_not_saved", false) + + +func new_timeline(path:String) -> void: + _save() + var new_timeline := DialogicTimeline.new() + new_timeline.resource_path = path + new_timeline.set_meta('timeline_not_saved', true) + var err := ResourceSaver.save(new_timeline) + DialogicResourceUtil.update_directory('dtl') + editors_manager.edit_resource(new_timeline) + + +func _ready() -> void: + $NoTimelineScreen.add_theme_stylebox_override("panel", get_theme_stylebox("Background", "EditorStyles")) + + # switch editor mode button + %SwitchEditorMode.text = "Text editor" + %SwitchEditorMode.icon = get_theme_icon("ArrowRight", "EditorIcons") + %SwitchEditorMode.pressed.connect(toggle_editor_mode) + %SwitchEditorMode.custom_minimum_size.x = 200 * DialogicUtil.get_editor_scale() + + %SearchClose.icon = get_theme_icon("Close", "EditorIcons") + %SearchUp.icon = get_theme_icon("MoveUp", "EditorIcons") + %SearchDown.icon = get_theme_icon("MoveDown", "EditorIcons") + + + +func _on_create_timeline_button_pressed() -> void: + editors_manager.show_add_resource_dialog( + new_timeline, + '*.dtl; DialogicTimeline', + 'Create new timeline', + 'timeline', + ) + + +func _clear() -> void: + current_resource = null + current_resource_state = ResourceStates.SAVED + match current_editor_mode: + EditorMode.VISUAL: + %VisualEditor.clear_timeline_nodes() + EditorMode.TEXT: + %TextEditor.clear_timeline() + $NoTimelineScreen.show() + play_timeline_button.disabled = true + + +func get_current_editor() -> Node: + if current_editor_mode == 1: + return %TextEditor + return %VisualEditor + +#region SEARCH + +func search_timeline() -> void: + %SearchSection.show() + if get_viewport().gui_get_focus_owner() is TextEdit: + %Search.text = get_viewport().gui_get_focus_owner().get_selected_text() + _on_search_text_changed(%Search.text) + else: + %Search.text = "" + %Search.grab_focus() + + +func _on_close_search_pressed() -> void: + %SearchSection.hide() + %Search.text = "" + _on_search_text_changed('') + + +func _on_search_text_changed(new_text: String) -> void: + var editor: Node = null + var anything_found: bool = get_current_editor()._search_timeline(new_text) + if anything_found or new_text.is_empty(): + %SearchLabel.hide() + %Search.add_theme_color_override("font_color", get_theme_color("font_color", "Editor")) + else: + %SearchLabel.show() + %SearchLabel.add_theme_color_override("font_color", get_theme_color("error_color", "Editor")) + %Search.add_theme_color_override("font_color", get_theme_color("error_color", "Editor")) + %SearchLabel.text = "No Match" + + +func _on_search_down_pressed() -> void: + get_current_editor()._search_navigate_down() + + +func _on_search_up_pressed() -> void: + get_current_editor()._search_navigate_up() + +#endregion + + diff --git a/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/timeline_editor.tscn b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/timeline_editor.tscn new file mode 100644 index 0000000..ba77fb4 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/TimelineEditor/timeline_editor.tscn @@ -0,0 +1,163 @@ +[gd_scene load_steps=10 format=3 uid="uid://crce0na84rhfd"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/TimelineEditor/timeline_editor.gd" id="1_4aceh"] +[ext_resource type="PackedScene" uid="uid://ysqbusmy0qma" path="res://addons/dialogic/Editor/TimelineEditor/VisualEditor/timeline_editor_visual.tscn" id="2_qs7vc"] +[ext_resource type="PackedScene" uid="uid://dbpkta2tjsqim" path="res://addons/dialogic/Editor/Common/hint_tooltip_icon.tscn" id="2_yqd26"] +[ext_resource type="PackedScene" uid="uid://defdeav8rli6o" path="res://addons/dialogic/Editor/TimelineEditor/TextEditor/timeline_editor_text.tscn" id="3_up2bn"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/TimelineEditor/TextEditor/syntax_highlighter.gd" id="4_1t6bf"] + +[sub_resource type="Image" id="Image_43fqw"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_lvr8x"] +image = SubResource("Image_43fqw") + +[sub_resource type="SyntaxHighlighter" id="SyntaxHighlighter_7lpql"] +script = ExtResource("4_1t6bf") + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lpeon"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(1, 0.365, 0.365, 1) +draw_center = false +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +corner_detail = 1 + +[node name="Timeline" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_4aceh") + +[node name="VBox" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="HBox" type="HBoxContainer" parent="VBox"] +layout_mode = 2 + +[node name="TimelineName" type="Label" parent="VBox/HBox"] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"DialogicTitle" +text = "Cool Name" + +[node name="NameTooltip" parent="VBox/HBox" instance=ExtResource("2_yqd26")] +layout_mode = 2 +tooltip_text = "This unique identifier is based on the file name. You can change it in the Reference Manager. +This is what you should use in a jump event to reference this timeline. + +You can also use this name in Dialogic.start()." +texture = SubResource("ImageTexture_lvr8x") +hint_text = "This unique identifier is based on the file name. You can change it in the Reference Manager. +This is what you should use in a jump event to reference this timeline. + +You can also use this name in Dialogic.start()." + +[node name="SwitchEditorMode" type="Button" parent="VBox/HBox"] +unique_name_in_owner = true +custom_minimum_size = Vector2(200, 0) +layout_mode = 2 +size_flags_horizontal = 10 +size_flags_vertical = 4 +tooltip_text = "Switch between Text Editor and Visual Editor" +text = "Text editor" +icon = SubResource("ImageTexture_lvr8x") + +[node name="VisualEditor" parent="VBox" instance=ExtResource("2_qs7vc")] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +theme_override_constants/margin_left = 0 +theme_override_constants/margin_top = 0 +theme_override_constants/margin_right = 0 +theme_override_constants/margin_bottom = 0 + +[node name="TextEditor" parent="VBox" instance=ExtResource("3_up2bn")] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +syntax_highlighter = SubResource("SyntaxHighlighter_7lpql") +symbol_lookup_on_click = true +line_folding = false +gutters_draw_fold_gutter = false + +[node name="SearchSection" type="HBoxContainer" parent="VBox"] +unique_name_in_owner = true +visible = false +layout_mode = 2 + +[node name="Search" type="LineEdit" parent="VBox/SearchSection"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "Search" + +[node name="SearchLabel" type="Label" parent="VBox/SearchSection"] +unique_name_in_owner = true +visible = false +layout_mode = 2 + +[node name="SearchUp" type="Button" parent="VBox/SearchSection"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="SearchDown" type="Button" parent="VBox/SearchSection"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="SearchClose" type="Button" parent="VBox/SearchSection"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="NoTimelineScreen" type="PanelContainer" parent="."] +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_lpeon") + +[node name="CenterContainer" type="CenterContainer" parent="NoTimelineScreen"] +layout_mode = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="NoTimelineScreen/CenterContainer"] +custom_minimum_size = Vector2(250, 0) +layout_mode = 2 + +[node name="Label" type="Label" parent="NoTimelineScreen/CenterContainer/VBoxContainer"] +layout_mode = 2 +text = "No timeline opened. +Create a timeline or double-click one in the file system dock." +horizontal_alignment = 1 +autowrap_mode = 3 + +[node name="CreateTimelineButton" type="Button" parent="NoTimelineScreen/CenterContainer/VBoxContainer"] +layout_mode = 2 +text = "Create New Timeline" + +[connection signal="text_changed" from="VBox/SearchSection/Search" to="." method="_on_search_text_changed"] +[connection signal="pressed" from="VBox/SearchSection/SearchUp" to="." method="_on_search_up_pressed"] +[connection signal="pressed" from="VBox/SearchSection/SearchDown" to="." method="_on_search_down_pressed"] +[connection signal="pressed" from="VBox/SearchSection/SearchClose" to="." method="_on_close_search_pressed"] +[connection signal="pressed" from="NoTimelineScreen/CenterContainer/VBoxContainer/CreateTimelineButton" to="." method="_on_create_timeline_button_pressed"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/dialogic_editor.gd b/addons/dialogic-main/addons/dialogic/Editor/dialogic_editor.gd new file mode 100644 index 0000000..353958a --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/dialogic_editor.gd @@ -0,0 +1,66 @@ +@tool +class_name DialogicEditor +extends Control + +## Base class for all dialogic editors. + +# These signals will automatically be emitted if current_resource_state is changed. +signal resource_saved() +signal resource_unsaved() + +signal opened + +var current_resource: Resource + +## State of the current resource +enum ResourceStates {SAVED, UNSAVED} +var current_resource_state: ResourceStates: + set(value): + current_resource_state = value + if value == ResourceStates.SAVED: + resource_saved.emit() + else: + resource_unsaved.emit() + +var editors_manager: Control +# text displayed on the current resource label on non-resource editors +var alternative_text: String = "" + +## Overwrite. Register to the editor manager in here. +func _register() -> void: + pass + + +## Used on the tab +func _get_icon() -> Texture: + return null + +## Used on the tab +func _get_title() -> String: + return "" + + +## If this editor supports editing resources, load them here (overwrite in subclass) +func _open_resource(_resource:Resource) -> void: + pass + + +## If this editor supports editing resources, save them here (overwrite in subclass) +func _save() -> void: + pass + + +## Overwrite. Called when this editor is shown. (show() doesn't have to be called) +func _open(_extra_info:Variant = null) -> void: + pass + + +## Overwrite. Called when another editor is opened. (hide() doesn't have to be called) +func _close() -> void: + pass + + +## Overwrite. Called to clear all current state and resource from the editor. +## Although rarely used, sometimes you just want NO timeline to be open. +func _clear() -> void: + pass diff --git a/addons/dialogic-main/addons/dialogic/Editor/editor_main.gd b/addons/dialogic-main/addons/dialogic/Editor/editor_main.gd new file mode 100644 index 0000000..5994057 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/editor_main.gd @@ -0,0 +1,336 @@ +@tool +extends Control + +## Editor root node. Most editor functionality is handled by EditorsManager node! + +var plugin_reference: EditorPlugin = null +var editors_manager: Control = null + +var editor_file_dialog: EditorFileDialog + +@onready var sidebar := %Sidebar as DialogicSidebar + +func _ready() -> void: + if get_parent() is SubViewport: + return + + ## CONNECTIONS + sidebar.show_sidebar.connect(_on_sidebar_toggled) + + ## REFERENCES + editors_manager = $EditorsManager + var button: Button = editors_manager.add_icon_button( + get_theme_icon("MakeFloating", "EditorIcons"), "Make floating" + ) + button.pressed.connect(toggle_floating_window) + + # File dialog + editor_file_dialog = EditorFileDialog.new() + add_child(editor_file_dialog) + + var info_message := Label.new() + info_message.add_theme_color_override("font_color", get_theme_color("warning_color", "Editor")) + editor_file_dialog.get_line_edit().get_parent().add_sibling(info_message) + info_message.get_parent().move_child(info_message, info_message.get_index() - 1) + editor_file_dialog.set_meta("info_message_label", info_message) + + $SaveConfirmationDialog.add_button("No Saving Please!", true, "nosave") + $SaveConfirmationDialog.hide() + update_theme_additions() + EditorInterface.get_base_control().theme_changed.connect(update_theme_additions) + + +func _on_sidebar_toggled(sidebar_shown: bool) -> void: + var h_split := (%HSplit as HSplitContainer) + if sidebar_shown: + h_split.dragger_visibility = SplitContainer.DRAGGER_VISIBLE + h_split.split_offset = 150 + h_split.collapsed = false + else: + h_split.dragger_visibility = SplitContainer.DRAGGER_HIDDEN_COLLAPSED + h_split.split_offset = 0 + h_split.collapsed = true + + +func update_theme_additions() -> void: + add_theme_stylebox_override( + "panel", + ( + DCSS + . inline( + { + "background": get_theme_color("base_color", "Editor"), + "padding": + [5 * DialogicUtil.get_editor_scale(), 5 * DialogicUtil.get_editor_scale()], + } + ) + ) + ) + var holder_panel := ( + DCSS + . inline( + { + "border-radius": 5, + #'border': 2, + #'border-color': get_theme_color("base_color", "Editor"), + "background": get_theme_color("dark_color_2", "Editor"), + "padding": + [5 * DialogicUtil.get_editor_scale(), 5 * DialogicUtil.get_editor_scale()], + } + ) + ) + holder_panel.border_width_top = 0 + holder_panel.corner_radius_top_left = 0 + editors_manager.editors_holder.add_theme_stylebox_override("panel", holder_panel) + + if theme == null: + theme = Theme.new() + theme.clear() + + theme.set_type_variation("DialogicTitle", "Label") + theme.set_font("font", "DialogicTitle", get_theme_font("title", "EditorFonts")) + theme.set_color("font_color", "DialogicTitle", get_theme_color("warning_color", "Editor")) + theme.set_color( + "font_uneditable_color", "DialogicTitle", get_theme_color("warning_color", "Editor") + ) + theme.set_color( + "font_selected_color", "DialogicTitle", get_theme_color("warning_color", "Editor") + ) + theme.set_font_size( + "font_size", "DialogicTitle", get_theme_font_size("doc_size", "EditorFonts") + ) + + theme.set_type_variation("DialogicSubTitle", "Label") + theme.set_font("font", "DialogicSubTitle", get_theme_font("title", "EditorFonts")) + theme.set_font_size( + "font_size", "DialogicSubTitle", get_theme_font_size("doc_size", "EditorFonts") + ) + theme.set_color("font_color", "DialogicSubTitle", get_theme_color("accent_color", "Editor")) + + theme.set_type_variation("DialogicPanelA", "PanelContainer") + var panel_style := ( + DCSS + . inline( + { + "border-radius": 10, + "background": get_theme_color("base_color", "Editor"), + "padding": [5, 5], + } + ) + ) + theme.set_stylebox("panel", "DialogicPanelA", panel_style) + theme.set_stylebox("normal", "DialogicPanelA", panel_style) + + var dark_panel := panel_style.duplicate() + dark_panel.bg_color = get_theme_color("dark_color_3", "Editor") + theme.set_stylebox("panel", "DialogicPanelDarkA", dark_panel) + + var cornerless_panel := panel_style.duplicate() + cornerless_panel.corner_radius_top_left = 0 + theme.set_stylebox("panel", "DialogicPanelA_cornerless", cornerless_panel) + + # panel used for example for portrait previews in character editor + theme.set_type_variation("DialogicPanelB", "PanelContainer") + var side_panel: StyleBoxFlat = panel_style.duplicate() + side_panel.corner_radius_top_left = 0 + side_panel.corner_radius_bottom_left = 0 + side_panel.expand_margin_left = get_theme_constant("separation", "SplitContainer") + side_panel.bg_color = get_theme_color("dark_color_2", "Editor") + side_panel.set_border_width_all(1) + side_panel.border_width_left = 0 + side_panel.border_color = get_theme_color("contrast_color_2", "Editor") + theme.set_stylebox("panel", "DialogicPanelB", side_panel) + + theme.set_type_variation("DialogicEventEdit", "Control") + var edit_panel := StyleBoxFlat.new() + edit_panel.draw_center = true + edit_panel.bg_color = get_theme_color("accent_color", "Editor") + edit_panel.bg_color.a = 0.05 + edit_panel.border_width_bottom = 2 + edit_panel.border_color = get_theme_color("accent_color", "Editor").lerp( + get_theme_color("dark_color_2", "Editor"), 0.4 + ) + edit_panel.content_margin_left = 5 + edit_panel.content_margin_right = 5 + edit_panel.set_corner_radius_all(1) + theme.set_stylebox("panel", "DialogicEventEdit", edit_panel) + theme.set_stylebox("normal", "DialogicEventEdit", edit_panel) + + var focus_edit := edit_panel.duplicate() + focus_edit.border_color = get_theme_color("property_color_z", "Editor") + focus_edit.draw_center = false + theme.set_stylebox("focus", "DialogicEventEdit", focus_edit) + + var hover_edit := edit_panel.duplicate() + hover_edit.border_color = get_theme_color("warning_color", "Editor") + + theme.set_stylebox("hover", "DialogicEventEdit", hover_edit) + var disabled_edit := edit_panel.duplicate() + disabled_edit.border_color = get_theme_color("property_color", "Editor") + theme.set_stylebox("disabled", "DialogicEventEdit", disabled_edit) + + theme.set_type_variation("DialogicHintText", "Label") + theme.set_color("font_color", "DialogicHintText", get_theme_color("readonly_color", "Editor")) + theme.set_font("font", "DialogicHintText", get_theme_font("doc_italic", "EditorFonts")) + + theme.set_type_variation("DialogicHintText2", "Label") + theme.set_color( + "font_color", "DialogicHintText2", get_theme_color("property_color_w", "Editor") + ) + theme.set_font("font", "DialogicHintText2", get_theme_font("doc_italic", "EditorFonts")) + + theme.set_type_variation("DialogicSection", "Label") + theme.set_font("font", "DialogicSection", get_theme_font("main_msdf", "EditorFonts")) + theme.set_color("font_color", "DialogicSection", get_theme_color("property_color_z", "Editor")) + theme.set_font_size( + "font_size", "DialogicSection", get_theme_font_size("doc_size", "EditorFonts") + ) + + theme.set_type_variation("DialogicSettingsSection", "DialogicSection") + theme.set_font("font", "DialogicSettingsSection", get_theme_font("main_msdf", "EditorFonts")) + theme.set_color( + "font_color", "DialogicSettingsSection", get_theme_color("property_color_z", "Editor") + ) + theme.set_font_size( + "font_size", "DialogicSettingsSection", get_theme_font_size("doc_size", "EditorFonts") + ) + + theme.set_type_variation("DialogicSectionBig", "DialogicSection") + theme.set_color("font_color", "DialogicSectionBig", get_theme_color("accent_color", "Editor")) + theme.set_font_size( + "font_size", "DialogicSectionBig", get_theme_font_size("doc_title_size", "EditorFonts") + ) + + theme.set_type_variation("DialogicLink", "LinkButton") + theme.set_color("font_hover_color", "DialogicLink", get_theme_color("warning_color", "Editor")) + + theme.set_type_variation("DialogicMegaSeparator", "HSeparator") + ( + theme + . set_stylebox( + "separator", + "DialogicMegaSeparator", + ( + DCSS + . inline( + { + "border-radius": 10, + "border": 0, + "background": get_theme_color("accent_color", "Editor"), + "padding": [5, 5], + } + ) + ) + ) + ) + theme.set_constant("separation", "DialogicMegaSeparator", 50) + + theme.set_type_variation("DialogicTextEventTextEdit", "CodeEdit") + var editor_settings := plugin_reference.get_editor_interface().get_editor_settings() + var text_panel := ( + DCSS + . inline( + { + "border-radius": 8, + "background": + editor_settings.get_setting("text_editor/theme/highlighting/background_color").lerp( + editor_settings.get_setting("text_editor/theme/highlighting/text_color"), 0.05 + ), + "padding": [8, 8], + } + ) + ) + text_panel.content_margin_bottom = 5 + text_panel.content_margin_left = 13 + theme.set_stylebox("normal", "DialogicTextEventTextEdit", text_panel) + + var event_field_group_panel := DCSS.inline({ + 'border-radius': 8, + "border":1, + "padding":2, + "boder-color": get_theme_color("property_color", "Editor"), + "background":"none"}) + theme.set_type_variation("DialogicEventEditGroup", "PanelContainer") + theme.set_stylebox("panel", "DialogicEventEditGroup", event_field_group_panel) + + theme.set_icon('Plugin', 'Dialogic', load("res://addons/dialogic/Editor/Images/plugin-icon.svg")) + + +## Switches from floating window mode to embedded mode based on current mode +func toggle_floating_window() -> void: + if get_parent() is Window: + swap_to_embedded_editor() + else: + swap_to_floating_window() + + +## Removes the main control from it's parent and adds it to a new Window node +func swap_to_floating_window() -> void: + if get_parent() is Window: + return + + var parent := get_parent() + get_parent().remove_child(self) + var window := Window.new() + parent.add_child(window) + window.add_child(self) + window.title = "Dialogic" + window.close_requested.connect(swap_to_embedded_editor) + window.content_scale_mode = Window.CONTENT_SCALE_MODE_CANVAS_ITEMS + window.content_scale_aspect = Window.CONTENT_SCALE_ASPECT_EXPAND + window.size = size + window.min_size = Vector2(500, 500) + set_anchors_preset(Control.PRESET_FULL_RECT) + window.disable_3d = true + window.wrap_controls = true + window.popup_centered() + plugin_reference.get_editor_interface().set_main_screen_editor("2D") + + +## Removes the main control from the window node and adds it to it's grandparent +## which is the original owner. +func swap_to_embedded_editor() -> void: + if not get_parent() is Window: + return + + var window := get_parent() + get_parent().remove_child(self) + plugin_reference.get_editor_interface().set_main_screen_editor("Dialogic") + window.get_parent().add_child(self) + window.queue_free() + + +func godot_file_dialog( + callable: Callable, + filter: String, + mode := EditorFileDialog.FILE_MODE_OPEN_FILE, + window_title := "Save", + current_file_name := "New_File", + saving_something := false, + extra_message: String = "" +) -> EditorFileDialog: + for connection in editor_file_dialog.file_selected.get_connections(): + editor_file_dialog.file_selected.disconnect(connection.callable) + for connection in editor_file_dialog.dir_selected.get_connections(): + editor_file_dialog.dir_selected.disconnect(connection.callable) + editor_file_dialog.file_mode = mode + editor_file_dialog.clear_filters() + editor_file_dialog.popup_centered_ratio(0.6) + editor_file_dialog.add_filter(filter) + editor_file_dialog.title = window_title + editor_file_dialog.current_file = current_file_name + editor_file_dialog.disable_overwrite_warning = !saving_something + if extra_message: + editor_file_dialog.get_meta("info_message_label").show() + editor_file_dialog.get_meta("info_message_label").text = extra_message + else: + editor_file_dialog.get_meta("info_message_label").hide() + + if mode == EditorFileDialog.FILE_MODE_OPEN_FILE or mode == EditorFileDialog.FILE_MODE_SAVE_FILE: + editor_file_dialog.file_selected.connect(callable) + elif mode == EditorFileDialog.FILE_MODE_OPEN_DIR: + editor_file_dialog.dir_selected.connect(callable) + elif mode == EditorFileDialog.FILE_MODE_OPEN_ANY: + editor_file_dialog.dir_selected.connect(callable) + editor_file_dialog.file_selected.connect(callable) + return editor_file_dialog diff --git a/addons/dialogic-main/addons/dialogic/Editor/editor_main.tscn b/addons/dialogic-main/addons/dialogic/Editor/editor_main.tscn new file mode 100644 index 0000000..849ad79 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/editor_main.tscn @@ -0,0 +1,161 @@ +[gd_scene load_steps=18 format=3 uid="uid://de6yhw4r8jqb3"] + +[ext_resource type="Script" path="res://addons/dialogic/Editor/editor_main.gd" id="1_x88ov"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/editors_manager.gd" id="2_pe2tl"] +[ext_resource type="Texture2D" uid="uid://dybg3l5pwetne" path="res://addons/dialogic/Editor/Images/plugin-icon.svg" id="2_scwcl"] +[ext_resource type="PackedScene" uid="uid://cwe3r2tbh2og1" path="res://addons/dialogic/Editor/Common/side_bar.tscn" id="3_lp6hj"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/Common/toolbar.gd" id="4_6cx8s"] +[ext_resource type="Texture2D" uid="uid://bbea0efx0ybu7" path="res://addons/dialogic/Editor/Images/Resources/character.svg" id="6_8yp76"] +[ext_resource type="Texture2D" uid="uid://b5xwnxdb7064n" path="res://addons/dialogic/Modules/Glossary/icon.svg" id="7_45ytg"] +[ext_resource type="Texture2D" uid="uid://1mccycya6eua" path="res://addons/dialogic/Modules/StyleEditor/styles_icon.svg" id="8_jj1i6"] +[ext_resource type="Texture2D" uid="uid://ckilxvwc34s84" path="res://addons/dialogic/Modules/Variable/variable.svg" id="9_k4reh"] +[ext_resource type="PackedScene" uid="uid://c7lmt5cp7bxcm" path="res://addons/dialogic/Editor/Common/reference_manager.tscn" id="10_l1rf8"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/Common/reference_manager_window.gd" id="10_xbkrt"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/TimelineEditor/TextEditor/CodeCompletionHelper.gd" id="11_fyce4"] +[ext_resource type="Script" path="res://addons/dialogic/Editor/Common/update_manager.gd" id="14_l6b1p"] +[ext_resource type="PackedScene" uid="uid://vv3m5m68fwg7" path="res://addons/dialogic/Editor/Common/update_install_window.tscn" id="15_cu4xj"] + +[sub_resource type="Image" id="Image_uqxml"] +data = { +"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_drcn6"] +image = SubResource("Image_uqxml") + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5bs7k"] +content_margin_left = 8.0 +content_margin_top = 8.0 +content_margin_right = 8.0 +content_margin_bottom = 8.0 +bg_color = Color(0.1155, 0.132, 0.1595, 1) +corner_detail = 1 +anti_aliasing = false + +[node name="EditorView" type="ScrollContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource("1_x88ov") + +[node name="EditorsManager" type="Control" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource("2_pe2tl") + +[node name="HSplit" type="HSplitContainer" parent="EditorsManager"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_vertical = 3 +theme_override_constants/separation = 0 +split_offset = 150 + +[node name="Sidebar" parent="EditorsManager/HSplit" instance=ExtResource("3_lp6hj")] +unique_name_in_owner = true +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +split_offset = 0 + +[node name="VBox" type="VBoxContainer" parent="EditorsManager/HSplit"] +layout_mode = 2 +theme_override_constants/separation = 0 + +[node name="Toolbar" type="HBoxContainer" parent="EditorsManager/HSplit/VBox"] +layout_mode = 2 +size_flags_vertical = 0 +mouse_filter = 2 +alignment = 2 +script = ExtResource("4_6cx8s") + +[node name="EditorTabBar" type="TabBar" parent="EditorsManager/HSplit/VBox/Toolbar"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 8 +tab_count = 7 +tab_0/icon = ExtResource("2_scwcl") +tab_1/title = "Timeline" +tab_1/icon = SubResource("ImageTexture_drcn6") +tab_2/title = "Character" +tab_2/icon = ExtResource("6_8yp76") +tab_3/title = "Glossary" +tab_3/icon = ExtResource("7_45ytg") +tab_4/title = "Layouts" +tab_4/icon = ExtResource("8_jj1i6") +tab_5/title = "Variables" +tab_5/icon = ExtResource("9_k4reh") +tab_6/title = "Settings" +tab_6/icon = SubResource("ImageTexture_drcn6") + +[node name="CustomButtons" type="HBoxContainer" parent="EditorsManager/HSplit/VBox/Toolbar"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="Editors" type="PanelContainer" parent="EditorsManager/HSplit/VBox"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="CodeCompletionHelper" type="Node" parent="EditorsManager"] +script = ExtResource("11_fyce4") + +[node name="SaveConfirmationDialog" type="AcceptDialog" parent="."] +size = Vector2i(207, 100) + +[node name="ResourceRenameWarning" type="AcceptDialog" parent="."] +title = "Dialogic resource renamed!" +initial_position = 5 +size = Vector2i(494, 135) +ok_button_text = "Show Unique Identifiers" +dialog_text = "You renamed a dialogic resource. This does NOT automatically rename the unique identifier for this resource. Consider checking in the Reference Manager if the identifiers are still the way you want them." +dialog_autowrap = true + +[node name="ReferenceManager" type="Window" parent="."] +disable_3d = true +title = "Reference Manager" +initial_position = 2 +size = Vector2i(858, 442) +visible = false +wrap_controls = true +content_scale_mode = 1 +content_scale_aspect = 4 +script = ExtResource("10_xbkrt") + +[node name="Manager" parent="ReferenceManager" instance=ExtResource("10_l1rf8")] +theme_override_styles/panel = SubResource("StyleBoxFlat_5bs7k") + +[node name="UpdateManager" type="Node" parent="."] +script = ExtResource("14_l6b1p") + +[node name="Window" type="Window" parent="UpdateManager"] +title = "Dialogic Update Checker" +initial_position = 2 +size = Vector2i(600, 400) +visible = false +wrap_controls = true + +[node name="UpdateInstallWindow" parent="UpdateManager/Window" instance=ExtResource("15_cu4xj")] + +[node name="UpdateCheckRequest" type="HTTPRequest" parent="UpdateManager"] +timeout = 5.0 + +[node name="DownloadRequest" type="HTTPRequest" parent="UpdateManager"] + +[connection signal="close_requested" from="ReferenceManager" to="ReferenceManager" method="_on_close_requested"] +[connection signal="downdload_completed" from="UpdateManager" to="UpdateManager/Window/UpdateInstallWindow" method="_on_update_manager_downdload_completed"] +[connection signal="update_check_completed" from="UpdateManager" to="UpdateManager" method="_on_update_check_completed"] +[connection signal="close_requested" from="UpdateManager/Window" to="UpdateManager/Window/UpdateInstallWindow" method="_on_window_close_requested"] +[connection signal="request_completed" from="UpdateManager/UpdateCheckRequest" to="UpdateManager" method="_on_UpdateCheck_request_completed"] +[connection signal="request_completed" from="UpdateManager/DownloadRequest" to="UpdateManager" method="_on_DownloadRequest_completed"] diff --git a/addons/dialogic-main/addons/dialogic/Editor/editors_manager.gd b/addons/dialogic-main/addons/dialogic/Editor/editors_manager.gd new file mode 100644 index 0000000..029a919 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Editor/editors_manager.gd @@ -0,0 +1,284 @@ +@tool +extends Control + +## Node that manages editors, the toolbar and the sidebar. + +signal resource_opened(resource) +signal editor_changed(previous, current) + +### References +@onready var hsplit := $HSplit +@onready var sidebar := $HSplit/Sidebar +@onready var editors_holder := $HSplit/VBox/Editors +@onready var toolbar := $HSplit/VBox/Toolbar +@onready var tabbar := $HSplit/VBox/Toolbar/EditorTabBar + +var reference_manager: Node: + get: + return get_node("../ReferenceManager") + +## Information on supported resource extensions and registered editors +var current_editor: DialogicEditor = null +var previous_editor: DialogicEditor = null +var editors := {} +var supported_file_extensions := [] +var used_resources_cache: Array = [] + + +################################################################################ +## REGISTERING EDITORS +################################################################################ + +## Asks all childs of the editor holder to register +func _ready() -> void: + if owner.get_parent() is SubViewport: + return + + tabbar.clear_tabs() + + # Load base editors + _add_editor("res://addons/dialogic/Editor/HomePage/home_page.tscn") + _add_editor("res://addons/dialogic/Editor/TimelineEditor/timeline_editor.tscn") + _add_editor("res://addons/dialogic/Editor/CharacterEditor/character_editor.tscn") + + # Load custom editors + for indexer in DialogicUtil.get_indexers(): + for editor_path in indexer._get_editors(): + _add_editor(editor_path) + _add_editor("res://addons/dialogic/Editor/Settings/settings_editor.tscn") + + tabbar.tab_clicked.connect(_on_editors_tab_changed) + + # Needs to be done here to make sure this node is ready when doing the register calls + for editor in editors_holder.get_children(): + editor.editors_manager = self + editor._register() + + DialogicResourceUtil.update() + + await get_parent().ready + await get_tree().process_frame + + load_saved_state() + used_resources_cache = DialogicUtil.get_editor_setting('last_resources', []) + sidebar.update_resource_list(used_resources_cache) + + find_parent('EditorView').plugin_reference.get_editor_interface().get_file_system_dock().files_moved.connect(_on_file_moved) + find_parent('EditorView').plugin_reference.get_editor_interface().get_file_system_dock().file_removed.connect(_on_file_removed) + + hsplit.set("theme_override_constants/separation", get_theme_constant("base_margin", "Editor") * DialogicUtil.get_editor_scale()) + + +func _add_editor(path:String) -> void: + var editor: DialogicEditor = load(path).instantiate() + editors_holder.add_child(editor) + editor.hide() + tabbar.add_tab(editor._get_title(), editor._get_icon()) + + +## Call to register an editor/tab that edits a resource with a custom ending. +func register_resource_editor(resource_extension:String, editor:DialogicEditor) -> void: + editors[editor.name] = {'node':editor, 'buttons':[], 'extension': resource_extension} + supported_file_extensions.append(resource_extension) + editor.resource_saved.connect(_on_resource_saved.bind(editor)) + editor.resource_unsaved.connect(_on_resource_unsaved.bind(editor)) + + +## Call to register an editor/tab that doesn't edit a resource +func register_simple_editor(editor:DialogicEditor) -> void: + editors[editor.name] = {'node': editor, 'buttons':[]} + + +## Call to add an icon button. These buttons are always visible. +func add_icon_button(icon:Texture, tooltip:String, editor:DialogicEditor=null) -> Node: + var button: Button = toolbar.add_icon_button(icon, tooltip) + if editor != null: + editors[editor.name]['buttons'].append(button) + return button + + +## Call to add a custom action button. Only visible if editor is visible. +func add_custom_button(label:String, icon:Texture, editor:DialogicEditor) -> Node: + var button: Button = toolbar.add_custom_button(label, icon) + editors[editor.name]['buttons'].append(button) + return button + + +func can_edit_resource(resource:Resource) -> bool: + return resource.resource_path.get_extension() in supported_file_extensions + + +################################################################################ +## OPENING/CLOSING +################################################################################ + + +func _on_editors_tab_changed(tab:int) -> void: + open_editor(editors_holder.get_child(tab)) + + +func edit_resource(resource:Resource, save_previous:bool = true, silent:= false) -> void: + if not resource: + # The resource doesn't exists, show an error + print("[Dialogic] The resource you are trying to edit doesn't exist any more.") + return + + if current_editor and save_previous: + current_editor._save() + + if !resource.resource_path in used_resources_cache: + used_resources_cache.append(resource.resource_path) + sidebar.update_resource_list(used_resources_cache) + + ## Open the correct editor + var extension: String = resource.resource_path.get_extension() + for editor in editors.values(): + if editor.get('extension', '') == extension: + editor['node']._open_resource(resource) + if !silent: + open_editor(editor['node'], false) + if !silent: + resource_opened.emit(resource) + + + +## Only works if there was a different editor opened previously +func toggle_editor(editor) -> void: + if editor.visible: + open_editor(previous_editor, true) + else: + open_editor(editor, true) + + +## Shows the given editor +func open_editor(editor:DialogicEditor, save_previous: bool = true, extra_info:Variant = null) -> void: + if current_editor and save_previous: + current_editor._save() + + if current_editor: + current_editor._close() + current_editor.hide() + + if current_editor != previous_editor: + previous_editor = current_editor + + editor._open(extra_info) + editor.opened.emit() + current_editor = editor + editor.show() + tabbar.current_tab = editor.get_index() + + if editor.current_resource: + var text: String = editor.current_resource.resource_path.get_file() + if editor.current_resource_state == DialogicEditor.ResourceStates.UNSAVED: + text += "(*)" + + ## This makes custom button editor-specific + ## I think it's better without. + + save_current_state() + editor_changed.emit(previous_editor, current_editor) + + +## Rarely used to completely clear an editor. +func clear_editor(editor:DialogicEditor, save:bool = false) -> void: + if save: + editor._save() + + editor._clear() + +## Shows a file selector. Calls [accept_callable] once accepted +func show_add_resource_dialog(accept_callable:Callable, filter:String = "*", title = "New resource", default_name = "new_character", mode = EditorFileDialog.FILE_MODE_SAVE_FILE) -> void: + find_parent('EditorView').godot_file_dialog( + _on_add_resource_dialog_accepted.bind(accept_callable), + filter, + mode, + title, + default_name, + true, + "Do not use \"'()!;:/\\*# in character or timeline names!" + ) + + +func _on_add_resource_dialog_accepted(path:String, callable:Callable) -> void: + var file_name: String = path.get_file().trim_suffix('.'+path.get_extension()) + for i in ['#','&','+',';','(',')','!','*','*','"',"'",'%', '$', ':','.',',']: + file_name = file_name.replace(i, '') + callable.call(path.trim_suffix(path.get_file()).path_join(file_name)+'.'+path.get_extension()) + + +## Called by the plugin.gd script on CTRL+S or Debug Game start +func save_current_resource() -> void: + if current_editor: + current_editor._save() + + +## Change the resource state +func _on_resource_saved(editor:DialogicEditor): + sidebar.set_unsaved_indicator(true) + + +## Change the resource state +func _on_resource_unsaved(editor:DialogicEditor): + sidebar.set_unsaved_indicator(false) + + +## Tries opening the last resource +func load_saved_state() -> void: + var current_resources: Dictionary = DialogicUtil.get_editor_setting('current_resources', {}) + for editor in current_resources.keys(): + editors[editor]['node']._open_resource(load(current_resources[editor])) + + var current_editor: String = DialogicUtil.get_editor_setting('current_editor', 'HomePage') + open_editor(editors[current_editor]['node']) + + +func save_current_state() -> void: + DialogicUtil.set_editor_setting('current_editor', current_editor.name) + var current_resources: Dictionary = {} + for editor in editors.values(): + if editor['node'].current_resource != null: + current_resources[editor['node'].name] = editor['node'].current_resource.resource_path + DialogicUtil.set_editor_setting('current_resources', current_resources) + + +func _on_file_moved(old_name:String, new_name:String) -> void: + if !old_name.get_extension() in supported_file_extensions: + return + + used_resources_cache = DialogicUtil.get_editor_setting('last_resources', []) + if old_name in used_resources_cache: + used_resources_cache.insert(used_resources_cache.find(old_name), new_name) + used_resources_cache.erase(old_name) + + sidebar.update_resource_list(used_resources_cache) + + for editor in editors: + if editors[editor].node.current_resource != null and editors[editor].node.current_resource.resource_path == old_name: + editors[editor].node.current_resource.take_over_path(new_name) + edit_resource(load(new_name), true, true) + + save_current_state() + + +func _on_file_removed(file_name:String) -> void: + var current_resources: Dictionary = DialogicUtil.get_editor_setting('current_resources', {}) + for editor_name in current_resources: + if current_resources[editor_name] == file_name: + clear_editor(editors[editor_name].node, false) + sidebar.update_resource_list() + save_current_state() + + + +################################################################################ +## HELPERS +################################################################################ + + +func get_current_editor() -> DialogicEditor: + return current_editor + + +func _exit_tree() -> void: + DialogicUtil.set_editor_setting('last_resources', used_resources_cache) diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Bold.ttf b/addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d998cf5b468413ca1c950096dc9d0f5dfdb1359f GIT binary patch literal 170348 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:f9GtU8uF-v@^NtnjKN=O5W$DEfkgs*!Mew10?fp}I`W0Q*}%*;VrGd6J7o1f zp)CM-(E_bx3%uwNCYP-4a>_UG9_$sq7ykOsd@p|L!FnpMv%fsmJc*2RS-vh`BB*5W z+dV)PAl2~ln+Ym$ZC%6aQ27AyUK5;v3r=V0tR+w6pYTMMr^L%^iU)Xpm+i_fTp$R zcdMa)9Hui(=SSp<)*axwWC=wB%D|e0#gqvYswtCPWx3+2RlEapTTcIb@rLa_eUntO zP+0=l6?BeJO9AnQE;H3@z~&~fGbKz#6yTUV zbtf*Io#{wIn8Q1)UTxj+PxuXMCVf{G`3t2Bu5FdlOfuuQdW9N86a>YF%UDPQC@2KM zFFAAcM^^a~tNeqyhv&*yJx}4=SV^q12Aw7fYC_@|x`4S+53AhcTDh-#Rqu>r0pe?X!R7cUc|v1C~QJyD2n{75S%F z_;NG6S8{=YU6g?$?CDJ8Mzjd$X_4@7V{r+)Yd24&e`?adSzR{7> z9A_SnGuH>6!cnsvra8-3AeuO-1mP`V>OQ5813&8Vj_%ECmJlJ(LE`BN@sy!H1N zC&f<1CX?kSWG93HT*@p+FrvO_4^e!yT%*GfnT4~d7ia&>AF`mIKm1eX_vIm-h7KS0 zS&zJNCx)^#raB+7NCI3-=FJsGL zPfDhanm=P_pW({%$zxmtMv}Iw0O7xGje?B-EgL|KH(RPuOCo&$odQYwB)C= zz*0#j5803ag7&1&C?|9sRAx3r8wWv~L{ef@6czX0+P(YJH|us+lC$<+y{Zhm(&za5 zkv9XkbiY!(m2^`x-c3ye{>vfTzfem~t4R1yw!1@o_&0$k*po3G&73fzCEp&&b7g+s;1`2#(f%VP_)CzX->k!6^-CMWnf#QH#o5eKh z(xp-3E?p$KWH)ck4&%BZuw|_^#YH3ovz5lb;!^r`g^>b^trWb@8VPMF* zKoe(!blDEYU$@x()+?=>W~D83b>G-s08_O5l?#p^0+*}P{9u7H<3X8Tz)XnL%quYB z+Pc7)G=lCb2`2QXUjoQiLb-yTU>J<)7xvExB126Se0uX4>_vWzX(RY?t5kfXC2Pj( zd6of!xuD1{Kw!>Q=@957@L^k^7$5dRZk-Ehsvu3*RH4hf2QW#Ia3FQGnsBTiK%B-2 z`Eu%f=kIW^iTb@oJh|Zw8WbG*A#qq2$v^%@N9lYBe@f>^HaBq6xlh|oyzD;Auea>| zbOz%$TJ@Zj%WtT)XRO@6|Ki7ugUMxu9Q{VID=TjdMYrso^-6L+YZ1_F zJDbjBI*RV0i=zm0Nj?pt9xsm>Gul3wqsf|-!Z{;w@;iqQ$|N^4>k)Kwp8Mc^Pc!*g zpUxvZ769e5c})OSD7smi`MO!qm?CUmsb8fdTE}gH!!NJoG8w{M(moW@N-kF<4_~`2e*Z;0p(Q6Evsjwjm#gY%;+o%&rcfiLHgAg|LZ_2_zHtECJ-%YC+=Z|MZ3; z$r~aAP0V2QhSYlBpWQbULJ$%(^2PVA^BbdwEzQhc`ibm(#4k_evgONBb2(Z8t(*3Z z;LS!0OyeXDoFoh<8LPRxCxLfC-rRrqz+@%FvGkMp{R}HvVl7BK8Lb4_y2mII0d~$s zk;6eY!0%^R8-IWP=x`_J*N5ym`y)#jJ9trU&ND;C$!R65;-dUVsmznlsyy1ZXB0a< zY>!tq<;#LwT4-t*d1qeO1!Fvs3ZNnV7#ZUT6@8UP|^%F;YnV?)l;OtTDjD;(yN=uUMl5sIpK!|2Z(ki82oU9{fFX@ zD%9e<@1Z9t$^RZiDJwON8X-vj^;Y5NXqT^#9C?}OXc$!a`{e=;2E!4AlDt4=@+(Dv=!tnA9SFf{`ioM5mqgDj@Ikp1gq7<1tQud(@1p;r8XG8o zQFLBtXSAqW&f=#hW_k24H8Glr=k?18Nfvk#2nZI+#^QYn5>H-8k`%<$BFj^L6?5^s z4=!H3k8szu^8BZ4nOsnGUVhQjU9IiuAd4JS6l@1s5p#}52TSC5^cSW;ShpaW6y(kE zc%L56@c=d6yc6&fe4J(Tk60uA!PztXeLP=eIr87EiRU-ZHP(e6mMh8;poqd-s|*m? zrKTF-%Ocw7kUP~?%7_gD^Z8#C}mgGN<4b#x{2 zMJ$(Xk#`rx*1F>Sie=R9sn!D=t-u){0SzgAe6#$twH{)`s+v>8h!U(2N4)}`-y_xb(` zCW4rB1jTUbju4rn|8(pk8=lGfpyctu`WC^O2v{crRu^FP=Hew(pV6D3IYiRK?MN?( zFu-bwpcYhg{!#%vH#Iw(f(IlvqBElq3dxql&FYC0>gJlS9AoNHEr9PjpL6%hcRhOi z^yx3Pc4vJ5+SLo6eEJ37GnlSDicM4BRq7xrMgLq_It5q}rbb(8>@zg+kk^a>hcMF2 zz?PWVfpM@#r3p<;DmPnw_w{wH=DpCocFU`;ZfrMyZ<9K$l`^mYTx;i$cJk}r)!jC# z4O!axd^LKn+5$%*Qif&~Ia_45-O|^k$u?bhjgCJlScXm}XC|02(n=FU8PPA@Pk;o} z>9e8_ylr`2vE7o=q+7Se=mKKW;F4f9#*!)}kOogoDwP4zwWqV75Kbrqx2@2~g*4fM z<{TK1HVJ+B>~sC~C`{D9vG)&u)9~jVqTexyu!9{}RjMzl;8oCC1NYR5s`DCfCdvtA!5cTtWb-N5P2)K|exxzKcbwOGqQAT5t!u*p@OYCV?YwY~s!yOA&E*Ua*&B|5VVD8tf zT0eTw@>Rt%#+)8M?(~>3Z;hYu)|k=r=03A#+4gro+P!YgbCag5e{R#x56*61`J6m! z>W5RNd^mO5`;#ZXPjrC^RvSRVqosUJ67i(h$1)|*bx&NAf<=M;_2Lh8Wz$XU~WWSFUAB0CexIQ1s0#ozjp-(>OpCW=5G zvkd<6LlhXQY+0)Vrq>`@tVhD*>@ z<}(#JMU_8L$`${hyeI!f-_VEG#oXLEbjQ|`7HhG!>kuVl?e1EjBu+{0h^WTV*Jas6 z87|9Iiq&Li7X1xQALfr%v|uN7Bxu!QMG#fZUQo&KW|?Z0yq7VS>a@g4)XYpOi8w$- z8(p?=p@{>MsaKZRgu3c)?)}Z|XlNfjZu)pO@tuC2YOOoZzTT<#RQB!hp2J>$`NHQPvY!20H)zyp=(vre zj`baW^3bL4-tRuTUDLc)gT`%{RB3Rt))kwi_pRT)B5>AE{aoo~xdK}li99)Vd)gF# z$_sS&(%MPgn!b@pWKF$(F6lcqsa?JLZQ9Ikd#PjXI_>dn>6)F_YDDYSSvh&Fva?#Z zhDN1&|97AZO|<1o8??BZqMZ>Fje&(U*O&$R5OJy?@~)z5ku1E(B8N!MszL~s(~pIt z*AD$YK~)5ig3^ykLG~d0A~Z<&j4%b>;sHsoOMju2mEn)pa#unAE69H`5I)uaQXDQG zw#$34BnpT1ZnNx^EIBy|U6J+(H9k2a1#Lo93iq`esC{4NXHK2ovG>UKK0W#jWyAXP z?8RQ#$bZ|rli%CE4aKj9%(?l|y*F5EHlMYA<1K#T^jUu5O}WeFJ)a%RKl<7J4Ffta z$)7c4NykBpUSJgt?Srr!<~I+##NrQpz_BfkIqd#o4n_%itwB^0osh z>Ua~9N=q4;$anhfY?LF?<*j2_!NGE$AY0qnQx_gQGHi0Aydy6!U9!C_-&L_oxlwJp z$!E(w)oIqqaWgXKWmXRxv0%+2er{mLr&G!-Wp!)xK#y}*)FBBwckpTjjd&a zM22TBo2r~uQc$+UEEei$!tPQY!4M#Vim2?PY;^WL&myG>nqgFUUur4;g`u91fu6s$ zUUn1yx6W?5a-=}m=|3}7bIST(YO%r}hZ@o16`?)j!G-bmcyM86Y&;=6GrgdK;SW+P zWYTY;g{l_1E9*?@j<*-o@qbFBUyWS#7|S_uENVhV!#(svR1$PYYEl|GH&7Hw-5%#H zi{o+r^Q3HIWi}nnuUEqsv@Nu8+Z{_=^>5L4rToQX9QNU39N3$`taMs7cS8NR@%x&( z?1{VDG+Ep*t9cy;n{&`&gXTC2`7Q$%BTFwv(Ih_`fgVJSUY>R`MokWYd*>><H)}SkWuEGu zxM%l|&p#j7B0H;1n-MKZYI>q}{;S1;SSTFb*J73r`ld8c4uqfggxNldl8tu25=KD? zoeHK-a2h;koKW76g7a%0UclO;*iyVp8K4}!&)2gt_gVKx#dm|n=L_p z)w7<()vVD!qt3^NmaO01a?EPB1tasDM;sE}ABs4Hq~@D?~;1_%7yVXPATtp5*iLS(juZZ16^nO8Voso9y7wtzsS z;R`xVt5u^?or^CneD2VajVIQxI{b0dth(7V`>6Rnk}Abj7&dF#=xG^GtsXgV(Zs|W z*-3p+TxZfyRG5c~-19PGWKmZ3CQr0*2~{pdtSe}k5Ui9_Dl2uA)=F<>v@%Osu542d zDQ_qrDqksglp@96_y6HD`Tq}}nMf2xS-TQik?!2FO8f&rxf~h6c8Fagq>fsslV*Cn zob=x$upUf^)QX-7)LGs*#GwV-h>EzHH}ymQ6%`jL-NFuc9K4|>OW=Q4doCT;k`lt6 z=jKiuDHj!;Z`!jeZ)w4l9Ftljq8 zMs5&V7oY9$BmbKP{m3fG0sQmNN*;Bf?_D9svCB#qcqe5vo3Bd|pHf)S zXI0;R&0F@CPhwj2*{-59eGt!Jx6pkNiY``*FZ)P!StxKT%KC`#gquq}2U>_t$Ql#n zN;vdh-by2uOUq?FgEyXd!8V~u>o{BOa%;!UKhUvKoMkmZxdhT}w;VyHsS&y$=xpB8 zi$KV9dXgE{KS1hd?a~2KSTGv~NM-v+r`S{{zBu`*9W$W8rplU98Jd&kXtTXvFA^2_ zdM&V=@PE)CZ1;a7rO*sx{z7}k8^`w{E&BM<)YB~I%$v{ecwhEmoCDKsj!p2!%lG51u zlI!wjJVWJ30n8@H%SU0s?PipSd8RJ-n|HxA_^k9Nx_;9S zN#AycJ|V{|2-hW>94A$iw*fEB_&nrt+96^{kh*CBBBG`t7@85nqztL9IJiV{kcNWt zezrl$#vPLmwJK_Fq*e_seX#hg78yg@6=D$?rbHp{h}Hoy{|M(D)BL%m;l8}J{?1wz zwzln!Y^40)(r0(K49rNAS+XzwU$|)B`j)M#Jm0J1nX4bZxpPb3s)Ks63|~S3CqUPe zEe}`-hfL4%Vo48r1o*nxh!=XMPD9TDfTLWD!2tq0n-3!TvS_i#V}lGvs}|ww+DgE@ z3$>9&CD6bpg1Q97mRCG4j5j{Ok0=q!Kc1Ju*~kWk5d2|ZnfYznKzY8^zHG4~)E?=Bof$`A3QBK0lVZOOL$ z1{)iXexI&hOqyC>OOaRBE;5@*;>n$4cb6-4Bb+zP%DBtYW)Si(9~*k4CgU_)Qf{gk zAQdGNTQn+GE-Fe`ZI-MwMs_IIl1=@_`xbV6bM?DuI6nUJ@>Xvwex~eiAhHjvMeovGy6O^ zB^3EFw7jBl2OQdI!pM7A!6~}F(H&Z7Tj8jpXUgvV2~Dzw5pt>w7}$ZVKxV9rnAHXk z$AK3aSX`0DUifj(z4`pk?+>Vmdt=Je^Cno_{7*Li;^Ge;TKKnk5yIO{JvUt@eTZ7X zdsY{y&`XP{R2fhjg#Ynku3&4u=Bfo-Xa$8a>!ZavMHUHZBg2HaC;{s(4h79VH^A4o z0EpoulY5MI0Ctey_~*ORKaH-}W7CgUJMO5MGiXNpF3mb^9M`kyPK(<1>)$RM8gsO5 zO8a(;*B87SAM-<2UW01g8&BUj;MMlcJAX#Jg)SfKO0@${lqJ=bu4{6=`h+fG)hdj0R^4KL1l{qukRIM}gmr~Y6UOX20obKkr2z%wLx z`INQ`ySL4|T70s`_{_VbfU;C6paoLLr1?dw zjLvX+U4uGd45d!WC>z`Nkoz(BTt_$&(vph_j-r}qsz~yI(OkJMg@oQaVUVqKEMbd& zTes%N1%G|KbWDvYr`v6wyuSBu+M%|Go36{BG=0$UnU*sA5ue`bF#m1SylD;VI=PsUT-w#4kCIap=i0{gy<8_3liWmZll%~}2nCOFB=we+s^sNP& zOBI>6IPpZOA((0CVB`1}s^9UH@i(u8@HP;jUJYd&Dfv`1^J!&WDN`@O(5}sQ4}Xu} zzTLlL%iY62VF^z$HM#Pr$?SAWi46JPR?R)TR}coY`Z+)LhVe#dDe-nKz6|)I zVJlZ_abo6<&`r}U&L_aH*Te+;;xOdLr#lfAh0{Z{Ollir^~U{Tnkx2=X<_1tvd8Ez zMD`d?ijkl=w?Y2Ejj%hSx6vWQEt`7l5~4DZLicq#sxR;GbvaVYV{tJ{+);eY*Y2pk zT~wbM9a#vqJ>EXCWJ&R+(w@h7_?s9yME|r4y=D$O2AKA@-r z2p7R+NQ#R&Z8$JggfZ5nz@ex~L75_ZiW%()s!aLTeZZo6k3$lNf0oRdGsWcI<@|hB zm1g&fm&RxNvm=Omh{s>&@e;GT2ts^hni zqmjy$Vhn~BS5+OD6U+Ett^d%cR4}5ZV2( zYEJK}31_-#RuRsaq4Sx}XHf0rg&86b5?`DXLwC@B)6KYL)t zQGR!evWZ2xXB|)`d-}@_JZI&-MWgzSn9yV6K6W5-9SeSu)jPr*8zV94eTUDi5USh_ zJ9&hE=zbGgq%*wQJMd~Nz^|==Jx|sQk*h{dB#A@{zO9$4|FgOf{w`@uYk=@ktBEIf zH8`i$$T_W+UQIT)h9jeA#8(;bA0!AfZ}9K2#6n~&K=}W7onQj%V_kwNKJT;h%%8XZ zv|{nq&;RmFv@aaqb#bTmd0$TZWyQ0+8m)ZFA2Vv=z*va|7hVe5;QZ`dSr zes@RyoP?@x)NZt419r_R0o(TO*0${1w{PO;vI9|oVA2#Y&tCMDhe(;4VwmU>xY1QZ zDT|n8k2=K3rSf)%JEnYcy5WGBD%tDRjVIoVx)HRcXdH27Yu{8Xb>#QcBwt6qj|5NT zL?pCC62Ov9Y-q?}koRw7IJo_$I=Y26D~Oc}*usaQcgaEJEZS$2K!Xsc_*H&FId1#- z%tt3`G-P2@SYwvIhu?g8(Mu7Y83!ZTFxGb4n-?1V9a{sdY)(CUnqNG^EXQ`oZQg;| zo^N<-`A1-?0(u0ThF)CJ;hv^BN|M zujy>qNb1uQ$Oa2*ORc4PW4`?2C+zIuc8$Wz&&}AqTmJOT1_NR$)q3s|Wmxg(H$QOv z5YoQ2vgyi@SI$M<4BFTWROtY!ykU(+ekm1HQN4Zo@MDvFgfZpCOHG44ROB}hX-E63 zJe2-6Y~LaUZ3xkz=8O}}r0}rG4a+2>T^3_GGS^bkILUl`*|(kYa?agqFaIy&%maHz zteMOYw%va@z(3TCJ+p|QPN+NK1t#KbPVd|>ng(@UXp;NV5Z$T@Uk@EiA%?R#%}yQ8 z7VlS!eo^+Gh?a;#$4P0WHF1Pd4d>k6^6QFf@$P~;bAH-(liv=eX5Ueh>7Sgor+C@6 z3NyO#-#g5DK59?#QWkwTdF$Ri?u`d%g9TToXgCf?We_0HCJNhuGO_aNzeA_3JExp|AXQ!Y^kU;J5NXUPi2l-oNd%&i{#M(xJMOJF?)h`zR2 z>etFNc$5L?Orer|xQa9nyh9tB8f)&@w`Jn$VEz*;7fAVhUv*cpN)wQ852BgN0@?OZ>=_%S zUQ}W&f58@}X@Ndlh;7&53W9<_gJW)m7m<#pE?h0ritY+uiB5^d&VbVwTQ_dh%JSEu zeS4NPXx6L&onfl_IopA`m_T@EK!g@BqwZ;sVkGl)eP8sFKqtTDUP1#cB-0O9Y)RFVd3|t6>_!*A5vgBbS@4 z411=3YMl|)$|cn}xUhe0_Vj9Hk}@q1^S3x^hGtX?8oxcfc1VqCz-BG=k}?Od&^EY+ zk5xpEg`))!%RG^2QoyVVm=y-ug8ncXGIo0j4`^+8(NsLV#|~r0SSmNHSg~Q{TEkWi8nAZAk@!lL;u9-ZmRRw8EG1X~SyYgr0$1bP z%ZP7B5FjI&>n;3()zE9r7tlO$UGF?G^K?@`DCwsEB~4V5c=;xgOA&#;#94V+teCxh zTNG_eN{R=nH%mGJmo{mC5toUd2zL_^Ya-J=q66 z{WbOMSp6_i$|;y60xitmF9S?I&Pnk@$BLM;bv@tMc6OUK_3O2hN4Bq1yCYs$ukvF# z=wlnvDla>`RUZ9F`q5XJmaW)wNV@A8|2|{ZL$eB`(RVVekzsOAmMhnL)Pil2SMoP# zRo#7M2)?lse2+?qfE8RN5mQC}eKFwY|7&ZECI?U&VKzt=bF8}D5dC<@JP=jUjG-;` zlsUIYIWMD|``@K9$|Al1JB0Teo!tMf>*@dVn*VKK50g+owv+<~t^esWB0o#?#UgGM z-c)HdMiSe4fIz|^(pMY!8U6m4{ zX_MqXJfXdnjm4wx-&eZ)qBQ%%%Z-*~KxiX>gAV+ESCkR(8%xR6#Y8JHrzM$RMn33@ zy35C&_Tx>s9o@H5w4{Gca1u2nj(UikDHi_NyC zWY5ljR@(OMv#k7Q=RPJqXL-?6;n{UIxo5zRmCJVpcn$`v2flG%7t3axItG=X5JS8m zoNS%xO!1A#%;@iwCUT=yQ45Y1=Z`kevx_V#3=C*4WAQ1TQY8hCbf^Sn!PH5tnzC)h zul!08|BA6H3npXH+{|eAZuSYU$p75Asw|($7DZy^XCS-8Ydl}zQfT&M7&zq@ObjF= z!n7Lt$;u$+FQda(nzJOzCE=YUl1+1Jjlz8pt&C}B31!)lJ4yseQgWQR-qx_FNbKlE z4|=L^rysU7x{%+np-El7aWsU@pOn8~&;TxdF?KfEO9KwQR%gX7k_BOGc3F2d^nL0=rkmMuqUwgq+VlY zT!wGQBnR)0tueI`Nnt-!An6P5VNFwNrde`5)WvEX3df-y&^-e%VM4-ba&QA~2CxZ} zgI(nximvdE>@_tBn5FGBEv?BS`#MyM6nzpXC4ry4*ArS)&zA{xM!bUDu^|nnr71#z zrJ;wzAIfUw(!@@5)TI(0OTr)%=88%cMQh9(L{X`fmT=_crlmT44V0;AiPkgUyfw5> z(+%BQcVqQ058*%k^b6LZFIC>$KXc^p>2n8;n5BNZ<)t!_*V8krc9?MR^BsS{l~4L7 zct>%Pb)e__Er$;u8UI?8n0%xAKcr)>Dpgvf#fa>g_jJNw=(&PqhJjoK}@;%K9l&3p`AJo>ecIw)91$a>@yZY!C!?pFo>S7WaPMdC{qfox0a|CXepi`kiJIhBj$X9?OO|Zeh-&zyC~JKZXw!6`gR*r3Kk( zqR+sEI-N|q%v95UJe>wMHMuQR!VwEPz@UniNwgbeh&pGLrEIArjePvXEg2X^ZNcyUQX;7(cYk6SLAt?5 zfAmHuAHy~b9rk7@HgH|$Cs}>mXGDR>H${uu7yo4P?Py|aUR^taaFa zj!_d{^_Bfb-yRSthOumRn58$WQnB4Y{s~qxcw*{i1z;FEo0=xE>7nE|wYQaGvd)^U z=R#rdVOn)RK)ldLu0^=yR}*M<_7)25f(y-+1i+EuVyMTg!iNuPh#09w?lu7crLJTcrhxMI!~qT_4~eL)MizNR*p=mRxe`794bu``u*H z_hjYg0dY)UVf+8Q-hzemvW4`1WmavzN53*QZ7M^9?2rYTh!Y z{=*NS+Fi7id`8+6HWwT~xNYaFnWG>CqIo$%C{P`@dfNk4jEuxbh-TDUAimf0ZearNH-6#9C$i}E z%HfHYV`?7sX(DP7;od44QmkZuV!V82LX9Avjwii9E@WD;Bgr(1;0AMpL?`7<;{7@p zsm){w<$v0TX0uzo{dh!V3)(agqLCJhk_YjJ{O0tL=NmMWS@6qGZ+o~FtAZa=$Ia8L zSawMr zG|4xeMB51<*t!IX7a~!jpG=H=>o0V}Vl0{=JxYjAcKEOk*d56tqO`jl%6w*5MzW9v z*!+i99ez}g)jbxrW7a9TL zM9fo_6%;Y}S2|E49@bx&2vGrsr2+_HRHa%#1!3?)3bnEhYGwfNGL|xCW;g&i?7z-F z@C+~pX~j|;hdmeRWLxJ}yI74~Z93W(u*eP9KOeWhdX0T!uU_APMyCgV9eEY0r0)Dh ze&dY;|KLWZ;H|Iumt#hZ7=vwsNi6;rbi)+rhLf;=vDhR$PP2+l!br!I?r%25%DQgQ zDptn^@0Md8y2>WwUpLNl4 z!6@})^+x>nZ?0jJgmdQb&V4@o6SbNi=j36YlfAmj?FYz>>>*ul@*)=c#jota*oAY( z_pHo9Pb9u}?VB_FQRJW97ss=*vzLH&B|jk}@VVs!3Y@~#$^pURA$OnN#JoCV6kQm5jcqk-OfKgvb1K0R%+*g7pt zAU|fYwLmAe#!(g;ek-!jXlXTf{Alr_!5i}iU^(b=@;!A9%gTlQW>^Pq^|B)JWWm4c zAA5?|?%TcL@Nt%K<_y1aoaCrN$vw+Eh*Qd9Z-CR#$7SL;K^Rh7q!4t%P$I^l_%$_3 za3dyjaX5ovMG^CHnai8te&uYI$d;c9_t@OP>eDNtc=kmhKVtpnUXHXyix=iG|a((E|4CwH3=Yv zBFk3PoO4kH$1*#b1)*6uOX7XBW8i+DC7wHcc1-xNb1${a$R8M5Mk%~EY1zW@%GnuT zFaMnXsh;w1EP4HGIlFHO|A|$Uw|nAv;*!xrpHXmDR7}KKoyg?w)|fZCLlKUuwZv(n z#-UTrv|yx^2kB#_2WPU#m!aV8z3ZU2?u}dK81G1kTT_cq(FD0^?uGc&czXeGvAGA4 zd}$wM#Hw4o7Q->bx6CcKU{xOMd9;jQedzg;vgPP2o%H*}XO~S@TFJwBz_c%xU*V4w zxu@pr4tJs@VEMLf8L;mLOvjEnFLARz;^ zQ}|{}6rc@89$ufK7A}HLCsRV&q#kvT(O6_~)BRIv>$Lvg6y%g!peWo0`WkXj)JQ%3 zr~}{3Mu1=D!ET(#wL^fbepr_rtYkH>MW(?qc_K)Xl<)mjSar;D|>c@XCU*RP(D9d=mxuXV8qN%Uq z;0=Q<>8nL}?-&6wquqT}b_Va7K-Oz|U`(=g7~eG3fxJ;3nilL-%`7mOK>;q{R5EiS za)HcDui#qV<9CYJ@>}+CJqJ1}DX+g&R3caAtINdlt!x~#CaypZV=%pzxGz9=~d%AYRj&XtU^w1CwM%v)e zT7Wm{fUG`lnduaX2po@k%Bd8M|7jm#rufm)?g+n9z~AA|vh&!KK7}>iz^bf8`C&5F z%b(`U7NoR@AbSYw-*2U6+gf^o0R;ju18JcDOmW5hWRuTIZ7QyVB46TujpNZ zRS^m8it{ScjT9^1!;@B05ffMj-%4|&R3uh|7B-hay+sP|3UL3;xM1?><_&u2M(J#& z!_%V&%;Q%U{rOxmi=8rN`h0$o@8kiU&yF* zXx_P>#-5tfZseHG69?Z>h^DAcTVg=dKz*mHNnAzTt`pcq#?qpwck>wndzvx!@fu8b zfwTFrEEQxUdQU}2XG=tiebL9j6} zVx%gJW(oJ1xok2*1j~Od4?z`&Xp(Nu^ThpgIu=Y5Av!bTuE5lSVYH_}1^CcrO-f56 zqKW-;`%wF8%9W?`e;KL7V36Jo&IVVRWVD>S({nzBI2T1 zRoqt=D_D^9j*1rL$tY+CxbZ>Wd(4R1B$&{^MP$4UnSC0F!tf4N!C<_xo5n7|E5TCv zWZcmZl}XIcU_6i9dm%pFf{F4)#32^7l^5{u`3>h0etXMi7V%)}?bz$DZ(w0ZUS^ToFtkl*q&KDq0_TZG#we7EIm;5HcD zQ2)1Oc%m_|`i%i@pzKKS8G{Rv{O2N!iIXuXYUFV+4M>p7$rn#GW%Fmaek zf9dR|g-N0jE(|O89_K8&-ys#4$fL`3SVH*aWgFnoeXC-kXxh3B%ZRt+iWMIGz&_?R z=Zvc$ZzNdeLvL0RXNOfJ9cThVIGs9onFLPf`N!+zgb2as#OwHv9l`i}Rknsz`L~;n z2QrMfBwd~Fu~9`loMxU;$^QQVfS$GgF90+=gCQo_1c{)E0h%+B{NcaH{SXz^^t{gc z5mc~#pbz>bgtZ>1F|W0TWz+AMWI~aS2u+rJ=9xI$AopYqjb6>;2Aj+tg%W0iT}FPh z)LwtXC(3UMdkri7hu2=K=i$Hl?6pGE)z-;?nC|rKlE!PY_dZ0hT*%MhQLpZrn95`n z^(?60w!=F|4NQED`&lP z`j2-`Em(bzMIPd3uk^=Vp_VWQk{IY(#4HirBi)6b+nE~f^Fj7L!JpGLoyo*0!cEpg zH(eRx)==JUI^noGv2mIMM>7PX6saWoISB;O8>)P>cR3WF{^tg0woK}%I>7(l?>s=^ z$)3RHF*tPmiT6Q!j@gfUPJyRpzssuaf9z&xa>*@l7b%|*c(#KzyVtXY&lcq4E^#28 zmO{|=qv`>;=J4Lr5bG#%%&TZT(=ZRR+35tQlz%iqBo4Xu=l34t(gRwv9~ zLlo|;UTgQugH3>ge#97WS;LsLg;9Z}U6y9}nlZy8Ys{`RmI*yJ+~7iDO1iWK$H3BK;b6oBs$_v{q+h+4DK&b89@m zqjK4eOBdgMcH6Vht$H?Q(Q@j9qN&d2$W(>FU#}o7(PZz$5HuB1O?cGrl5FZ*(5a!J z?gmtQ>!XFyH&GuwHX(XGs_n-bMt8s~te2o$%o>XB0pY?Qfnv7*f2_R+d=yppKRkD4 zb~gpWh9wCQN;V-0JwONvJs`dJ-g}dd6zRPe0qIhuBbzaZ1*Lb9NKsUzNKwE7DhMQd z^M22roz0B!Jiq7v`Ml!J?o4)P?mhS1(@V~hkrr+8T~nr$s8pu+2Dis3VaP9pbIspj z_Qa3B_U=A<)}3p=JXrJ2;}2K2Zo5^jvi_aMW23^SbzAiwJNo_LH|1k;kE#`jx1l3} z(gJg|MpYU%UBAGJ9br=PupJEpPD zx8=YG1HSx>^~&1sy@VzRpUGwAUeozEn0Y+7(We+|7}i;gOpt72WP+F&Cl))mA142! zE@qkAf7ig^>P7i!AwnX)1|*Q(Wq9dqQ&$~CK2TK@62RSm`$tM%#1w2#*( z*J)6te)U7Dj>l>ttfo~9Go~sCj&WjHz#J{iLF$(lDBgSsF0fqAgv5Rm4d;>mk0hE? zu(9=lD+}eA^t|txcxo=m*J0R#-4?f*<*7msCXx**0(7@SYyZFUy#+$Z5u?fb)Snv4 zzsF|qDW-I9ulFoQ6b_n2aL7Y?p()BlkR<~GhM+FcKF9QBL4$wAk^&;wYB35~E91rH zQw#B%*?B`fAM{d+HER%cKFe7We((M7_3?mckggAO428xX4ql2(u-eVlF>Mvr#PRXmi1LQ^CQ5cEd zg{1&K1xs!8F^Pv6!?5fTgPMzB7%~M^b$x3Dq9|V~iAkmkQDCNmHtK{)Ex>Q^HMC|J zNi=%a^nlN*8ADS&(F=xF${ImzjN-KqhRf>pkHT8q0EXUF_W4LL?q3v?{fW4Lh1bl| zkB+#diL!fCWSEdjBIW=W@)Q0(ZoNmjq_oQVKxqY^u>x;q58Dbv@)d+smLN^j9OcSm z>kzGmnv7#fNGY%D%w>VB5Z#PmM#ID`!0fjRfi9WC6v=}NJ1{EHy01n4-O*D#!-I&> zG8n8&L}UWsATN1CjVd1GKa9`ml;(={2W-~4`dPzj%w41Lp{w6~(zFJ@S*`K@D?uu% zh81!birF2K_4mQJ2zSAbJ>)QEV-*V{{vhytT!O#6n=mT=#H`oeoa2QZ$5WGwI_+MF<;Jw|i zw9MLvqW`t%c^$AE*?1o5=&DIaw@@C7@7%yEEw^q6M3*H~T?c`@M459`bhnbtZ?>%W z^f_v;u}-5JG{;+;JQ-(LSH87d%TSgn<_%sNE9Pz1&kbA_8{0UskYYnEHOr{LKLG@y zH^x6`<|VLwN-+1!Mm`t-4x&i}pfH3Vwo^n~9;u05^xrTL7|;CA1Ncw+c_8fp|KojX z`64k0xca`uV!T|DGZ1}2Fak(G(8?q5DK{uFv~s=k6twaXpX6@A1_J@0l?$^JW#?Fw zEbs@j-JIlhlZq=4MfaH4V*n~crHygR?Jh37GQ#^k59jCQb{E=p>C^#q=XkgMqxXCb z8hw&qYEiddYud|@aqSfUL3La6LnqgBWoZ|~9*(2oE3)ie5dvZWH-~=!?1tk=lR|t> zGK(yWKvIho=ktW=qc_ihZSzea3`}xg+!_vip! zV?wTt0e8#zjUl4}hcQZ%W=ovUWC{Tym|$!uSK>r^Z3%MvO~(pljag%N#eO|^weq+7r#7EG@;rW?Nz z$?A?{FPe4XkH?&!aF031-C2F+Z|3aUy#1hDB;*uU`m}F2^rL=AxaO`+FXr7p(t7aQ zzZI;q@j_8I$7!*h>!Vokd0(TehnM+Zk!xtO zEPeEl!J|dHt99od__|&F{WWh6?7Bwj@6_-LGpE#;r($1+K_gdnYa7ysLtnSAE%KFL z!ptKHt7sleyA92ui26rXrB5e5NDOpQ^f5FY(#KJXS$WED9n9cA{MvKiUtiiz9ctR6 z3+)8<7JM{2%B=0R;jGH-EN{!vDB;PnzeEig>I3MO=4&Cs(=DM?XO1Xi>|moif5;$6$%0mne~4KHZHv4XW=S+_sIl z5UMR;ji^W6bYH(sUGTA#!Z7x}Wvi+GrKhP@Ky*5th>*wp+L8inWcnWkvI{_sFIpf0 zZ`yub(he7ZZ_2U(MW2vY8=+Enjqq?eL9_^AV=qj+kAR<`2j`yYJwguUVdeSPxq72d z$gq$4vN)#Z6YWsj_0LQjGZc7;ocyI7ti8cc3Y6Unq6P!WwoKv9Lzm9@<*@ z%%!BKnNl78oel()H19Z=V@!#MI#nb!&Z-soV;Ex8yr*uz$oheYJ2*9!^WI+c5o#gOfh%Au!eIU?P0C}E1`PFO--%S9ZF3_Me#=Kef_t4&G$L2>S zkdcK(zADVcLRu{gYfM>72&2tPhx~a+g-7tDrCOXU>KxFd%-jyU6XvY^WPYa^>AN$h zU!kv>8d5d?w)Fd4ycmLDE;a2pbJI^X?ci#Pa2>|i2rV?2x`4k<4z@^S289&!e4R*$ zartF2*e92gK+HddjtBb<3B;MF_!`z9_`;;I*^eA9SWXK;`m&q)8VkA0u$T(GFitFS zAcl%3hGLKk%`Q>akwuabVZnMKM99lh62>PY81XIwVM84*{_N*_x5boQU+x*3rEzEvLxt>)zTN*P}xtUdx(;LySKG~1#shCM5#;;eT)G^*7H(HES zV*CdBTgGpIQgh@J<2Q+3dRQ}3DII!Rn=bH^OAf9%db6j>kIurgHW@;O`su0?-w3+0x}J&!2tG?He|L@k`m#h4!7>w}D`MUH*o@_Z?cf9c0D%HE(tPNr$ElI>@vh zld^xazqFl1ChTM_x5$Lm*CU2MX!z-jnOxHj^(fr4ly9jY4t4&B0bpo1*nz4{oLt2E8B{Ad{-pC2> zQ1!4zD^!q~YO;(|D5S|>p@kJ7e5TN(LPWEK=;v!RE&xN(0-}<*AqcLT6VB8t#AK=6 zIQUpy{;BKZ7Jbo;T+Tjxl|Ronn}k7m!uKz!_4vbszjth~>vraKUL9Kz{3s8!I+W^z zmJ}kj*AYNqud(KSYYKtKV!HCHc)3N(Ug~OWlJQ|~(L#(~zA@-{0g(@675@}vdXJZF z=kb#=Lw0;NRJLFiznpF5UFjvfe1d5n$a*mP-Z zd0scR#Q1oJe7))6x?N#oUjvJ7)A}lxmi(Wz|J$q>?oTRd}9KQPjfSn66 z%Oo9kVn_z;EP;m>`ehIZL5vMvE=~+>LJN}xCWv?r5@*c*O3)01cvG)4@g*V-0rrulG&{_iBAHA;d47+VZRYcn%MnzG9fDdaam(eAN{yE-49M%y&pOTy)7&OQPH7C- zyTGxhn&xJ}-Xf>`zs^l^lF&jVgJqbLPZ7C=%zg@DLx*bgOO41&Fra-PO3EA4(x^$1cF zZa4Hjp*a`}X_=p);)&%FU?55mkzXuV1VkD{YFnjG5r3x@)W3lW(k6#2=7ww`P;(>- z(X^loIq+7gSS%LQV1z5p_PQhX`_t6{NTJ}v;w-siCP2{OGwH5*w?}?X{@Ye zvc@JCUlYzEqJiN~nk8xgn5C`246Q(f4g^bzikKoQe^cg(Z-zLbCJ2~ejPm^GM=*kP z7{PCb_iu~N*7D&K{0}wG``hG9xkvanhYx%{tP3B<=5`x;=!@fDx!5&c6~WY)*Gj|y zQ;cL$WO8iLg7n;)APQyD(N##2#tMo>GfsrWVbF4mh~}RmLB&uW;W-i69Y_;2Ig_Xk zRPGE*(uxRz)}r)pL#sE1S;71mS`i*-@edP!bo@2u%>BclcEjE-|3+PV7aa!D%Y!PXp0Z9)`3z5a6k01^v^;K6qO5Q@l+5syq=G|$1#DUr-GlaB z)C-VO%~6js4(%(G6A>p+(M{2wl@y~Qo7`vESY*=3Ok%-zXD;MV9;dvytkv4xa{8`D z119hX3pVy2KHezWrsi+b`N^q|e(PFt&!kg7%Uya^NsBr1&cZb^>)Y!36Sc~6QALU z7vPIQ1`GjCxMdwC;3bN51pGO%LJsU2UFIy$Z_hkG{_}N>iPKun-6ZealGO9<$7?nm z9<}@#zw{CR`XBk}$jkD&MY|f;-o5ezS?89SsN0GdIzN=t3}Eq)51(*4wQPUUBd|Wp~z0Ep2SF+3=emK=^)a{R^gSpN#1uC zZw~U#58k?H@#bK8Oz>9u;47t*ybrIOJ9kBSc=7bNcYK0;uI4f8$6UyG2JYviQ?})J@ zhfN^8AsDZEn0A*)E2Egsh-~C?G+Njg?J?30ySiBcsWs5baR}9L0da#_-EZ z8J`Liis79$Po--bBQovI&69GK>mMv@5k}uuang(_nnS| z26cqxs_@`09R?5XFf3oI`DaUq_nY-gZdd__I~3SkOK8 z^F0>y*Z3JcV#fF}Q&~5@W$KvmGuVR}zZA^e;b-!W5(- zuzJ~Tm*HipMp+bEV7>YTcLoU4XxY0Dn@3 zCn>>GDg$gft)vOk;GIJBuz)|w=}FD-q$YUkW_aof@S|s_aA*kMIXpH3{36{Kg>H?s zUmx_*ISKi`1b)OTs5#(Qt6qA}9-REFPrpx2-dCPqZrY`3&6O-)%Q`iic5U)y{tl~G zC6*j8YvP-&S>#*Z8v^!f<7eNV`1bjV6@P#I<+slt3>$lF+|b8sH%%BmblkDA!`O@2 zC938d;EWwUa4h4?{P0E{SF(~i3PGzYCXF|WMA>uXUP~ygUkwK(61$q(cGv?%StQus zOpJ(V5;kk03{Rm1`T+cnNuVxY#S+qrn1EVL-_WQTK#gQxZ$FJqa-%SROw#M^s9EvK zXqmrz;J?~af1WjK$`sIDVNgI=4uXI&V+B<(1C<3Z(!B`FSb>hJg_S|K?i}k zUoAC5iz2Jle=)uqbN`P<*sQfmikfnGK`6_h}?3V>lYa+k3R*leF z4R+(V5xhe?C4mB(%8fV^6BQf3`SCX_Xz(!HZQDr zc_AcOs*K}7Ve!fC_=qrXu{0(}vou@OWcK?Ib{)SPXN$-li5>uXsd_2uaf9VJU|KY7 zGHg|BSopM1;v^*JI__FQ5FdzAC_)&MRH25;h>|xiVodaAY zs>rhoHgf_V-gj*U`6ByZL<#4TD76wHIyRzvNr{dKhxc7{oNr~jzGU-|I{5AmeD^)$ zyHxKs1M|Xngo*oIF6kTsJY=&upYEBGTT_G;lb*42jT}1YKYbqyzV_GNE_1Fwg4=0iM9?rD> zrt4s@DbBQ-Iae@Ps$Yu^xFFQ_Fq{xB`OY9Y`_5kZ)4zX}^P`+w;72)kpu2kukNRTt z@WgUu6WNW?UAvDNkyN&HVuLYVyN@28)FqLh$2EK^TPD%l-1wrm>1f|i_zmNWN%%m& zEt9DJ)n>qeHf58O%JD~S2J~-Rz9K#aw(UQlP5Fw+WxX%xuk?xE)xVcq)>hE}3)A=7 z_Sb(41JcXkyf@o#JB3c)fv|v+wX-nnN%2(s)SUotEM-MSCV1lXrLx$R!r=}H4~JGu z#v-wZP;pUyB?3E0iFYL`EZG(oiyf3?W67}*Hs-L!$13qkvWrEy910&5JfTOuD!Fiw z3+F~h%lQ1G=veXCnmDubiWJtV>>Gn;$~@V*pfluxVTi`94!+|8E)UlV>9)~AL{jvnwkU=c zxxfgL5g1`;YFeO^0xPr-@kZgQW(^#=n#nMODLM72h;p0m2oROLq^D8wzHm5T{a7BjHx)1%eL0leiGIQ6B=7|af7vapzWG0PZ(qjwML?UYTaC@ zpnVx^-L0Muq9WQ14SNuK3Gsc5Z4CIAxhl6IO!=8M3>GH07jEpktult^$K-y28%E@i zu&TJ{Ouko52PTE13V|XbDE(=d!bWBwkq9s&3pE@+rn_rOnCPDZ-UGGEYOUYpz8G-F3o0>r-8t{uNM#Ja}Wmn%jDZF-uqG8&xU$; zVw4nr`jhexH2g5Bi54Ux!~6-l7U#U-27z>F9dACNvnc2;onzFY(S>1jVc|0M$e_x* zVsJ`Ro|?cySSk6do#T2AWGkjr)KhQ{^6dM|d1lJd(o=g+p2S;YK%h>cd|kjKj51C_ zYzewLw{*a*jqCAzoue$i5-0txU$=cIuFvG_Y-Bu%lS}K@)k@;}biPh~F24UnzpkKB z3FbZ(wx0g@KJtC^O(TS9V}&eK%#RF&e}>BhDS5);gQz%DLY~I-{(z7(;N+#Udx0_v z{-f<}HqPf_#4&(q0;ov{WrA%DJMr3H82927$2``D4dpf2 zW4=ai?cJxIdg%Q`uJ3K`Wi&=O#%-qo&k(7Jk>@h)VU|ZvXd!Hv$#(}(+*N*Qu$I?XbIh0VCmclv1pSU8 zLRTXL4RP`!4-`Oyc4xA;63|Qm@8mKzS=9i;*O6}msjb)&D*<0>l-O5lTS@rtoSOSX z_(MBoZ$waSPM;p?&_!Ay#To$in=ok(f^g85W8oC84eiJhK?wJ+DRM=OSoM)~GF@x%Gq8^`d;%E0Xe#4Qe$*PF5g#1VfV-6$2J?ck&eozT2An6t2u7to6Gbm~*zYTZQ+Bu`oLbFB2+J+9jO`&eK3RYCEI*n) z^YOb~hq6n1t6dm&{O#G7$82xa&AX~Y+nG(;EVSjW)8qqI<;a!YEMkNA`0DSEJyOoH zgfG_f1@H1-_wMA6PCI2b>S*2B_m6FVhyMxbu5I>x^-oB5(eT9qKDsXs@QLxk$FgS% zLQ5%VtgitQvCj-(0X_u@!hjEaE2jJaf{)pL4fsUov}n>|W$`m;Cjk@t^qIX|o%Ye%^hZ4N;-WJPLfC|PJzK6^)@4|q_Mn8}poDb=C9LM7 zc;^Hq3jypB;$`qVRw444i7<>2@Q|9LgcPSIKm-bj?hNpRhWSJcDv-hgugk|z<>X%}EgnAf zuJLDJ0jl!=)jI;Jw{_^L0|Zn%0IJsoRA2a@-BUmnZU*%+zE71vRg4=cFsejBobFKF4McTV*LEGe9Z@5t`IUNaZGZ6sRkV2Z zk;8)#LwhsODZfhvSMmh?azD@C*Vq}N<(Pq}2^)?v+I{jjLD&)iVF@%hb_}AAMVJGm zIdi{ejMpc|xlQ9jq^U7n)yZ$fRoedfaTV%C_w8lNB0jTCfNkZPurnX9K78HONQiNN zt3fP_#)qg4TOeSV7hXNPsb;NEDh;$Wh9nTy&z;e~jW#h_E1KAf$f-v^5nt`LIH82i zW@Qrg)z-_lT}Ek|Ws4w9ejDWa^BzxRrzZ_9;-$Eu?0eY{Y#w;9$&%h*3)g$GBl5?n zW@+*18DrAidRtK>Q<#_oEvuVqJP?UBtB!E|nLJ`3vd~!&Cxr3`5r_$mz*(5?W1wob z3VCwDT9m{56yLOF$LaBGEem^}cRru9NtP4mMzB__R9wMZ>D$Zh zX5sHKzM6lyHtfJ>HU5b%rC$1MZP8U5F~dXfRBNE41rQ@M#S|msdL140&#;Kzm7+*O zdeI^YMX1F<5%}P{7eShY)8u?dQz;~ILJY)|O+-`+*MAO5YpMuA>_tMcXfbib!sf-i zMI9mkwBzFBXFv1nxficEFs3LAI(^gYZ4t6?$c}D{YyG&Z?ch9YncOEI%kxc zkTf#UuQT#FIIqUHE$wF`bQNa1KR zZ`PJI$witOjWXP?gz5@1bT7A(d)qFOR(cI!JcG)KyW3~6H|35M?(AI3vmvic>iL(^ ziX3#ZIBaXs&A?@TBzg#&+LY`of-ChGb=%{lKlSU%WLV8eo@^}oE9FDig z!Hgxan3Mz`GUAcMhBrZ9g$LdsSeM@8GPJS*kFFH_E3MSJgk@&NBX%%7|Ujn#0h zRX%hE%k}S>86t>VE24mT*vnv9mV&{ z>nm&f&bV$LAij@+mjV-h!HQFN=0~=&prll5rKc94$HO4ADcnbAEGusqLAC$Xk(8ie z@(YnnYxQ6e)kLIEJke57z=*6YE(-O5NG1m+81+=MEBWX5ld=P+6?UV`>$V-mC(pcbdf@@M?@1i zMLkNB-s3@#ooO;S)yv94j*6hoO8r$pCG~VqiWH1Vk{^3FDxWaE?&Guk#8<(=YBz7zA)+a*_!zZ2)+rL&kTC~e@iQU+0aeW+ z9_qdlYt@{E+rQIH=Nm z@dRClZlgfz!}Tycd6u}NE|M)UY^+9I(Sh9(q;pq)*D z-;iF-ga}O1q?q{#5iK>ECnUN;$(;ldQ0c|Wc<*e>nm31U`SbCpxid#7N7&<+EyiD8 zIRA$U-tz4FjQ#`Xzzir$qhV))`~uz{EwwfEDJc6hkMjwl;ryz;tjnR8kBm%p(xZ?x@WmqSXk*vOKy ziu8-APe#t2Ieh#Ni>|>H^Ek7%Ja1Cd??<=HZhW6Vu{|*+LXlNJ+h^PJBg(lXWRwD> zN)!ALy-l&JujmHCK4K&x8R5&~Yobj$iP|t=+)3Hociz2?$PbXLQVD36eeFv#(Ef!g*ge*_KyOclc zHt@*tpXBw`hxHkJVO(_w%23!@;uyJRX3wVWA$StyIg~M$*rETUj27Ildqint!LF|ElZ@xTNizHt=GB!yPnU&uB_P|C=2~B z`zM=A?6=-pl&QXvFmo6@)R1q?B~vs<2$?Iih1PDx|PJlh>BZybB9NW*x3jrT&`EIsiLN`f@ShE^}(S79|eu_%3r*@E!)ltd^u{= zw$E)$?k>+6yJq|Bsg=L{QyDR%!GP=Xn^PVtt=p_w+o;SQnp-WtS{;WqbW6SbSyz-W z0R_ymjQ-RzCf0%sPycNhC6RoNtTL0vf%Ws%4Rd1}B7QnFEYX3iK$Q4NjuG>m&iF4= zMxd_^tNRxVdGHrHG7W9Fs&tb5ay9jVTvv|@PmP+l>ffXM z=Yt+#E^qP$DiZ9(TvT5MnQtyaLNk`iG#60_<6m<@G>S=X)|~%wE~4;iJSI~?OeVrI zm$>+CEUQDut}XfH09N)IlQ!;Dktl-Ml&qrOjbzFPZ0fl>m8&&lzkIfNL%Y<^#blZc z8=QYy%jF7YlZvRRxmcNKsW0;RiUBwD-DR<~S*))`vDJ!VtC9F&UK|+WO%p3ev4hYG`cgcMY?nn|4nEs3X1HRayY3zyYT zxr$1QR~9KK5r3Bzl=o#`sNa6$aiVZy1SFl9HG55E&Gmx_;n#%* z#c017#%i+(Nec|sy1@@yO5G%B?n`3hYsJo@Qv3Fn@JI=p5`*ueX*28G30+UR8iVY_^wfq)RL4COCDg*XwYWL zHWvb)F?!Nhde^BUyI8?OOuhBRV}5!1?`uBoQMUKIfs^NcBPUlK-hF1{od;RD7e!V- zUs(HYl|751=LlX?H2Y^;AMB3;QUlFqL>LE_d;#n%A&t}GP1Wu#jxYaen*uDf*a*_| z^zfdg7hIX2*z zlT-GTEVsS)sqY6I9@nHt&sN7D^@he%oHw@D1m^hcIdU5ng}QwjQVpz_&z>W77>IY&?qThOhhaqwH1O3X}Lfp5mM+%3_~;e#ISHm;7VfihF!kjg7hTAa>+zcN)fm|}B~_}&_WvR^xsXcV zc~fpnoOS48O zOX$UWtQoon7%@Q2&$ip6p>?{o08@usL872~Xf|Di5;Kkvmimfl?>M)ea&MqLy7}CN zJKpVf75Ay4JYnPQq`g}2Bd9ywM+y{aPZVJ3iuc9wAH!|#_feiSpR;t=x=xn}Lu>Pk zY?^cr_i_2hL)A|7&`kZ8AT8(SHdB6QtT(^deDaC|+dFrZRjy#A#wYYEE3)%=PLFoT_2!COSSCrHUU~Mo}iX#RhIHRH9iUl{= zq(wgU^GryhW*#WqT7(G1`gDe_MxcYlO{4&IK`=#6rD4`VrQs7Q&_vJg1!EfR8W%Fh z#q))LWjx>VNTIzLgAva+%$a^ZM-wpIlNO&A90q3b5^#eJ2^mCoicS%}BDa6U`l!kO zrq;yBZ}9D`6TM&+?8!Ic)q`z%AoqVrQ-JS_W-*8TE%#FHA{HS+3ko57w*>E-N5mLk zi@e?u>m!0>^_+;fq&YJO44Ed+7&LH}%m+-K*tb;wNfQSH6J}*URo-VMKr8a1hyfy? z*)4$~xNaNczaFn&r@t#6U<#A^vg>S@V#g{L(3D&xE7SAS0`305U}FR#DI>0L`^Jsi z(@P#vyLIc@c){!;p`Vpwh_E-tV8>UKY9aRc15IwxlIW{UCN(<7iDPkbM2-lq)Q3%> zm_OFl(#OlN&3fS006=sKhuj_n)Q2RHJt8W@6NPwLXIiNo4>1{e%9~D+agvhZDev^u zz?YqAbxnUl8H^@5r@%V`GldR@!*vY7fGiB4nRKKCRR&mu%;TS}B7K42qOVVwB* zhVM^GY0tvtEnB`b|HFNYSF~)oY_Z2%YUiv)9?ybVyV;aQ^65pM21yg@q$Jm2r|Tt) z51DP>sFG56g8XcZv zs9m4~Z`o0emovq7MV;6q_NwiJx96aAO(r|@L38hSikrsM57cfRy70tHo3x^$=b=7u zi(F!GIW0aybkU2486gM9{uPQvu5#h5Lj?#=yg+Omh5zWIJg%ay1eelP+enTir|BLL zR!ntVwMZA0gQ3(bq{uj(dfK8pA|I7*fjKED9{I-NrQ@+rd_gi05`vV5{4uK`FUtI} zO9Oe!26fE}^`DDZ{^YmYw|t|W4Ib@#DvMxOioV_O$&6C3;ROB4H#WBujITXULv35dRGENK^L=GJ%J<6tc zOo!!O2njHs0T{9g7_i;jO{ehof+~YRz=#hb4f+BK&78=cq$BdFa2@$nxL!nj1_i-q z01m&3C8s}xx-h&Dt3V_jpi9C_KV$f811K5ZmR`Vr2lD?e=7vWYv;2ox`TWLJ49b~Wq4mMvTO0rV%57NP#*2tbeeXl~b{^*)-> zIoZk>1_!fP<^-cNlx%+#FRX7;PCIr=K{9oZffh$10IIn}xxxs2q7u?fmIX?( z*VE1*@0;Xh0Lap>ImWI!M0^Jl?}SMjwLK}8JSN88@8dGH%g40s2vb+zc>e6dn>>T9 z{*F0|_F(RhGusasGJ4FwK}tXG-Kt3r(bc*B?t{#mW%C^WkOiTW>d7&K`ws=Rn4bM> zKrg^3PD11?xK?|Wpk5q8ZHcK{;5bh3G#3Q-Xj6goB$62nUo3r(Y7<0m+bg zi_d=K!*_su_zs4O&&9;&xD2hhelOgpM21$%e^Oc?C;Y@fP6u9!TM;jPZ=D6Y=oaue^%m)~>K)Nrtq!Pqw6xrpv!GLT3#AggiRe*uxUlg@gR1B760(q3qM}4;HSA;1Ask;z z&rQFE%5U=V5Fsxt2zgOjaw8%m1}$KG)QI}RkfkL`0SymxE0cMeZTY%^ZHrBui3TGV z0(R}%wI`HSXZC?JigoME??ocbCyh0i)#WRS{#lqsX04vMI*UaV{VR&!Ts;v?jrNl5 z8un5_?51K;3073gCG>8D<`Kf;7$c6weS1hOsX@4n+!JV><^m+TdXZXK3UmfW1(pj; z4QvtEBXD@&)WD^In*u$7M*=efL%QnfPipR^woQopIbzE|2SPivc3Y|qMJI;a5Z|Ka zY&6=?@d>GJDc%_$6<;nsHNHiBkNDy7Q{$J$Z;JQCABoS1zZL&D-q|%Z;`QGNwi?~A zZ~>;<$*@X7O;mxsz$S$!_KP*JVS_ zCasJ(lFkmmm|Tec_DKSFRb(HQ-_9RbRraY58gxIk(i7u-86qcpR-PI!BV+;5`G|<3 zK2}9gT}coLOI(mqDoJyR+BXQTp`OGMFdam|m)rw~wEQ{4MB`bXP!%DlFI=b)2{6Tc zrtgFSnUQ-<*J+Kh-q@%RBuueUS`nKFp)NwChXNa*4TL(9l9TWXb%!N~Ip~ETx8x*s z^jd!B;L>+L!+)&Q3H-NaGm|sxU*U&5`Q#DRuT~$27c2Z(t*f=h)w)uPhseL&ZH#%> z!LBPWtZ_ZGV3RdYtfoOd4W=XjW57b37+hZq4-(#0Dyu~X2r?m>vvfr5^>E1rX%HoR zh+-m479nkUF?P4o_$IT-pqc}^@S9x*@|$CRTme5x&kB4gf8yD{>xXjQ4RW7yH}>t? zd4Lr=;=TszpNMf&BuWIR#SE>0UNaZkm{Fg?qJ$e>cn|OjVS;861QH$CAC@O50hAs# z^6o*yg0Smv;cM*9i{PbTir}Sikywm%vDj!NrRkEINNZEwxW?S*5Jtmcmcr!k_6eNatj zDeRC1vF|EMDX97!S-A?y7s$c`q;Z5~fnzeLB8nX(1OBie_|+IXiG{-|mLxM!7Hl;r zv7k6+SsqGBgoyyf8ssL{nO53#9e$q*Ij2BLQcp#kbCf@m7IteAzO3qMgrS|1rV33= zPTx3Z_O>l7*Onty%Os>ES14VD#dsDj-oJOr(hrU_s5GI@@H*bdq^_wYM!mazLH*e~ zR*flL8A@j5CMl)7)#kjvbxDKS?{A-{CO6ZS&Zk1Hlckc`kCc73?_pbZqkAmV%O^qR zrcThlIA_DsqB(L4Cpa>!?Iy|t5)1xsveSDU^mB6dS=Jj4hxjBrGOd#-$W$ons9%DK zD!v%_F!`4k{2A-mvu8*37wOQ_G87TLcsjUb_DvX6V#}xtD78;<&8J^pjd0; z#FDcc?TZi)_z{H@QO^{U0|^3XWQd1IEXrA5nsGkUDdHR>b51pPY!t9ii;E)DHE;oz zGAud}!DpfnYwiOD(ydXl6~Yn@jv3xPa$E1@Bdp@l&)07_yuWLU=AFAWYuXJ#S;u%M z{v&Gs?10p?dAVF{)0xvdYP@&m>{fg45hMH8>@{*^zs$YLhgnTgA)>Kz090VK@{aJU zQ%|*_I^7n!uK@weJ`hR?{-Uukp%pWb??CdPYYGz=P#iOW>ERPpB#`!dZZbcS{fjg= z&}fAG!{$cmU<{%!6!t`y3w7L~kl-IE+4EryhE08M%;c3*xog_uxonmCC*K5v+eWzv zU&@Aie_|SM$@Wv7x)tC!OW;omgD11EChNJi5YfYZ>uRwa8pcYkV2}vKDu`fbo8L4B z$vzEn+m?25Ij`t9XYrfD z`fn^wcwymyDMioFZjU<*u?Ul?J`wHEns<& zUpDE%nqROkj1L|;eDJ_AMMtW+Mx}pQu)xKF6?j`ds>VtF)hL2`u_XWS9Hul=izD&07 zqx)4xy;#J`!n=?x%*b>)6b{$Ln8NoqG zWf7-gcX($!TFGzj-OF#@<9DV$TDj=Aw(TA*zRjZe{kcOI^sEqStJb<_%E;L-SIipq zPTw*CdApCVGjy(;cY}8!OW|i&^7G)e*-KWfUb~W?`*Y!*mCYIycF*XMw0Hi3Js-AA zD%@m6evgljb6_pPUU#u?xtX;)w4L9o!<4@L#&&2mzio%Q z3(EAH+o|2c=I!S6?KfFmsy(xu@=k>mIj&CJ7Z_hTeW+?89lc3 zAy#z|?<^M^HMZqZeq=D)!zy2^vG&)Kzh15R?yo1oJt|4XmG$asFCYQ*Nb;=Z%i!J$wjo?fF;Y-+~FTXmEaGiK>3He*L zi?>Guv7N*V=S%z9*S2tQhrFPDpOSw|%BB2Cb$;oPEPy~Nf1;Nt|6-!WCI)MZL zxgJ~t(5J3#F31=VFA}|5x3Vf*x5|syUfzc7rM0V=J(#s&E>N)|!i$Svs0rF86oMLWxorzEwT z*qsGX!!tnW`JmJO8kT}YS$3&06QMX8Cl)o*5WNMB^GBdyA2HK*z%DZf`atZ0ksu!c z0Wk~e6_GD;QDcMaCUUT#1DiL?|Jyo6QsK)VtNu|q^uy9u zverVy1;j90wI61MDik`|72Z8#8vZpPGGtiWtb>J{&&<0J^XD*)U6&a{XiMY_&_8S& z8X4AU*XYEz-|`z6@h?|avDW;CEh=b7Lktk(ZFA^+)XQLkKE`SPO{_{u>8R$?sS*qY zhV4t(0VrXdSk}d&CkWkwRL55r$sEHD`@C7A!J2`&xiiR~ zO#Tdg<#H%982c;BNTLM(|6=pzuMbsguN14emG!}*&OTnU*PFDcaAL2w<@POXmygco zyA`;my?KF^eqxcu8VlIPOYdnelZWho1d|Bwd@W=IE)y^aJz@aBnEx9x*fHP=;0>@~ z0xW?t{ zuplttQjD}p3o&)O5EC_UNaVU1v$iBo3w$vCVwiiZn*wp<|AUhUnyZ;@lWPR5vH)!s zt2+m~oaT?28ynshny5bexNI$-D`(@znuAyHo7h7aKflHbeoPLWY88DBoGaf%uE`t< zsPxfJ4(7rmoB|Km4rCHEmhNeFn=}P=*EfGXtYJL^0yS|`)0n3P9F6doM#f((5Gakm zlqMu-^uIx%p2Y;H6|PA+4e7y!Bhl*3Q`4Cil|xIkDy3`UkDe;dv{=*C^5SZ`T0S3Y zW}}X1T1C?zYt(< ze@mKxh@0ui9G)*NM(a#ZbzN@}t4eDAJBp@-)JpF3y@+2u`SJ?VOQ3(em zJrOQy2D5Zb7)o6N>zLle+(jCk?hNaQ0VOKEI5Fact@!C-&);N8Cv3m6O2e|c zOzz+7JPY@BW?|kgET0^d^Z8KMx2ja@n)PIa_|FkNO#H{L^cp{|+nDYX$93Z$%CQZb zwu#DJugp5upl-8fb%)b|HRrRNb#2+YbEVQ*XIa&ABSxI#C+$U9;nBNxjplcDWqq`( zbt_eAG+O-kB1ONya-v0vBK&gJ$aLCcKn%Bob4WT0~++F7{)x ztZiPta+ADm**n|59MoG)uFzLumDcXqzI@-h-Fw#rzB}h+n_BZRss`DQl?>=kVX%#( zs)24B52r+Zeey!!HHtbK9v>|{kSgFzgaIPIS@K29tT2?KAf74rh#U*nf_TJWKv8sV z;*@MKm{+P4Um;n?Mod87-E+#v=SF8tz4DkJ;_2>H%iGTFm)NmU!%pqki5BNS8F_qo z=G~_JC_k#)PZ)5c_K@BkhO}6>%1kBj<?h)c?ulOMeaMwBydnQ+Ii0=SB@Wbz0G}(7e=o z^=iLSM`^vYb%{ki-}^9qL$5`}+r7W)!!+-Rnzd@xtWm$d96hSq&^oBgimo1#@`Jhv z7+ghT4yycRLS$pk1|oalT{H)(OEyw;F>F}pL7|l&cql@OAA4sjyOoDo;mX#Bz#4+` zV|5Gc14U6Y=GE@7VjCMz@_T(@;$%6d0;trKB1En?b7mgQq9$i2#)0zY4xKs)5GFY# zw?Z}$!DdkXBJRq`i2fV*oz6aaI}0h=&3~%ZIXt~F+NEy!ZN}ohm(us&eQ~EDtHj!S zr&TCg>13Zq&6@*8G=uK}qk@#1FS^(1FcM&SW#lMMWrmT1iIKxeWO7?;HV2hsAiJ&! z`88)=x~dh7pn?QY++ARNVm?kxrx+4FbdHA-y@Q*}H+k-&L)#s@@a(J45gq~y%Em2S zx^<}AHOs&4OXo|k?1@Q*(} zmv4KUuttRd*95@zJM6zW>^*b7rm)``a5ehHkp&t4mSKpT)3WJMlnzT68$qIrIlBzA zf;Se+5Nkr9e6fNA!@pZNLsJWb5h83hD(4F{dOhX~%)squ2EMd;f7U$0=0;BM)V5vI zx*hn%X zr1hL>INZvutWj)x`$ml$wdf2@_{5dpr+o6UobNcB+GJ8()%sl<@BitGy+b}-{tiZo z+zk1iIv+Hl)_CLP|=V+vImMXm4(j zWu)lVA#gaOu7luk21G0zF6SX6K%1&LURjz24gtV(o7-$ z0D_RDVBI(QX|zBam41cWOn4$lhGieg&9W-Vjl3T!Cw}>5wG#Xgz-F+bNosREF#z;f zJkdg0ERXl^O^Nw-9U|tS>7xBf+#jq8?~B!alcmV-u|K?ld=T3rKO#v*!4taR3Bgk9 z*F3=jZQ}_!Q-^{I|AlZK*!4F>B7dhAhy)w4^Yzk;3Kfc!i+#nK@wIF^-+kj-uCd|x z+*k=?VRsXw z6orE|m@8;_L3W~2zzYlyy%TYOuT?F-f`y~s)}sgJDP%#JobOs7J9REI)|^Nug>v&e2--B^vh}@7Y&f zuo3(y&}GH@H-B{O=%l8lGJxJKzLY63@F zOuk6XqioIUN<1DJNtg)}lzfO5YRbH~;FZ6Qf>MamxwR1eEf956wRSj={A!A)BzYHo z4Bh&->~4GkMHPzWY<~=?Vp&yao2t($fjSpd>4ccSQRzf})a%#H11h{c`7I0NH~Y75 z+N00t2WOvMUG{Jaiyk$qS!Y(cO1+et?M5_v_t^1WsqO0Yt64ZPea-p<-98xGwN)xf z=f{j>0Rv@QZf>l6SQJ9+C|0s;3yZ`e>2p^y*R!GRF zP8rtoL^^+3qU2xv^6clE-}`4CS`yA4H*xx$ac|9$6E^*xY$<~};OzUh_Y=l!jPKLQeL{q#1&dIZ1ytnbi zTxNjs#;kD@r_FqOG(fqBzg)bKDZ46K;kfl9f+G|7IudXUq^>!HiGn^E0~AYcoEThO ze9a)KnrtJot~taT@o)h>9Mq9u;}yw<&b|b3`^H-mGzK0l-&1W{#V+ZgF(F^-54Xto zg1{IL_k)VY=*L7lG1LH!iA{nchl2S8i8oR98I;HcuNuMuL)k5SaAVH@zI8?TruU>?p`zL)0sB{k7miPtn)1TmtXvM zQpez9E+c2qawiLn{X~^!W`vPL{Uv2fv&;I-#2I!!MbfxKiF*LP>J$QXFIE8Q$KBAf zc{lrT5?Bgrk5(`>%HJ9?4@?goc4SFXX+kd#lf65=hK z#&UZW{pgcRcUbiDsWKqw{rIP|pRE@e;cwwV1UE(U#no8W(Lf?0?YY@%8Z^G_!$jhB z!LYdscw4xQg*zBG$ypX6oq-auiiz;0p@$tpuTe7a2wb%36o`##3MQ>Yf4G1iAgEFi z=tP027XZssyb7Qe&2C^!4Y8X$V>cH;P2xhPEPTso{97R;NceJtU(27&BvUIaz6qaw z`jWyMVUABLlw(+@$SH7YNr6U6-JL{fG15!Hwv!R?=~g?};hEcB^6zad>hJqZir^1I zdJi5qgUw$!x$-SpSyaCrI^H4&UZEWoPS7?&>9nL0 z%I5X5{m!ZL=mNXoje0hf4P)1r_I~gnXjY#c?XUj+-Km4a2e-$Z?9fX$0f+KSqcq8+ zms%ulKT(!)iI~R#-LgT^Eg2IL6r4ZJW=aQv1Yyc8@`MPB8lsVG!W}PUJMw3WJOp1p z5TP2`5AZJ@-T=t!m)~OvKWi^TSulT!4gHh_2WLwk-)H6IGwh`I_O239+9fFQ2te>1^skQ zMoQfJU$zjef$jegP?REk0UN`5{3kJmoqjm|zX>X44J$=+nCczJ9A$)vm?^uSMg~I|UKG-#^vHUsgtzoAlt;IuPY=8gFF!Q+ z<3x8(`4Om$$yad1u-L$(OBM<9E|Rxv)bk}@fi72&sE@|&4x$W|yDhRS;? zpY*ok{O2DvBF~=}E_w3|9-Qa-)r)`TdCU9hgK+j|@VKErg!7PaT0fc_X@(KV6$m!@ zsVs95aY_bSS!j`9lwy`aBn4uY7SmoXF;6iEWaxky%aRDRmO}AabU|0z5ADMsjPtC= z{N@v$g{{ziG!B`0w|oGj!*~2SKbIf5(RuQ-WR@F=&{x-|<(HRY?jrzp`^90_Nr`dL9LbL(QG`Fm z_{p34beCtmJ$`!c{=CHJm*%|K@GGl0q~CE~{ErelmsMY~`rQ?!SEUvI^y(2zyo(Vp2u}@&ynP8*a)Wv(OGBO;e2DAAEyQcN5{)qvVh*D{3)=nZcTD zssc{bYSjt;OX!E+%z!y6^0iG^Wf_#WjFe}C$vJ6`X@{@q8695f89Wb4C+N29(y z`T6J9n>6j&t}wR&`b6hj0s4{1)(kRLg0)Ca#*Wl<8I&lDGl$@4E?wSqp_Vo>?B$W^ zOI#aWkdL#GXs_jQp{?~s*M7P_#5K_cE>PLk5N{U$2_!9(WT8bWB$Q#t{7Y7a85L6& zAs)$U%Ut}?Pk-?TDvNyb6LaR{H-mmSAITc=^xQ*-y*bRrmK?stN-$e(bb3tr>GY8o z52lUp&>dQI5d;U8#fnj8%>+%a`$yE5GHXaSw0PN!xr@ITIup6eOy*UX2F!I(wJ;Zn zglHdPVQrYB)kg%A8S#0$j5dey$u;C;7h2p@P!S=dTLm0t`QP`rlmCz_SC@}BBjlsr z8_|Jzl^z%Gv0!hlt6hf-?8ug+VO{w*&-sgS@^ALwW?MgGkNAS`ocz=74ePa&b(@hR z9<$AhHD0SRvBo6txLzkUSjdHcwgePo2Wm{z{?!|`9D(N}y&Owr#M@a5hDBHP(!dD3 zhu^~-SO+P`WCtOTnH*?7p$D_4>cB$W2O1lIKnbv2`K~!Ng$zzn$QUldN0y@4b31DiXuoA1w^b^AXEWqaf5;= z0*VzCM6l5mdlws0&OZO&%-U<8eL{HeeV_0Deb0A&Zo=7TGJDpnS+izMTNg0kqUSHj z^MHS&d2ndA&iw>wMfezbZI;)D+I`1qFd=JGS(7}&s^kH=t0k^Y4xyC_sqH7)?Ufi0 zg-FWAxe90haT%`u33mq<;b)(iyG57VN6Ixg#@yC^of|(k zC))ezRWq1$XD4KX$ zN|-GE;p&GqeZj0RU0w(weeO?(OElejcOPEeLyRzo)g7`_LQL?GcdKo{@(@z$gEJu_ zj3Znig~J7wW z`o$gIW!)B?<|zr4j1xgsl$MJ&8o@|di2orZa1lHp_{bSij1;UR)F$~dGT>j!f-_Yg zd`>hp$JQTrutiTjp-F=d70k|}nLb*tbz|;uql|F<;I7`lHG*ahx~?ZE2}h64(pDF- z|F|pgltN8}C_F54+6$`j?M1{JcqQk46l?x@qp{ozejwFlZ3cKV%IMtfd1g9>%uI-g zgz!Ke42=kM$HStH$aJ1ac^g9U78lF2qY(tOH!sc}ZC<uu{dzk?){&4NGBaF7 zCk@gcVUd~7u?1=#gx?A?>G=fort76N7~kS6cWeBX@l3Ki!eDpwF-l3h1LFv{Y}1f% zks60lij%!$F`IL_(FrMJ6SoKtA={nHWLxHBkZ33;2hEVa`ZyW2!yZ;qd&mfP^kxq6 zuBx0M_$o$T1)GJ-hHza-lt#H(qOT`^>g~5jm@kMfNyjG@c+88j zBKnIzaNGU&SH3iVDkD~n7&vFa4_8Nxc;^cQaQ~?XkLJlQ4)c5jen+=v8L?eyRFDzd z3c+m85c`DfX0>$%bu$bcCGj_RqH}Rc++Uad>^qL_VtcgdbRK~^IYXEwDoLC5LGY!E#QAzGUsjtehaK< z<&AS@6U=qhOK6I9%>3II68D9Z&Yf(nt1(8nTvv$us%+N~WuufH?@hMrGnx}o(3;!n ztTIFxSLMS^a&bt{A9BlozFXvqaeI{?EjF=7qy2>JA)ORMdNf9zOKg z=2x%ZDV{dRxyrZeDXR1!4GBHqt^j%?uzG|e;ufN*)n*Rm%+Y@+XJ@Y^H`GuR8O5Rg zHAorTgw(7Jq0NT+8}FMJ-h0oL>%Z{6_|VK0AMV#ZKbqfwia2wx_aLZ9#Q9QI*V%>F zA-e>dtx90n38Frz1O;ZL@60azy838yssFg>UXrm(JCwQC{VYZvg?vnGe2{g!L_Flk z#D`}!*pQ`Sk1wJ$x8}m+IGneJR*JIWi$ceTsc{U3jdlIPSKs{h=5^cX()*haE4roG zMbtuC0-!cl8*Ak>$lW4DszaO~A*Ax+XCGlS=NrqqPS|2jUr;G|xF|#JPE=9gUSYnn z*S>66EXmp0(6$P%XK&5nv-~@se=aRUaR6-qVJVVy)9HN){#h2c6lsn)eh9rGjw&VU zEILZ4;8Eknhf}*#NU#j zmhv)w@|B5Y1xR(x%Z`CEI$~Eda^V9w(il7l6 zTKMDR6K3ltj&0C?eEY-S^vBwc@juwF_YUsdAGIfd~HF{z!v8hd21^ zq1~zZ&vyeaZu5y<^EWq`{9)4vA6R@J>T&H{!gTQw?fQDU)&vJ*WB_8-JdJsc)Fv8X zmR05KSfF?lvTD>Rgr`=?rD}Q-#;s0pfjo!0oYNY?VS8FJDQeO1Dc8yk{NdBzo-Ljm zXs+dz6U+~+0{u3I=^bvMgaG`dwhT;2h@$;348M@THYEom#EL*`F;kGdNn{FoR-KMD z|GLrG+~#`4JOr;z3Y&uD$n|%C;|9D`wtDgVIz!Y?h~HmHoDmhywmOo*92%9J(C`Vw zVEw{(1hGl8nq0wkj^#|we=^-WwAy<9lv|{B>b$jWTe97wOMP@Q@}pxS&)hz0Sj6=k zzG&NqcaH||qH!1IEl+uB^JJFtmO*O9t#J}+BVqvDq3qa zWcF+(CCi&IlQW$gcM%Hi(7OoJht=os$&<(4Q9O)QSjD;zGA_QA4vPgzLUAb#LaxE| z!}@wL;e|K9?AE=^6IUNGMP<*8Qx!ymjgNPze}4DO6=n2@Wl=(WQ~L7B5i`Rd{Bo}O zlX>IN)y8Kl)OLNi?C#h*=VEN+#b1rF#ll*}dBBcqsk|^Aj#^fV+o5;U-8#|$^T27E zVJ-39be3yAB|RmT+PmOfAg`uNhd6XuZTg=Hm|uHcbt;%2tSRh}xKW5150>%&d7pa+ zy1ZT)Rd{W=h!xsv7)V%)8=3dbjh%rD&dGE1v+FwKB@sJnxm!h3Y+VrQq_uLNjYN6H zTVm$(2|<^T;YsAKZg5&UOfVxdfp%?-2`b;doG$45NyF82v;3D`lZ1JG&0h2BC35?azxIf5nrHwZow=)w8nEp8A2R?O7j!1 zo#e$uP&kfDmiE<)%ZVcgUmOhRoVZ?bxEAtc+!y#oTY@u&4j0#dNbo~et`C_%E}FBr zICrrGKmV7L=0=NO%grAJGNyI@px zc>K7pu97_EX*ax;tRfm?gcqaP<2~$!AMc{~H~cap@yM9(ML7i*TD+KyWaZYvHSEPb z;;=Y@e;@-K2`rAL#YQ3BdVmex7c6Qs3UNyem9;p#@svfM4|e*Z@s*d;KXgj;r*H`B zxA8OOq%kA~uMfu$KZNIQi)gy7%$Z-`e`Uk8$;8i&@SwipE`+W+ zYzWp>(pC#m<@PpccTqJ0_FyeK%ZxvjRa&j21X7Z;xRGu*+3D4kKM$Z^*BcUBv>G%d-kvkO! zR_eIQ;XGt@jW^fEZQZuNaw_HPid(jKgV2#x>pKHZxnNIJLbnpbs4RO~RYq0?T8&20mWH3|43~z? zuQVl*>G+VYK7`nnA-74T04#;P?+_Z8VCXT29l({D6Rx?UTvc3@-Qo%1GOgp7Agf3= zD+E6pRnn-%xKWLN!36~6V|SdZlHOQ0oKvP5^eGtw_~CoX|FYiRzx1%kI`XRd?$JGi z`}P{B59`@un7Ii_Np?Eymye3GkH2)_nHG;9IPkP*z_`)3=&2_RtqNxotK{qulhwAXu~yI)(|7WDcQCghr*uBjyjQsk-EO{m1a+9Q2W0@g zZuUinC5J&%C5L6A6{WKQD*mkW{LvB8*b7Xu*b@`-}CWHX*O)J&( zR@DlP%6ucXTwAP>RV^#GXd^R3#M2Q>#yd|!@w~VmfuAG7b;rJ5Vx+*(9un&*{#ixT z6Z&+Tct`(qqjUt9*Fm+UsrGwDxirpNOJc-Ef2^2&jg#8rPAm{v2n()hb) zO`g@D#;S?)mrPHs-#Be3Vxzj&7(b4<%5xoF7s&wDCyD`TOLCUp1!*gS!vKTAF}qYa zSGa_f-XV`P1I>mSHumXx0|&luK3hhN`@meiv8?E@wXpC$@taxybR1@)J!ay0(2%4} zHzFL_2P|)j5Ot2DkgTI>+3@LnHuhy&cYzfp*c|rwXs<^RIeP#?*P@Z+qrY<&HOe}T zjE3N-Ra!nEOI$IF%C~O6_<`q^FW9Gl;2xLPyk&!i5#k=PX5)QHi|@Mo$tB}D+|jUQ zQW$vI0pobxRSjOuN?M)~EAIxz`LB#+TeAJ7#-nyYG9DdGDh;o^Q{0R3c-LbiEQ+6-y&AH~|oj&>BiAP@k`F^bgnbpM_plHRR=BomPc6)hBPEhnEKZWbiZD;u2f_>VLX{4{KE0sL!UnY4;&U{(1btI7jN$Atr!|1xPD$cEqBp?t9~ zJ)a!HM;wNw1T=2Mh0aytsJNL^qPfhOII6GDU$ANQLt7W!u}*{)9-K6xX}!#*F#~QJ zaGRbpy-ACEr_7l%WkK_1)ADA|G;@3Ru3o2(n9{j(cgRM&z+d`qXq#9>yk;2XInTSO zJOy7Ro7o&!qqYw}dK4di^vr#Q`X1c*{bCutqF!5f4I}cSgXCjTI0k*Qi_Aug7R}ze^~vU+ zezvJ{o3-iP3p!-ejeaZj`(2$}IhfbVhCs54JPjL1V1hj_f@!ySFXX}1$=_aoS-*cj zWj{XT9;l!49_5`nk*XE2kNO}1R>#(yq}F;*+&`KR*;%F2un+4e^o#m$dO(kWQKQ2m z)Ntg=G*AjX42qU|O+$PV$k&wON%N^%SqwLuO4PBIQ@!GS;W7W(x3J*0es@kAFmU>` zM&0Vw>(kVJ~4&XKoxjqlPxg|l>VVzW0O?}uvq^p>!M-|mNSyT(o-k`J~ z38p%u$TZ6OIJ}OgnP0N5V%7i|%|w-XlyuBtFXJg^IEazWs;W>p~pe$@jD{uYJ%XH?e8!xA(od z+Q0VEOZSW)TxZ6Zslt6~a1SxnUpHs&gjtWS{<-Fa-re%XZ5-!XKVWj)x>Hd}sp%;~ zU%P6^j&U9C?a^~#M*XhSyVc(`Hg3!D*z0FfJ2!9NwF&O`J)G0OUv4ZeS!z$aU}tne z9R?mpK{rh^D#(*FA|4^t=!&GCj_S4889Q>A3Qb8H)ZIUDccT- zu&-MnudUIc?fy&tuXW8lz54#Pt2d#So~|v1U3cA61iP-XHpWPh8YdxG(aeD~)mAtp z!fvadcv;E@Z@WXPjWCUk8H5W%Qz*zhrGy@@FAgnUaXKPLV@5T(o2G~&^R%Axwu%i z7)KecpInW+02Se^H`Rxb$x!Zr|1x0#_BD?5!*-dcMeX~=SaG}ATKsN4rT67)OkdJF z`g{6eF$wJs@U;gD6hi4yO}Chy5{1L2M_ytIg;$KLWTnvhAwH@EieH8x!ziWqKd4~d zCGIl!iX&!@SG%!AJZ47wU$D4S5!?yW`oadI^R#4A$n3KIQcMb&YWwV{@l@kVaal^i zHS{2cX<^pT{E6D)Gcm*evECWJ@Fo7c(J*qpzQAACpK9@?1A3Abr-WawIKpHpUfqHc zFO%Srze-s(e@;psCZ32!;x==dc-h=8J~z|72{%@PC#C&|Ao&#GXvF%vJnAEHM}zr9UD^8471FUy+*z5AlyhCrb`Q4l#)mXvy3s~!Of!7WBMcJ)o1hb zAH7ds@}PU=3jez7LNl<+waMT9iA^oGKJ6m8Q8~7W$nOht__RVo7t9|zZer`MtMSJ28;i0WaHr&%m5E3HcxTk8Cj4*Wip)^%Pp-W_%+;godz!G^rfKFVl zU3-~#9lz@dk1_Gy`IEAmwP^Ip%bJevmM@!^yz_Bhir3aLO_88U5{84NH!~+P(wpqf z^tSf)^p5c6dwoP4Hf7{ak}(zGpb|t!IX=QHg!>A>aVP~trzayaPTY|b6B(Brml@YO zu4mkcxcs>JajW7=v)3V(UKN`hn;F|WwrA{!*!)<$3LcF3lZm(!B|(jiEaeQgFG-j( za9@jgX+-;`%W70ipFO;NttYA{RbTw!zO|l3-6poHUoExEl(zM&e)c-JzsUWwd%brd zPE}#(`e$<=of2|~+YD1fwVsTF*#Q6~!5pAZSV z4@R`gp5tBpaJ%Nh{qxeL-%gm0{$?%i7|^|5J72b>6`Xquv{ulz1Zj1HCl21&G|@lg zIAVh17~#qH%=fJFl*XY{k}O#lK}@6jS>}hW3iIMLLtaIQVnlL8W<=|Vo)IG=@*^OM z@QNWj8I9B7#E5l>IdZh(9UtLqs6fXcIRn|e9z$i;8g-R*`+7C4yD%-G(zqT?YAmgm zP}%+Sym?=qX)`3JW~EAPhPKMA1f7Fjz_kr`kNQx*=(<%km^u#8f^-~qKn0mG_)otN zMNFt+)T?@q`7c^kjL=7KvOX#Un|pAOt0hPx82Wr^#~|T+MW7US6W|{fQ!-k1oBhMRv?t;d^dJ*G`_I z3HRPRp?U+zq-5cS%%n!m;&7aC|o?;MxP<^9+~5a8VK;Z}WiTn=U#4=5@~@;7WDk;{Awl zQDg^Tx$`mk>=X?VvkN8xhjim}An4ZaY<|Tv<|#6l`|Jp5d5t zME#6Z351LFZ~#-cslf8UJ!3d^+5@pV0LX!mX$#k_C%ww_PLJ+6X1-bES}&>}6lgeE z!8{wi`ku8%Ki)HTW?Vq8y}w4!q^5>w`(B$fqT2!gcQfuWuYOhcQ}bGl_$%j0cjD}p zfYV7h^gQ}TN=qCHQbnYdVDXInuPpI$;JNNb?kerXWQi{pZ=4cc_P$^qIPuJq6W^Wx zz*Dr}Jot8v!(Dd`PaqN)8=oY>=%-1mxrj1MZH=lqm=A+S*lnc z9Yr;-2?|x++(*aJ?~$pt`si4cS8-G07e#m#qI=n0KOQzObm{Smd20JsQCG|swYTf$ znKw4Af8&_w@Vb8di23&DH@07mJ}CNrl<<-0bLb`0I9d9lC}UpvA?7^FJ0X81 zq?CIF_ED#2S=rBO@=I>t#%UZUdelL{m9MvzmRTCct8Jcg&%nGXYBo#hewd{NCmPmC=8!;j`iqRxKT$2W%QiPgZvJafG}3lvpE_bchE)5!88 zt*#EFAt~5C!L_t-xHwh1$45DGq(2>rbm;CuPmPKd=&BT)8cOJeRw8t7ZQp};e|lz9iIV6))5xJn|wm%(|QB&1fCXe zK6FBPoT#2O;$=h|3Bc->l#r~rk|W$SDN1Y5l5Is-Ze?i=sz{-)+ZtK*jFq`ysp0SXda|MSHI z=)4tWcif8l@yrkYa;5e6!qB{I(~IE1Nb|6JgnK=5kE)`xXQGU>q1PyRz+$Dy*-XG~ zT~63Wwh^X%#{%z^ffcD&hU(D?qli*_rorghEQsOAsQk^G0t5G z9OJ&T-(=4sCAX7}JOY(#T|9?fIIUi{p;(g1G@$M_1l1q%ahrQRaP|GihO%){zK+6` z?KuWq6*Ubz7ON^w-zQwScpK+Uy7q%$Kf~_chw1Oqr9}DzyD*RY-OY5b_Kb$VDE=9@ z9%y1Ke~+|pe1F3n%b(LVe1_Gq`D_^869NUzFa}(y?|ue0(I`nDUnHaUCKbtG%2nql z=P}htOy=M)vII*7qn2nXLB0)K0u$l_uBKFfTH|b30_Cx5vGB*cq>nK*Lob`tx=rV4 z6Z`IN-s55O8*%o`;5U!=c_9qk-7Mzm$Y+=YvXrW0xL zvYyDt9ZcPQetXxL9CJ;ijNNqNXI$fZ`_d-OmQJ3jM_(~dt(@c4{GSz=ADh=oJ-Ip0 zY&UTO?eDo5K_p^{6}0X~c}I6{KETTb4rew>)8uqpr1PWj zDbDWN7NxiCHPJ1iyr%!~59YTb?x*8dz2@)kyuK6f5N8H;+WsXPV2Iei(YxwMzlm#~ zN;cmDr-{yVo6`xB)9~%Pu}4^W_^f6X$#wz`NuV7!@^a&CBV6|1rW~8#Ig{ewA)Jok z&4O~a(@>X?s>^Ho=x!iy?(N4H6^<7v*JG#deEo_@nLTMi%NF-eo};I4^xt2gXI#_f ztP~CZcyQMwacDfpH*?MY?sV`u9@&xT*DW)-s|2GwEE$UUkRTMR2$E152`?;cC5FdK zn!qR?VEIP~LE-6`t-y?V!Z@y6)wv^H8` z#ztbqk;s&4Z@6U-59AWZV8&=DA=AaH1cNL-At4GvP6&zy*|^mjd#rRanvoWZ|9JXm zk+JCV+TYA`B4ttj?F$!9yM3XavChB3JQ>i+tiQfoH1L;xY}<~lD~op1+BHYIdvg>$ z2~qS!Ngq_H>X*tAq-KPDRO$mS2TE74hXKmb8;W~ThVw6WeFphWvK2BE7@pvE2Aw40 zX&K9Iu+}o}J@uW1o5#UKEL~>ebMK(#_Qkmq7d2_NDDQ5)+&cgA>89@ae9FD%C;xgM z**?l_JbDMM4~&N7i!{+xBe*_X7PoILUwrshqfzsK&?>o*j4=KcGAodzV#~ymB$Qr| ziN&*$Etkn3$9GPOy>4C@xBeI;=k7dY8{IqUZaw{)sJrBjYw6;8zNmkr)I&Q*h*QIN zVicVqGnFw4$^t-`O=bZ^7Q6LMO@p#{jU-vXos?;;qP)c9q|79AkSG%j$Whi>RB$$o z7-B!L}p6ZV@_(N!uguezk<`g!K_j+BFcn+tHe&@gD`}4ki?4s%K8NF_P$FwwNGg!Rk|*%f8ZDQd7N@8A=|#8Hdd+tUSi7nQPat*3RC!e60NFOga9$tiW=ul zVjdk1AtQyK8Z{Y)mYgH=ho+PAcaX(nC6b|l%om>p_qs1WCButLP%?a!(SuZ;c>8`H zz1-V>^{#zK@78aw-TLOL zf;{#1Y^t#hR7W7_4} zX0{L4E8I9)+FX}szO8q1z2X12lsI;y*{|iq52pFumtVS9et#OxEkDOfqZrV47!~yx z805&MP?=FIV~Xj#my(R>8Z%wbG$Q4{FeK+u4M*b;%Nj(=UO+y|>SmuVCs(B2b3yn_ z|JlV<9=c%gguL6_D>r|#+c+c6xis^QzFj)qCTK0>1m1!5d>FPs6?9UbWcX^w`(=DAHQr4<$Frz{Y1qzKM{sm*xnMh!y$uFz=xY`xTZ;p$J!C%e@p^e9vmd%Bg z&~-2ZL~J}=m`TpU3_)tIvFq0rZnUP{xUl!O2Uoe!M0?AHc1q;>_2ybxK_bj z*?ho^`&?I_ywZ%?RCc-J&8PfX)KI&7zJFR?SG`ny4@r3Mo5BH%!^mM(#kiAh#Cgs#?=@sKq9YyG}`;>Zz18n&7z59gj;Z5%xC{G(^}h5PkcyUe4<+Z{KL z?H2k%GykX0b1!^j&Mi*8wWs_i>hs;m*!lm<5JUh?x7>Abu1P>YXQ;KIJP`hFq_z8U)ae%Bd}s zS?3C-2pirC6jY%GQa%UG2*5Zw3Z;!|AVd!0IE@E&d3>)bZf3+4fA~KgROnjqDlV!d zqyI;XcV2qw^y#{7>Q%$#o*(+&d~@A8Pp8JOTA z<3eDId<{cP#-8LJwpr@5wJ{*%m~PKW&-`F zOqGm)?QhmcrtmSqWOyCc zm|MWC)3%m?QSnn^B)af^rt3APONTuF#&or0x=2FpRnH2I_#AG%ll)^|uLdkA5ujP2 zxg@&cGmC280;WJ@+c33Dgz;+Y>e(K5t}Y}cTGt8dF|BucwJl8p)*Bm#K%ABkI15hd zN@qh!>mZxfP1-5g9?%J(wc)vPZEqXK3#SK1If%q1DC?UavNE!ZiBPi~p64 ze`(qHq8I(E9)D~}a4iXre)Pf*sUh2%^i|T%G z5UGQet?`6H__P86_E<1V;zMD;L8v23Ci&<@98@yNupZ(M-bnn(rC7o?ynVapGM=uK za~YTsxU6vSS|%JyPb|e+UTH&nwSww4tnFA(T4F6=pR{3p+PXk$37D0ZcpA`8c;1k7 zu$E{UxQv;Z2+54(dGEt~+R~fn9Zgg#S$t{>X>7-wq#!a$BXAL)p!F-<0;WLpvSBKg z2m@Y%O%^Y0_o12_ekW5!?}Rk=VXE-PYEEp-Z9ovW$C5PWf!0W-b&y5t6ZqD83!7cU zZMFW3Ll+1XbSr4vWvDbkC^YED;w+9?=>dji>OcokHL&yg`jr4$!g#=>DdKn(jQ)JT6MLSmG+Q!MQt13 z2JLcCAKCcS{wnePW8>Q})*iX7N9xeL;B@FS2YZIXdW_Q&wOK|Y=fzM^OS4XgdM)B4N)elCpC+9fM0OqLfg1@LRcaK$LUx=~j6{A4LsO*TMrOLm zCm!cxavZr*&~yhsT+Q{AeqDOCP06g(dFa^ri%0qY7;7HYE7ufL_Irx1^{Uysahuq+ zwev^cHwZEP)1IOm`FaXQm1_=md*St~gL^BVHR78#qqifjpJ|QCW&_b)1OBcWYE;Zj zJ__QSU`;1LiiYc;7>B46M`I+G_;8Ex#pu!#w-tUExV)r$ z-_Cu_i!)9ye)}g;vtE#I({iR%nDSX!(alq%VZnhFI}eCfT?cn)Ieh()cV0AWJ=HVX z=Hnuf)U@8g$D^}4K#E~)xUc(KL5^VUL6a1SBchdBL+rsJ!AK6SaMwS)TA5j}6BRq1}{E7w1se*rCN-6+u8 zh*maeRWK4`Ya3&s_918mOn7EdO30Xng~zKEVpEq`6a-nXXMN28fpZ$TQmEB~Z76k! zLmPY0zeG!?`!0~7d(d6W{VQ|{Ze-%!m~iy*eghme7{@eiF02Pjm)&GtcfzbyW^Dq6 zP1+=dwTWXVWqiI&8{Y=)K+s;b@u?Gt#7Ejh;@bd4XT96rQ=Oyj$eZIQj&JR5$&k+XP>;%Ml1s*u3M#zjHEce zogyi7U$dkxXqXV z#m(@)<@x~i>^b@@^RCPG@|xe@Q}m~~1sbZ8IftVyRkhmM14g+zbxA{^GkG;=C@Xa( z7m>-xyWP zkuEDjySQpWr9|nzzJ|qgaXJNN=%T-J(K0ZT&E0@dbn5oCx>E$l-1=kl`n>NRy%6yC zEW2{b*5T$`{U=9?hxM_0hBUT0Fe*1jBwtM4B*b#_dowU|(!F!^xEWL8M^2=DQ%WYS z7Afh4+B0&sKz`H-kLAZpYfj2zVH;%ys+Bt&rzD;ARxOsWb(%wO*=G}Vl4*|!Q7Y@L zuDo8>;fP|%w{64KvSe3cZiIJB%p0`7g8IwGT-AbR%pO`f67z-$H)B>iyu?iUOJd$A zc0zw)=E9KuH{Ct0o>SbypaG2DO6qw@(Jcr@q|^v+lX&dO09P=Bj8g7v(S z@Z)dQ=)iqc#nUOiw#B!zLA}7%7%e?D4|!yX`sM-}Rv4&Rr1!@Oz+ox{J zQV+Za=oy~1HtuPG3PIe(?fSqe!p#~|;@%L*3v$B7ttdIdxWBV;ZwT}+!LqlYaY5ct zanw@;XyAsH-~12V)a5bMNVUBODY}<{Os)k zU8(#Db@kgQD@vPcc6A;1e23?R(WmvmO=I-DI`)T;c~0ued4pHz=CiG3-v*vAyXud4 zz6Axy#iCgbR1AEp=7c4lc44L47n;pH)p%@~^iD|MX7dEznQvBg59T%2(|X?3d?LOrxY5nf;UYBFOX@3H{oyjc|SE~P>^j?P^euAQgD+cASoct zOBBG`8ENY?J|>VP#9M3m;ZSPD!N73$FBY}xJO>NQQTEC1 zm~={#XUu7B)EQIRQH;+=rzD9F!SLW{YepUtAE6j04yy16_q4_7Lo)>OQANa z1X`4j0r4wWRo;V%7D&P?HYK)AsAjo6c(IX33FDYYxdxaaw`e4seDaF>AO^F|R-s zKd&CRg4NXCf5Qn6&9cEmasyoPxn!7~Slw~_;e+V&DCS39`m1+6mT1$c|4 zT-@GPe5-D{DE0$bWLlEW5-ZF#sQfm1!FSJ+80NnL4^=K8Q2)a7{SMPw-E12COCH;D z%?Db;%m(_-AiOq5dt2@rkkxltKKM;I$2=AsgRLo)2O{Q6(#V-0tKgy2i+5m4i|eLPCvF+SEH65lkf(8j0sB#DpohQv3m zrH$_<50j*iG>F8vK|329rR|SaZ^oj z(ibr@4umt;40EmfBh+kRK6R z_=Y>1eZ@`}RkX$ke^QJtCfa>+#q1`{l(Q$*^mB)mIes_%I<2>S-8`*hUFq%VlqF*R zavi$SdetHk=6VOLLZ#1O>~PIM{Vbz`MLjup_{2y9r4QU(RDEETp^lF#)Xre)tc9Rx zk;fhlBDdVmz=*2EL&aSSjv^scX%rh7yK^YZkQ`h1<@!B%R9fJhd}#N6U8Fqq2u@S> z;b`f=aSPu*s=wiHzkR%JUVjrS1{Ja1i>y7HvqY>D50xO1O4cjFfH69zcf|j^RgG=0n+T$hAt)L~{q`?U{G&qi8x55lg`8xaB0(OBMqyD03 ztDtSYs{GWjE4(Xt-$mqs_ELQ+WFPw^qBpIreR5b}gQv0YUSM2gaqXAcmtzxTHJRy;Y0$uuIx#K zuOUAXJNLY#{%&pAPF`{jjJ(5krrQK6Jj&HqZzxB61#O%z#KX{sBHliCl z@f;3+-s#74mm12~dxiNUJ(Ibp!L~=il1KbeJ9=^G0-T3!XkIS_tz!0}(BMyl$|R)@ zFAhWSNbzGXT|2_s_?vPtsQv72ifz*+KpgCbwI4W&NjgR zVpC^Bvy9UUg2h37p8m(k8KEc3gZEx#Z2WH`XYsLYY@o4TIY(ktq9%)uZ;qUC0xu$G z`Z@7oPSD`Ezq{2nDje;is9BV4b38EUB)UiWtBD6lS77G*5N}CW@L6pPH~<;MSxwpJ zp)i=ip*D}$q@p3KxUhtcv+->dozS^R;!}|u36pHWV7Hv1-l(v|(XQhq2-Nta=kYudAX)2d`xFU_)q-4I+uHmusoB`nb|b>v1-S<!hCmV@y?K!A-op9VZN`Mbh9idKf8nl-vzhW-wdrZorDJGE$EG+zb!dR z!*%wX?jf|ZNf?}dSDKIT={L-MjhzAb^I zpl-MK6Xo+Y06muUinUWs3xoxsi|sG4x&mv{v0w4Z`+;S&ytqte@BOt-s$-|{6vgL^UN zlgz#7AopBr7~dEC#)7go_iW2W`DTI5wT7_~EMbeauvzvP*9WX|KLq*}#Aeq$A^ufR z$0t`>bq-wcm)`5|O_b5)4+_FPohg(1Z~-h_n>O}9(MZ+FV2uA7WryRGPx%z953`5x%|8rFM4VW98Z*_^iZy|O5p!ILIY96EeX($b*SEFq?~QxNK8EpgBamJl1}+g!MXjRSj~Vabd0 zi?r86d_9EmHZMs6VI&{%r&1DvUL5Q$!_3Fr^pUX`Z92$URU6h` z&DKc-xHWfAwhCeYkyY55Y}RZ%b@Th+TQFwb2XOs-2wRMVHa)zEq%OnrmrEN`*DjIo^Pl4s<$4)0dyOL}nM^ z!KwoMe7x7s&ktJgpajpS&%-yfii)gs6PrME#VxBZmAw2NopP*6FkaZ z8WZ@s5IA4q&&cMnJ|i;&-(zg}+!^1m$)906dNlsr zf<6a!VJ9vr`rV}))Db9s(mX5Q@<8TcM@5MyPl;GNV-Ba>kcTQF`3 zgXo3QqEpOK?s$edDq*l5RP;{m$PZwi^1bAJrg`#eyTAP@WW|u@Qc33>pexFI3b4l+ zc2C@OYep-dLv0CNV3Q(elxFZ@?w0W&bA;nwh-!E#?gi?Xqk6dqe~MtA`7yMy9;WRCRsOC$dITV@}u(&+XKq88e;5n2|Z3ehTB7(&XHpiaz$;de2N;T z5NB!(nij;<6@2)WjSI28P)Qk-6PTXn%gB0h>f;SYeITltYYx@vR3#;`Qq_U^6LNAc z;nMk8JL}GGq6Z1bm@gT_U=#Wz0P({SN4t5HAZ7R&DRejZP-XT5%>ulVBUI8NZyi$8F(E}nQuIU;2Si|ZtaGgLF}jMY$Ru;g*7V#^LyaBnnRmm z>U`T5-n=&6=79b{V$@xMYb0A(mnv_TX0H!d3rJl;a!J(!i}AcA=W0C9e_McNYj(wj z9Xn*}40Fg4D9`nd6zjiMB1Jkw9kT^x4q^n?(?7YDbFKQgn0x-Jm36T>etzzD1qO0jw#vz+uELI z-q*;ht-N&j>zlNxQyUl8rg*!jD!=VT`|VEc3V5#f@j`Nly5icln0A%b1*}`zGkhof zJ$ed&-`FSc_t+oZ6*&j~cR3pEzTo=c(U1;NqbaVbsB1(^#@3HD6TYWf0-U>A8*z?` zGdnqyq?)l(;+(Tk8cN8~aLekLQWni!s0EIrV+wWG((CsctE1{`=KFKMH~$i0-yi>5 zH!tgB`;40~{>;G6x9=Y(GK3qQUusg%lt;Ey-uf^`%Fze;yj-O!4Xi z;*YDB=Q=dP&r<%hgF*h--gtH9;z%*`V*ulvioc;8A}?k9K))gHzoZ(1zy|bJ+R1P| z`0q&O7V}##%eRWYCA?M1zsz|52Q*@2*rhgLs*A^gl=P=T9-YyvTyZHFH?cE_l|5Av z(s;us4A?Yd4Y)VZfhjAR2K)<*k**uhaN z#=>)js2V?yX1?j*n=^ivi>fy}nq{xeFzXyuJbsot#-@Z%5JZWx1X{a36EWa~7yVFa z-Q>8=>OJ{0(unYRE^hn#nRC88Op!;gL(c>EBU|ek&LVq;XRwHZ-WK$epar@T8HMU>>@#Okbpbe9jp^J9 zpSBnD=b8&BKOfH_JmBb7^!$v%bCSgWzK&4pM#@(_#}wp>Y9;7K%M&d7n=rl5MUY#n zFtQ}U);!85DfJYsL#d~7wJpIFVM8m-utYs;Sc|^Ie9SddJsio~%GN&fhB-%Z>G4;y1V1~ zZ`Sjgfu)S6y0hvN@UI6}@_Va0Yq{_|hoAGhV1Be@I-<=Hm~HCkc8EV0+pQ6I)qK}@ zk7G}Uwn1+hoJaPc5PuS_b%dSBdyw~#Uzs}_gb|z@h9>SP=;H6<{g`vaAd%SNORl6* zI_AHwqyaZ1X3`!~)>Rd*#BmzWN!DRaavdIc*>eVT<1^9S0cTiit|IUhb49vPugdnQ zoE5T}F)Q?3JQ*OXxgC1XJnAcl=PYYDS3M|N;W;c)*ICx7Bx}Ilgt)*fnsa*Pik^lV zRJ+o_)~IUT$yK@)xM`Kb>)-XNTG4g{U%^UUL39H%(Wm{&bW0pWH*gRgw-ePe-;d@J zr%r~J^{Q-qY1&$F3|bhwpwiTG z$KC~u!z7Yu5OdiO(Znd(6gce)~lt@>ckO?6gLi!+JB&Zr^U>#BOE2Np3%7V{g{zqmr;U zvar*9v(*FakPq(1fH~rMSNg=}kg_auO-KV<6PQuR7HYNWZ%8K8-`FFmYwcWe99!&h zw9tORTD7=jzX5YV*ArM=@_O^_akLmI6ts;SGu+h4r6Bgkx57^CU`oK=xMb|j9oS3J znwN9XQu|KSRn$0X&v0P(xop~74!%lJ4#+zwZsNolZ{zF*iW`=M)ACKqd4*lXtH`VO z8fhwMCqJ55*m+*9npw;%@AS8vS9`~&dF7fNIj^Xlz2&^tvF3FleDvfKRsP;x?$aE1 z=wvSE(=S&lL67ZnKg1eF?(K&pJh1O@pOZQpkyYiP=94pP46;@UW`WcgH`VcF*?6{S zD}%cw$FfOdD2Zi^T%#@R-z^PT137$@pvzO;N2{_1y%QQ}nTS&yw(;3^DqGa=vj$>} zdUhRK1KBom%DEyb5dql3uoM{Hy!%MOGVXT4ePaiBzZV5l2o~tOUXkN*=`%Rdw*W9JEtol|l)_%+fLUg)6vtWO zfrlj9wSaTVrkamAs+j2ccwPzp&E=lDoMA8Rsa>ARyb{`)OWf`F97y&Qt&k@J*T6q% zf6<-_c%svjRzhWnI<2u)#%l#w2->|tt`$e5lQ8D`j2(-d!D)Cu%J`4D9V#wk7r^-EG-+Vo#OW zB{yhymDrnV?+15RCw6Ns5bYCKwk7taU2WNRVz=T05byZtt!(_A2L!YDj7% zw@J1o_GaB}*>+;LBH29iyt@LsMzW2rGMFQl041mPTU3;s<$`4!?;zRkO!Lapq5j5x zm&y|Ag*kYcSJ4`lf&%ej38zREk0Bd0nfzSVIFJSaJmzPIJ5X|E2lE1d%P?!@x>wm*_yj!O zew<(Zlr_(1gZb5o==_jKd!&lr_w#ZSG*tiumMqk^_^E1!tOO>t<6 zdy95Hh}-6gs`Zj||6t*URP?bi+Z<8+n_({W_T&6?U}mXE<=Mw9d$QfsPY8Tvsd$)Y zSvPmNe`Bd=X+8fyOU10Y%w+f?NGj;uNzyev@F<=`#^7-!sQ^6B_&F&RILoSfSm|e_ zvz9zrqdlc!+Q!UzsjQ0Heg?zY&$cjJh~9UQa_ zoao2v%|Kr}?UBGN+&Ey2tbjcDA|&P*Rp?*8)4wv&Fxe=?57`;1IxJ7SmW#Y{dQaw2 zviY>@GV|ge;sv~H|MK(u&8IzOn0I_i2K=-9d?4Th41d*vFXZQofxjigKW{yc;OF^( z@5S(lIS_vB4|*Q>#;oZnqCK0t><~T20;nVpyn-AbgZ6CE-NN%#;0bUz4|7BHsa~oF zhc$2ppWlR!x*WPVSp6YwUnd1-IQB@TLwXnohS37HY$W$6#2w?|j(&gWz>BgXG?GCt zSZB|81STE#sBkyMhE;H@wB}RYL>tOWztA97f9TSWxR$JrdFEgL`5ik%-Ak8#yYv1< z)7@>>UH#~^8PMHr_8&Olf62_5H)+hB5RVe+w|yJM=#QenHt3Jm`Cn+b>$upyDEwqm zG`Bqc|B`+Y_y+vPd?TLURR(+68YGQG)U!LExF1o9c^+|7Uq~bkp)Vx*bcZ<`L~y@W zZVE{)A@%jYo2Ls4T`&3X{9S+CKS_Ulzdq(q6DFt#yh*VvRAhy|pY-Sdt@oF2s4uu| zUfjN2|I*C4EZ#7ii#PU*SART>x4(z83{}O)YBNh1eaJ*ARxn+5L0ehL7s#Rrj^7C0 z$nADWC|XdWuPr*QmN{vZ<13_s-7~47Ep?(qV_4i8eg|$1fA2j}`}Nn0-5l=jvVYH> z{a;#_hYRXMhFne!^xx&6U)_go2aKGo451&3g}UsP%``5SrIxWFV_+%8C0GBuF<3W^ z>tcv`@%(v_a_CU#ZR73(`&X~t@BhWVah$a*=AbNc*TN#{rH-K}LA0ZQ&Y>7y$$fPG z^f>seoixI%FKBc@CNp!S zjCt{m2h3BV?#XvVUGvnMaI>G-x!*P0pQL|tV;NCs#ns_$w=`!6mqKoN43S=ThS92y z4(C-3P2}kIYPjW7A1kENCyfaHOl*`4WFjG^AoAyFVzIdiEn2=eH;Kg)hu~m0NJQhm zLFQwl^;P~mgbB8;+OJPC!^A)S$BF9lkXgjIi&3o@8gi@2EvPPABGvL~kZS%csdgbJ z2voa>wYWt%|1MG1eD~-P^Bqw(fAS5HWxOaF`)7)iWJNn0{(?Dpa8#?ne!%httL~PZ$ zXd(2bvnNHas4wi8w(WyZe(i}Em9r;BE?Jby?&O?#ntfIKBmJLgu%p zg%=Vj1$c?+GFr^X_uzq-`@z5$2Wx7l3zm<9w>^IF6KBekX$w%($CnQL@S_mCyPIgD z;BDF?&cT*o{9gipWyasx!hbo4-}arrPa{wH=1(vSdNY1_JqW*kJ&2zrn&|hOD=N+S z&CdYe+Ji`&9UI>AdJunbR%ZGi3G&B2BjY4)ovj7vZ^!iGl+5sm zq$>ROSup8b5na;-nSvyu#{=Qdvfwj<_-+0ts%rGW5YYb-(_=(q9P@a7W8W;4!jJvo+61-tz_crB3s zm2y!!Ck~&r+l16Tk#nmtCLS1Kk{jW;LkFAb?f;AhHs0rC`E##6;J+#%@%%d z5T0urV5^f}=tX8cS@l+LQ}l&!{5^8m$8oO(ypMBYRo?F|Pc4359_Wy(hb(4#-#UIy zYw$m1p;6p&u#f!lI3-~23&hiqMXY7iE+~)hLh~JGHy+^s3eiRC#(rJ110MFTG=~{jH-1D);cRXjWUT^F9c{wg~rL#K?PIa}| zYdDek!0>%6K0Lzk(lbTTM_vzlmiu3Eo01QEJ-}zzSjso}=04A7ePm=XPx5dcm-@}> zOT#x0we(y8PUMg=%+|maOHZoP9P#0ImJh5Go|l)Ip3&xG&fY2TZVut+?IAbL{vo^E zU$ERXF&8@ffqz+o zpLYTN_ZWV-_1>}c+>D36W`^eztow#o;y!VQ{}tj`;5;M&9!6BIL2`g+cfe(y2mC)6 z>%X294Ha$JEb!c{Xnuj`zXN`cr-GI)zP6snnV;b~_5*R6;Kf(g^LT;}+=kkXW$&K6$)_4pVt#sr*@H zzvDC27UFwoDtu2?gquE7O@ak~Cx8B$KhFfcR5|6P8Zqm8s`2s)_z2`@&nEtSQGMph zC@)n&;d`!5Lj8`Hs*|k0Z_M!L_;VG!pQ?1cRC909-;+Oo#NWH{{ZRgVn!jI;9i)Uh zYG5v@hJ!~-l^rx%SUy}6&UItkxUvIzQM_Vff|VV-Yf&YM%8BGkBOU>EU%aOnM*_E? zNUMU3x;aewCH_0m;x6E~f^+;Q}TRtk8*EQz{sGgZ5w$nh$FPZDmFB z=>OBKZ(~|8VmS*TQb4rLvg->l!+#)zJ3H^TNN!FI>qRlsCoLVqSb^n@H7%_a8C#*duGVy0Tlg$*Qwv z@7Bi#t*D;%;P8dJlFX{&V)E`q*=;(vTj@IL2B*frqu0w#_d-qO{2k(tT@+6r*rHa< zVnt48y>M4)3}r6*(k2*3(2;mwz3`lHeb~O7@Lu7#i_LirPiemR7AgFWTZ(az!toS? zQvWsd^uht3?%v^>cT&#dO675M=Z<@&nJO;a$brzIt3)l50_0wgG$O3rYlPc~O7=IC z1m2qD=m-~azt|;^pv!SlpHb08_l|))ua|j_8<3-ro9)JJmT9RjzSjeHllBgKW21TT zg|~H)bor8qiZw5Wo&DOEKW}QjN32?RI@zov&Quqb&bJaC(d5!wN6e#L_O2f|q9pBA z-mK!e=-vVS1524ap{{Vwi{$mjHK4TKkY_g8t}eG%n>rD(CLmayGy!1ya3!I`_uK~S z@o`>X*j-3N1%CG|!>nVEp|^@ldL%uUw}g?^rQb=<(d%Ub!}ASRq?z;r`JDPh08cYm zpN`r~Sf9Pw`b@_A>`FY~$wl8lf-nBOKz9e9bA25=xPYI8NG9O%7tqk73REeeawRqkH*>-2vVhTI zhXgg71#Eo4k1H>7JHM1 zTfn{ixwoeNTcPb2EyN3YSN)X!i>rdGlk0BRCfD1pix^KO?3NpFXVX2N*Sxj7k9uE2 z@1DKB*L@%P{w$SLs(Go6rF)fL9TpWfKJ2-$-@-G)*M(mQzgDJRnSwG;mH8neBVs|s ziL#kxmzTXBnI1Vla!us-Q4OQUMy-u{E$Z`VEjlB*P4tlHGv%6;TUqXhm;o`{W7A_N z$8L@NvwWlSy~@85=ZhN<_ey-__+jzK5~33ZCoE6+JTWbCLgMYOSL3Ie z3u+p*;%ePf>!;eiYHzFKtJ9>;`Z^!hxmwp(w_)ABbyw8gSNB?Gz0C2Mi!#?|ZqNLz zUUVMjxRD<>njx?;)@VKD)_WJBUoAhY1p~*i@TQr^5^tWc6n(b+x-n^js&nyEOwr|mXO#7EQWOP{H;cUmM z9jA1BvE$WFH9Gb0^i}7i&LcXn>-=?>7G2hN`KfE)t|zelU%oAhIjro4eUt>FreSGY>aoxwg zF+O?xwDEJtFB|{&gx(W|O_(^LV8Vh4-{p1A+nD!a-bZ;C^M0Dxd}86Gv`J4)_Dr5U z`P7uwQ+7oq6|} z*}I$k)8w*OAAj|YR~Nqe*{eII%$u@i%C0FVrsPg-IrZmhL#O3WE1mx1j2maHnEBF7 z`)fm9`{DJ-*LS?p>bpRN1s{EE9)Ok1&I#if|8F>l5kTG@1EtCg>>EL$~o)v?b*K7aS~+%LL* z@!{&mt8ZUDYxVIpx2zenCVB0>Yd>8Vwr=~E1HLT$>e;UfzHasPhhLYjk66F@8_PG5 z-%R~x=eI9^YyYn6ck{kGvLR%{&<$%glz;#B_j|t2+IYvtFE(avx^2@Nn||NiV)Nw9 zhc{<#_HEI&G}?0Kmgp@*xBU1+_z&ZLi2E_($A^FX^2f`uJ!8L$J+d`w>(H&~+q!Oh zZrf|ymTdcC+m>x{+fHuF+xGiU^?r)@>Gq%6{?zfO9zQ+&)0Ut0pWFYu{AcGceSV4m zHT2gRzn=ZA*KcvZ9o*h$`v=?q+|hr>ft{UpF6F&^XX&mXyMEdA=kD>l-`xHF?)AHW z-JQ7m)b66)zwZgz(_&B5p1ylV?U}LX{XHx9Y}%8!=jC6M>-toedMVlQ;sY?^7)Y;j_f^h_Gss$>yPd_ntHV0sClf;vB+axjtx5Y z+_725J~_7O*q&qQ$BK@J9B+TT$MNCECmmmK{PW}A9^Y~N!10sE-N((Ou%sqQ_ayaA z8kO`?(!8XVNt=@PCZ#5wPpUXk_eA80HYa+Wc=E)nC(fNHPS%reOujw2Q}Tf1ammw@ zbCb(bYNgmx?n&vHG9qPi%A%AtDc`5;OgWj7oASrWS|=k;-hHyq$ss4lpPYX3y_0KC zZatZJGVNsk$t$Trso|-2rFKp2llnyJ^Qp5^KT2JnCem(7Ym?SFZD87%v?*z`(w3%u zmiATJ4{1Bo4yI+M<)wMj%G0i<8|ih^8>Ziqep`C$^n25z(tD-%PamE>K7B^|;`CMN zvFQiWlhRM6XQk(#8ggpnsTWSYd20Eo^`~M_9kO?_N89_^huWXAPqfdszi0o%{)K(L zeV2Wo{g^$?e$IZuUSuz`UpcLxu5&u_bj#ECoSt)f@#$r!KR>sHnJH(MoLPJ3yE8wY*>xuMOvahgv-;W4vrW$4bN1o0qt4DaJL~Mi zvun=&dN%RwiL)7Joo6qet<11ygk&_zXp_+^qkqP@jMp<3WGu^w$yk^1TSijG*$hX9 zC*zNE#<{R_P0rnOuJ5^F=SH1->D-KSv(7C%xBT4dbKjr)`P{*Cr_WtD=gqWcMr5|k zyf3qN=3|-9WWJC&J#$g!%FL~qhck0Bf6ofdx;?8~)?-*?q z4RV_1bj<0SGdgEx&WAbQ=EUWk$|-gjj;4+-jzNy+9J3ssIyO7@IWinR$JN~6+=jWf z+G#Pvqw3Ubzr-p}~cw7g}9-;KINQ&t8~$VdaHyE^NK9=faT- zr!F`y6kqr=Pv(uu+nX=*yXUWSYR*TUYn_)}LtIa~UU9wVn&VpRTIPyzt#fT~#k#h; zj=C~kW$xPUNOxEF5ciAjdG1y2ZSJG)T=(UI`UNcuIu<-w@Myu41R0qc(YT^XMQ;`@D*CwS^P;bdHWmF;w5w=e(XpbmqH{$Tii(QLimrHc zPpGG{r-diV)63J}Gu$)UGt={d=QGb5&$pf*JO?~Uo>QJIPrj$vQ{lN*Y$;wEfC`)(oknAU-wPZd^6?f|EL=$7A=pxHSbG@;6MH?z+Y1hm$&L0K71ATzH zz7u!>j0X<@_4(u4gW_%NX3@o{FFG2Zh{Z;vcul_|+63Jt`dP+`APc`$Wr-4xTRMn& z#vCw~7w$Ql{&o@d^x2}dzFbJ{8*wkcB+$#4D<&DO#e>E?FjVx_ z&Wl@(kErhr@jSm$KT&IFerfa(lh~hSE#}-e>ElAqRo5*L4{AlwTSaH>XHi>SW7HA# zEDmuC{k_pJgbsZ~TQAzN+O`E6X=%szlpYjwj8$Tsu~&?t6b@N(?iWiD+X! z`%A^EmOA1=OQNtbtFqA84u5BeTeT@7!m^Hb&lfKT#f#BFoy1VBftYUjkb7S+vn*eT zLB_YDyX7Y_&2YfG9_AJ!N<6CnF5cAli^u%!f1kcL6*IJrVy5=IXr`YP)Ahchi}nt4 zRO0F!A+9|R9Rp=Vc!inJYeCvJkztGz&#L|z)5UztS<%okR}8VV6=B8_^!0l&AKKS? zr+C*(A7IF^+Z$aV)3xGKIbeGOM*6uIl-;O9BWH)v-MA8Ad&mM zqFc~=wD+KyXMBJx7KwTKlVTFrHnW}*cNn*zk4w?BdC1~D(a72Ws*V*Jh^Ce^^f8D1 zSHy7II4P)uc-a!owQD(VCb&yPTW2B5*Tr4N8|HD2yIaqT8?AX^dpVG+tTK|ybdkFDd-!#~AD%Xu-W)&TKoa9!%V1s(>8Tad?-@UXk( zHc?0Myz2PDpykv#6Md%@G`c`Cj1zF!OUJia=+z`}T++n$hKHxVj{m{#kVxIML(ZaGrbhUP;tUY~l zK)>bur;$^!c-cA;ztR%BVCBYmLfnWCinPoYZLGJ6C6=4SaLcRW73}+Y%L=j38e--f zht1uVd#L*(>h6v#S;4hzpbhAem48;W+{Zmu@!8kxV+Y1MY~U*~#5f^Z=$klq75Di< z+=z_%U0pHFnl7HS4#56y0?=sTyMq> zyNMUAbGi5HqLJQIJY_T#BA7MhYO3wPuQ8D?pQda!`*2Zy6$lgJr0~D+8?PuZ?+{~c zA|~n|2`RJ1^U}_LiCz^C%FW^-Jz7lGdyBq$7i{2B{Pmakk{q!J-?+e1Bo;6eG$Ck< zctV>cUe;a|gQz0{Uvr;6Ts(mvdzN2VZ(((a_k(|cAJf^th}>3)5teJBh0$5uX(S+< z>7p0?>R`zczaBn2Ond@A$DogWttZ73)*Slz3D>?W)>{nPGDUohuk92( zN{rM7n%^+jH-XO=qx&6IJi*5{)t(efiDggHr+Y13@!{u1L&GI*4VoB$rM0-#dO~zo z3<++H{oW^@)-K~mFN;OsA>&Tb7YqdLjXV5Q?RNlogU;YnFwkgEoEu=8#(1IAx2Edb zbH<1G)4{@KJS@86E635-9>gt0yBl^f&Ke}f={q?d56#4{hKd=+X^y`V59|A&>bm88 zv;I3_)ems2>QvW4(W6JO?QzC~qA#mUJuL52_et@HWfS*%M|2OGAR>ZB5=XXktj=4& z{=3-zWOVNl(ap%9>;;e}BJdAQ@Im8@??oT$k78WVD9&9WYFqE8>`m~FXm4HbryY$> zlsl;-o^u+3uZ7KOqfLWo+c}|I_i;b!0pqOgiFK)b)}Q;ScGDL_7Y_wfFMPif{@~#@t9y52U+za|6 z*m6DRQh8TRsC=si{P~v3ss0mGo~8Oz1Mp*m;scvKW`%U z(G_2s=nejynY{IXq<$SDx2;JtMQtT_)!+YH>d(nlUaWF*CA+HJT;<0qN3Tg$ zo~rUvf1avx(&^^MekdP{?f*yM4|V)VO=zKJjPke8_rbf$R{TCn`Kg*vKD;KBkFR+z z>c&6*h3UlOf80wQE1&*1;ODvTGO!KA(v}urnu-JdctBiGv7s9N_Ng}hvz;?2tA>gf zHKF)YjhcO^vG0#ns!s|khE>6DH*+e#v3ytgz4ln;M$0Pm1gKhb~s&8qQo^|<*z(Q4iLFLWLHtL#pV1FQJ2Y)0vC^%%zQ zr=@wy0`Q~x`jh5COElxar_2r2`sB9@rTfZO$C_nooIw8a_qm--=tsPmYHUI;q1R(! zbzJhx$aKT&D0uF`pA>2BE6-N(R9c!41B=Y3h#8|8hhDQpR4$-wp0YnRjwA1S@H(xE zr`55snpVZeiP!C^`raxpVNS?jS0L7ny&l`DVwZ|lYJN!hoN8Ka!__g!a=h{;{C<{k zQ{^Q~gG!&)ud>uQYCdKxsoZItGspU40=b*t*DD|D_wVHMlQ6{QP?TDu-3^g#6uKuNp6?c%^cDRkw;os{Zl#ES2Z0&s7=s z@aN+y?^pT08Z#7$8UCD6UC(`0EU1P$zuE?`+X!(_-J85j{illvdbzSL4`(mE+^+Jz zT8mUk%@?Ce-S|%1&1$x=tU`W5HVshyB=a_$st|bP@Q~#oVN*}q*;L6x0|!2&_RMQm z^^+*i2CdRKlxx*z2ET^LflcTfNa_x&RmY$*P17xwAgk1M!=mXr2h}fKW6ub-^0HX0 zR^4K?_zzTpl|75jcLI#S1#C6Vq6MpKb>5aBwWH}=#buh+2r^WeVc`x|gAWXgH7Ljk z=0mIhBCD0V=~hdvV9g4la*JVD3|ho3RQt)tDdSJ3_$(-h76o4Z`qgew5Vz!m+O;_+ zsFrFYN407N(Nc8>BXA$pE_GtCRc$#4=EGV+{E8R73knXZT}w4sy=w*4qRbk&x7t&6 zSZZ@34d8c6Ygudg_o+!WDu@#TAF0dy=URhRt#rv>5$&-WmRgoty5f{3B@g^rgA4>f z1_yWOoK}nO!kVDq+CjmpbzEc6m7ri+$xXPHnmJY1xMOgzHCWW*l0c#V6E><-ffqbC z;3{>i`W5wegX^d{a2lPi=7hQfg|H*=Q7tPqtCwn#y1VKXVm5>#G&%68?q{?rqEHLs zFKVy9XeM2)@iNc@#a{G+>eQ9~mpVgLR(%YuaS^=wdo8LZHQqJO{i_rW3%uzL>O`wF z80=Rpj;hW>I|I7*ACCP>QB}R4X@9kf?)xS8SIPA~^^sz?vIt(tp!)dwDb+jGGVrrP z@kBAD%EnZyX|igppD4y5=_-a*pH?`QsdslQr_UlXj#q}01w>DZ|*@K>su8YrkL_V+2E zJ$?=1beih7m4F$*dac?9G^O}T1iaV_uv;DYFR1bus-wJ^(ZER>s9h=qBrncg?Gqyawz}4`<$F5 zXUh-ea`~ldp0~`g{6v{YyPo-=QDTPw1(- z-DtrxxxI~n##m#L@w&0lSZjQ5Y&CWoCydjE!>F)GOPHlWgp7!eSP)SfQ5NxM(*d?x zwmP;OY&Y5>Y>~D*Z0&3vY+Y?pwqCYrw%NAzwvD#Uwyn0Ewmr=(%^Eao)GV^u?akUY z8yTrZS|dXv>qj<@jNrMUzLBFNC$u=~)h_M3VpOW{bMTBGcQt$2^C%Ro|%} z)lbrEVcgCy)Zzk_Dl8rM)u5k$o-w+`px<$;1SQl|IqMTj} zTWwpIt%2<(o6XjOUf*Nua=q7I+rG7JqSrfYyZ_efr>c5=LycaKr`M8ROL~2kUZVy4 z*H)f9V|U;23k^d&h_iU$TDO%)wKRITt~3jx#4e zXHCvWtTNBf{v_x1oB`Pz&u`9Nlf9Z1>5sD)Wxtd?EPL>|;s(Ff{@uDu+b0kC^Suut_=ZW0V`M9Di8-w zfZV{jf8T1Ue?JZ!X^ET<{x>gewl+tbtIgBi(dLV}+MC*k+A{4UZMpWb_KBD$-qAkQ zKGRlcG1^KopV|9W+UMFA+G=f$wpJ`;#(Sf-N!zS#(SFc=6pO_YEmqsAZPR{Y6?3Wf zhIp5?#J8B2y`bf3`I=L6X>Rd>R-hGXMVdz|*1TGY=HnU0Wm>6rQ7hBRwF>Q$_B;Ps zvRwN^`%}BDUD2*;*Tl!-6TPlpPY=^?(Ch0Bw70cc+5&Bz-b!z+x6#|`we>oBh#rb% z{-`hHyMK%H#rhJlRczCj=^yFK#ZTDTC*o)QQ~fjXi@rkqs>g`m^p*N5v0eXM><~Nk zFZ9*=8hx$44nOpj{AUqkdYm4wC+K^{ zd6BIrGH+kVf7*CNF{_(iJgJYYzEoV~KUB)~gQ7w|q#qWS_(Ra&@exk_nAG&+xXvW} zWU`(j4ITlu;yYY=D&OJ?mbHwzx?3-hH_32$vuvyv>P337?!iCZC0oi?#vIw2uMxN9 zi^T1WdB!_ zUanW@m*k^zpd2Iz%OQCCVe&D2^c(VV`Gg$K^SZ*&RDMkSxAFzsCyh6aw~QvnE%GV( zw0uU6#H%flqj>IgshlJy%ej)ZNaJ0(!k8gf^LuK%>g=x4+#WkXsih0tp#yPsP9|gxBbvwhyDQYW&$6AFBjqfRnLYVtioLAA&^Y@LTE|= z+M7_d7G|gXL+EL62FwFz0pBpuK82nK*a*1-?^@g;rJpkIH|13K>fIFVL_6usk7e2ml)tvOd6*YV=Ru9)Nfc zdPe}*sE~MD*^YBEpzQ2&=CQsUzcSZ>xZ5Vh40!S&RGLJ5`dt7?F>L?l%8s30f_IY zmm*!V*#PB0LH#qjUMm2x2^t!J(r>+a07}PobWW!qO2_eqe_;{(K+u03ebUh#bp-BN z`r0a}y4D3C$R>39?}w`U>j1=W(DmROpziZ+0Af2-@kl}4Q}O6~>fZrXJW~Br_gC$v zOzeX0tb(dr9Rsl+ij4F2>mEH0aRN~ zf>g?rq4)^}9(b;v2T)M{jAtc)$acmqNP*pk!u52Ouh--9Zo9gA9!a15kd} z=ox^LrO_(@<#&zV0VvrTeZWBK{{uQG0Nn{49DsfdIwSz8(B)h_MlD;(Q-;GuQ%XtD$V*N6IfkW5HHH z`;2X1C)X;uDcw?-4X|Zn59R%#aUdSN4H7^i^^`;R0puwkg({gH2Z{$u9w#V&9GVPH zbN=tpGXbby6=z;I013^g0xH2X48q6;8pr_->KOse1xoLfyp*1)`rZV8fImSKa2Z_V z{HLImzy$E#LcIzqE?T&s0&7UZ!aXcul#hnq5CH2e!cre#zY;x&;JOIT*SUX0HxSK! z4s;G!z#YQ_+ z47PE9TSNBeLT?N}>5lCtzIjFF0 z4M47e?f^R}UkgRYYax7&-p(<8wa3rnn-x8AZdGKs{qspJ+f~A z@+au%0MzI`ay*#8`M(I!0vRjF-*BxG&lfCRVn#*?PawD^`wf6RWk3l`WgKiPc-% z`o!uj`V1M~e1vVOZRx|~m)iQ+o*y$l)@b3Ud@y0@h`VjEV(9P}*bW=sEVlcICf9c- zj2O|iO{}4+;R?=PI)Vybtf~O&FS`3$n^;ThezsWs_Cdo3509PGt4VD4UL%?`Yi8>m zn=oj2Y(lRl%|?u96KlQRM%w!J3*mv*2DOg0wrmp{9H?RF@YwE6V#SE1OI3YChc|B) zJ7?+ACQIo-^>M=AkGD(l&w}nX3*bQS?Q+f_s)96c)C{!{e}+j zO%t2Z#M-T6BYU@rtZUXSUha_4iTxlCy!_n+nmPQ z7Ht|YCS(wjZ8t!|wl?jB(Jwss+M>bBT0HiN?Cv~6?LW^$OE zzAd^TWuw$)w%Xj?kPil`%_Oz?P;Gux8&hqXHVj-bU0pFEbQXhEEz+ zjus8I&xK8I#xty4S?hgYgt7kA&>Ajo#1GtHO%Ng0Y=MROU-iUSr2A53bpkI?wJ#Y5 zkF46)M6h_VYG3Euo>Qv!jT-wFaXVwgKs{E$G?!-L=Q?{h7P%Y)l~n{1TmE}r|=5~6ZjTETRxv8#)4_!LGUuAHOp+*OCR@N zHeDbp9qhh_w#2eHNHSis(pcbs=iL+eyYv=`D`5bdd1I!@tiZAeRcOK z>`$W(#ls$Odkp6Vj{bg4Yd-%sKD6`8Wg1s@6?gNV>3_GSp1$Xkjfye0D!pRtW$%q+2~^=vmVj@89h-jZm!i)}n_DfaS~VjpkG z?2MYPJ;qzA89BBojIt!7r8Kq~j5MTh@RrQI z+ekKMdyBk7=Ak7P2jqWo#>C z1>38#QZTg8XtP@0V;iIev8|=mVS9si1KUQ-QAn*ZvlCLg6FEq&6~0_*ZL~IQ+i4xx zj?%`leM8G-o6k63>hCkkmio8MVM^vN_ppuEGuWPIW<=^aj6*ZrvMnROmBv*vT*(SlJ$SD4MBv*5{}wCJm<_zY z=e?2lCf=LHX2o-PJ2O*~6!>-YVT;(J@(+#$D^mBMtwygt{fCLh<6fWgvS|F=lnF11 z#xIYV_KIjs4CIAIs=IKnag(P`79lT9nDUAsGxgV?wyG6YEzEx`(P2rw7IB+Ej^Z-M zwKOa$OMWb&QcZfU1U3mXiw7(4==x)C!yazvYuegt2AnPPLi!NB< z{US;{fCWsz;^w09^Tm72jeW#?7jx3goczpe$gj+BY-iSDCnNtf;s^7`jM2|9?)J|Z zGlph~LmVSIE`!EBOr) zev?`98gu*1moL;7X^XWb+EVRZ?LF;%?SqEZka!7X}(Zqp<6+w>Ot9r|6&<+srn24?PA5q#IbI`&~;{$9=A ztGRo9g&w13?e)+7^YvTwAFAiy^`Fq)U-VzqtUIfSJO4h@&MbSHeo8;BpGAj#`bD0} zsAn`_HhZ425X}sHw@nkZd%U5vTxpTK7?ctf9u*!`89ch%py=SJh#qabr3XJ7J%e}s z=+TPyXdC@iU88Plw5NMq_e)Xj9?0m?uwLJ8+oBVqGU|O0vOnZRbWC(ix7_H2=#0>m z?wMg7qn5HA6rIqcZP;fIgm)W6or7)&uivOac!SFgzv!OX@T=&Un-<^vM&p>q+Zu0g z9Cz#XTjOs1Bcg4@cH4uIb(`l#&uG!^_Kc`@cSWiDM=kTWW=6~Utr9r$w%*uga$BwK z_`4s8%DX!=YH7P|?K1EAH9DbV_l~nV?e4NPI-zr)&gq>iyA12HwA-L=xwJa7OKfz) z1L0A5QSG9Z(l7O%;otZ7FHjy8-X%lvA}YMci}#Pee_N07Q6WA0_ZZS+Jm?>IM~NOo z6psS$Xb<(*ct=HaOAovQEe>$6`s@cXx^1iZj>-tU74NFw-7~vqQscI2L`4MNN-9wq z{{;2N{BHi%xY%!tf~%&RkM&)#iYds3FGBCpe>I92KEHtCnju z2Nlo!ZzQj{pz4fT#@SW4eqIf(|F>oTB8QrC3H16ej#qQOns&<#a9wep)_RmyM#n^X z;YfWrbiGfCceFJlI#}5eHmKyO^!B=Rm0c>E^V?;n;z0LHNV4s9jeW67dtW3De1o;C zsA1(TMIB<3CK~WI@b@i=3d+yd!OwSOt*JBb8}aVZ#D?CY4^iP^@dy(x{dwEOK;F&7 zV19!yk}U0UqQ!9DcZes&GenJ1yjzQ4tsca z5eeivUH!RE6r+m+M3X~gIo*gAsoXi8*zgdsp@clMl=oO>GXEfJydtiWzg7||pC_}i zh?it-SzEj!>&bdz5-Wm@#bg;NBgIr!0NaUaDvpSmM3PS84WdaG@g@=Fe(@GDrI&b{ zJZ6}f&8ptxVh*uoxR}fO-AFM{&X)_s0=Y;o5sTy*c}6Ui8SR%#DveZ?vjsl*q=s<*`&;?*Z&t+rBI zCw|es(!LRUSYQ58?A3nOc8f#Aqd1X5OiBpK|o47{QY9T6#T6d6)-KF2fdhFeLXKCm?^@n7LK0qHR8|cII zVX~1vL4QHsq)*f*$y@Z-^w(rlV%)pZ#*-hb%mwokv`XTu!Ps$vZgLqaZO%5Zrosy3e-%iUXh;f;6 zxSp-&$){N_cFM784OosN?)l^d)^o4OXZ1?ml#^MhHRKedj!{?6Fv5&5$@kxkaQQmF zS=2|)G5Q*P<@fwc`V(@aG0GSvxAR2Gbh(37;h8dCt?9}Hl?BQ~W3Dkz?la~a^W_0! zp|MaNG*%d&%R|O$W3@calRN8VlJS-Cl}t9iH8#i;o@m)9(~Ql=4>H||HDcvyo^aVF z&lo=&JLOqpx3OF181Y8DbQp=oL78hDHV#Xdanv{_-8=`AEDOmmQ)LlP#GH{HBg@E= z#fIB(ORrIA6v`5#)F_ocqr#|=rPyv~bH7Lhc5^@fowr~1HuvixAPm$8d(HjEOc2jG z;n-Y5vN!b~3XSB=jO17H?F^f^U5|v`2HpjH8&h8m(kMR#_^n1}Pa842-jEEr5woX_ zn0;?#Oalu+BC`Pd!9nVkqJbGq9v4>W74<<2v%6?(w!`il^8b-owOPbJEftA}0sm?# zhJwey$=#Nz*N!0iRH|5`0eCHtP5p?BaM2pB;uC0mt|(m3r;qce6<9pq|-X zhC>^hZW#fM1YMX7co5nfIvP3#yaX0jdgW5^0r(IUnF+F(Zy955Hm1Mh(O zU;$WVp4UDHUx3wM4Ok1-fiKM>?JMv#SP#Ado4{tU1^fVh1hHnJwiRpxKY^c3xAqJ8 zmHL09p6$>b(4Ej-&^=re5B7q6-~c!T;DdGyB!Ogb5~P7s;55iL+i8D7uYhZ25%%5? zYj23HH`H%53-z18&7cXm6*L9SO}BoJnV`c5{a$b%=m z&{9yw{vUkyC!bx0UV)nYtGfgms0%_s7--0o^^HI{xRv7wv%AsMJa5>b&7hIc=Fr=q zEugnU?||M3y$jkB+6vkl+6LMddN;Hkv_145Xb0%M(EFgBxJMUoKX?E{gC3wK=neXT z0bn2)4A6N4oj0BUBfwMO888Zr0prX%yZ~MT6Tu|#Dt(#?rh}Q-+)CPjJ{n(e z-8!(IbH0b7bF2_GH1=`c0dUMrFj7IGnZRhSvzaZrnt9@W{>|nAet9*OW4oCxZ{~Tp zF3{efNQ4mMLWpM}+DbDEpOTGF$;PK->o)$^G?KF0z&#>F=N$cBa3AOhI)Tn$0C*G( z1n+Y0DzF;trH(Y}I0a6Fvy>H@dHO}ZPcRuw0n@-tGuv1QjfW=ko&WvdAm7D3#8 zMj#wC2Dg9+u+8-Hoe{4w9_;1%0c2%i`0y~YuZGNx)yF@&@sDo&qZ|L|#y7f|=W2jI zbmI@*_(0|V-1t8?KF^KMQ-02kpL65m-1s*){>_blbIbW6j7%m>E&_|e5)p=fa^s)e z_$N31$&G(<<6GSL7B{}djc;+|Tio~-H@?MUp(-|17AGw#RFeF@WlgPJn+Q>Up(-|17AGw z#RFeF@WlgPJn+Q>Up(-|17AGw#RFeF@Wlf!_^}&M3QV+D{RX@SLcpz{6X*i4MtI?Y z7yK77=n44GWq9F%7an-wffpWl;ei((c;R9GW~iA<#LGp};Y6BTB26xlCYMN)OQgxw z{sdRRH8U6QoQqe^#rx*sF>~>jxp=2syi+dTDHrdQi+9S!JLTe?a`8yHc$HkGrRIE5 z-<&TOf~DXC@F8W&4m{X_2Rra!2OjLegB^IV0}poK!45pwfd@PAU`WZy`se(Y+Hd2;6CsU_!z{1 zpTK@>G>z5-gPTATa4TpEnt>kRMOxJx^Z|Xr!(bs;20jAI0d;DhfZZStB!EPa0_cI3 z4(#9$a2Z^s2W`MoumZptoon=B;G^|*Ks^u&9s&KqqhJsi0)~Od!EgX~jimnCXGxfkBE~-wv5$W-#kQu4@9^2ko|$V~Fc zO7e(aX+*CyqE{M`D~&86k1=|f*#{f$Lr;_FVG=z|5{Iy-dS()K-3PnwgI)K*uKUo# zBzl-c50mI&5iQXmAyCiy-M6Z(QQ4+mKqV-9%I*C>%(c&apoJ5P0XmJuP zPNKz0v^a?tC(+_0TAW0SlW1`gElgtUu%CFo1D~FWPtU}sXX4W{#bBP!9|DG&b}HA3 z^MW|W`Nzo@lFW2*!aOHDobLmrpbV6Q3h+DU{{g)Wu7FB&FUu=?i6@!T0u3h`H8vf@ zmP}$xrffx7M-Tvvi*Z91)%rLJ^LHk-vr&y=Lh)wAjgNG@EsrRARcDweA_}l2~s)E01oz@l)Ios z9DCR=1!e4;W+w46)6hV$x!0%->Y8?9XQmMbZD>01>kcCv+`?zKQr-!40r!IkKs4w9 zdV=1dAJ+{41HoW`UJ>!^L_9mOHj`MJNvzEz`q_!MndIYHzX|+8`EOt!=N&*l-y-5=5b-k5b|2dAL)(35yASR5 zq1`2DcP84MiFW(YZXeoRf_D4R?o71WgRO+3(S>NV4~_Pr(I?R85;WR{#`@4sA6l7- zR{GFNA6n=`>wIXP53TbNRWpdH8AR0#qG|?FH3Lobp@}{;(T67b&_o{^SAxcspm8N= zTnQSNiNaMm&WFbN&^R9&=R@OsXjKVXRf1NP zpj9PkRS8;Ef>vdsRX#MT1Z~Phn@Z565;Vz&_W01AOti;`)?}hJnff_1gD9Utl+QqW zd}vN4n!|Jbpp1Q!-@KPV10kRxQfLIi!L1y30$srU-~kW~dVrpwHy8n)0?&XkV4PWk z7L=d`C1^njT2O)(l%NGAXh9}gkck##B7Gl{FG2D?B=1AwnMgd7`OGk8U+aU1kWgRn zFz5#!1D}AEU>8u5Jq$epem7l6(uEXVNYRB9T}aV|6kSNsB^Qdiaw+%#d?@N7K^GEq zAwd@sbRj_(l5!y_7m{)zDHoD*At@J=fl5!y_7m{)zDHoD*At@KqaKU{S+;_ow z7hHD1VHX^B!Ce>Jb-`U1+;zcG7aVoLQ5PI_!BH0+b-_^=9Cg7_7aVoLQ5PI_!BH2S za=|4RTyl|N9z~an853RNUnnaXy>%rspNO7IN)p%}B}>jHT)_ zmZ~e$L_KK-XBa7;C09L1i?e7snXfD|^Ek= zJ)_1BW<0X{uVXXjPly49#DGF#Kp`=Jxgt@AZ$s2UuK%lX8$P~Jy8^DMxgJr6xt@6D zdg7VuiP!G~9YH718FXPh+!OQyy+I%F5a`b@L=NEdN5Mcah_b<82p9^U1W$pd!82eY zcm+%XQ_Tu}8ki1dfY+EEm`i>0fErUWhoOH!O=(*6{0~pMf!F8T&QIopqTPQDe_AXhWV{Y6QZ;|IJvmAJ+^31HoW`o)Iq! zi5G?F^k3uDQ5>tW>Z{Z{6-)cm>F**GnbIUuezkNe;(=ph3uD7 zUJfdl;rJ7JnUROGf?TpA_$fvLFTgJ3z33IPk(BATgF8V>a1>nPS_2&6T%LSlbTtxq z$@uOCy#U8tb&;zsa@9qyy2w=*x#}WUU1X)_NweI4_4b5^qb2*;598X$~CoRX5mg70g@tozf zq>L3Ht9g`oc~o>JNAF6;7DY=`u1-cz3rmQVPFm*_seEn++)13L=MJK+lk>ftbICk{ zZ#gMznfc5Rr4t{W(q>*Dw^zL>Va6yGzq6k_za0LQFng3LA0o4R7{CGeRU*f7-8ig$ zJl^+Zb38uk2(k1ivGgdh^eD0PD6#aYrp5t3GkW=jQA!B;d>E(?)OesdWok^I#sh(| zK)J5Q0^d^p3zFN*d5Li72**c>fsBfDH9p9Io->aU_l^?xjxt-74mX|tF+&-&!q3$b z#th}iu*7J9^cyn5xe?k3dJ{ApdNWyw8Y8^Qz8WV?g{rZ_bm&aR8?W=Z8aKqVpJ=8d z2`95&=}5!LQ&v{|aUIavT#Y0SAqgLn*hHS5N}irdj-E>H%}O4hr<)Z>V>Qz7i7fWd zw2YWYYlU-oAva}d%R%4ht-82NW9`L`Oy`H}mm61QvrOtOu+#H<6R4k}s!{FQ<|(r;;zHBH7hQb~Tb+jbt|=)lEos z6H?v82+xO9H<2f&BGp2qx*DnS{YQ=uf#cvLILkTbm`l$D*}y@W3ly4%knAR;>O-PF z^50bQ-&CYph(rsKW+9TyC+|%~nwya1CZxCt39d$h`Q)RiNO2Q6X)5_=D*0zB5?zf% z4qZ!BT40tN|0tU(p-Zy6Od*y(o9C0 z%10MgumG?kB4Hmdw=2~tf)s>w*zgH%08)#JC% zTPT~%?+#4?)4)t~jo&WcqI@C8G0n)n4=WS{#Y z2?vsJAc;665r-t=@RTKR-GOH;f$MQ_+yTcOc*YX!#{tJ3c*hbvV+ovgz-b2_v4r@d zIO~A34m@B9-me7DSAwlL@OmY9yb@zNm}$mgCl0vjfSV4u>42MYc)Sw4T?tPncgE*+ zB|{C^h6~Qx;jEg8uwxsgaMTV*op97yWgA{>!wq+xaMzA)l)_;<9Ja$@I~=ydVLKd7 zfx~t=bdog3Fn>IfD0RNVFNB~ zz*S`fE~H_{2E0haS!Dxigm1?NN|A^iiP*6L7t*jJ4Lf@8LhoHwdS6L9ZA`dlpRSq(R&wq@8SvD7L2g& zfb*?D2XG(gY~~=n9K2e#c!%SUK@8Z&xj#XFhNkj4>l!?D5{49WctWuuPbY>|dAJ-= z%=*hkj{h`sc)~o4`A;{`n}o@mpf^+21WFz$n}TMb3uQf^y`d_5=nGXD#3RrF&_P@~ z7!1cg#$q$$&GYhEj$h=OmpOg~Z#IeJ$*k9~7NYe5eE|~IW>Yo?%mwqnJAic_jddPv zA)hY;AA#k7zB141M%vlhuYA58>;$_hivtND5u^atU$t~#2Y-Oe;3~Ovh?#>%}^sYlWc+IeIZ=K5&t; zKPbD*uann7y7fRPP?}s(QnaJopIdfeU*(j&p(-0ux#U=+JRStH z4 zYvp4b%5&vo8*bu79<~vJZG_5apkujiJb0GBq1Ztvb`Xjk zgklGwaM6jrhobMH=zHityqe0qo#<~UTy>(mp>Wozf6f?mHI#8R`WqVXZj_y+ESKX# z=taPo4809SZ$k~8@mT}LayNpTfXc;q?gZTpMR!Bd-B5Hl6x|I)cSF(LP;@sG-3>)| zL($z(bT*qRV{ig=F%jc=Dxq@}+q4 zrFinCc(}O*4z5Kf*P@ea(a9}va0}eq0_V2CwJlXS(OS5*h1@5e+$WygCmyaHfoogP z$C|l~lOAuO$6M&}7J9sv9y{sn7J9lCy*xrskMMn$&dkwAF;;kh)r(a2)7iH}&-zzo z^0BmhdR!nblEWLI1A5ej(OgexZ|EQ><8`bpA1lkJmw8xOzMRb52P-1<>H@vGK(8*) zt2}z8R%q1fOdgh&PtWq`Spm9m0ZYrLcWQMe4=c;Z%JS(|0ajLkl@-vVJbIKzkMiiz z1$vW5Z!YlEeP>!5$r%T9lREAkXo>M}eQ$n7jGRhJ% z$rAFG67m)wc}od-i^?EN$XQCr&wb?PYQ$Ay)CRYJw?GUaVSCC&< z(2H_fUQUbE+I0o3te_QYO!;qX*cIfz738=T%v=!vC738uNSW(S2>(>3tg3$ML+>|(riG5q$zZ!i4z!f!9VEQZ%!cUIw?^J1vH- zJ#}paYHj5pRIRV5wH39FQoV*!bN!?)GX`o6B@B8i^nY4A>Bo5kz(6nawYH+xOxCeqy=KCbjLd=-F$-G63}_MG5VA6Z$*<80R%VcL0_!IUte+(Ce0n|R z{u9(wFi1L~#@v5`Sjq7&pyvJ=p&IN$Av=X9I*i9XEq-UVK?jC;TB@gL)EWR! zsh|xB(#9NrB=kWrn9oN;$AEF1GXcEB{$$GMvj(sLECP$c67c_eZGh}gV?K#zPJJ2~ zpoSEA=G3RH179*f^%eLUtOwtKe|r+BdfnhRuGs;w2DCB(txVANf_>lsI0WF6#xsMg z4JEKPl)&0hf|dqOfzzPoQ$_#(tsx|!;ki|72)R6S>O<2L(DYn1J)vqHAwmCZ9iblU z2=!P;sHb1>TR}qAT0#PAT?x8cOZb!WE5PI#N(nTeo}dbWs;8*_zNV01G)1GEf##qE zxC7h;T7fp;ZqObukI6Hn%AyjCF5rIf0Eh-XKu^#c{C7`jjo|aAz%xKSu{8!-a}5IB z!NL--uv{!Gf%Ue8|MfaVs6U>l(J(QR*x@5y`1q!2Bmc;_D|uyKjvry&S&eWfvd<_M z|L()L`}hXQLwNMQ;9<}Y5JB+HUToEit$MLhFE*;8mKsllaF+|%sESe-h)&zN+Xd{^ z%iTh-Q7`tXqSH=nR7Iu>-1#hb4#8Hv*s2#BRgvietq8$Ryx55sJMm&CUhKq+{(I4X zFZ%CA|GntH7yb95|6cUpi~f7je=qv)MgP6%zZd=Y;zhmalox&S;yJx|PA{I*i@tc# z5idI8MMu2ohl*|&@S0v^>_x_2Wb8%8US#Y=#$IIXMaEt{qZc`Pk)szGs%Urtxp|S9 z7nynet1$^=8hA8t$(#dMyng=IGS881;IZI)SCen-((6Y6|J@}gkc~{_KMH=vYJWkS zn}cta6#$+HCfh*UK^a=n5Hteefag}pG7`u#638+VXpNUlBY{jKK{T&g7xK}Xa$3Xq zkBmrVcI1V$2>I|dTx0I6vNe^R4d!^H(gvPrtGQP6*ZPoJ+5hMIP#_EYAJ&Kb8G@Y* z!A_Q?o(r{;A=t?f>|_Xb{T#>y*+hUF$wqT%XAaz(0rwJVYZ|%QSvYr&w&uXS2-=$i z2NV5S&Pevh(e4T4ZxhYO$rf|S4s*y3bKp=STuCGXT{6d0n_8(jd%ZSQQ(smZRIXH` z2Chows#H;nt6t=agMYi?A7}gfcACBsWxxWk2rLFm%+vJkG<`cw-%hha_7G3R_5}}v zeqg9M8T*P6PnhB2DPrI!?5_m7z+rF%{BFizPcg*4$=Fj2_7sCH#b7@%*iQ`h6C?MU z;n+?LwiAQx#9%uy*iH;FW-?jMWU`#eWI2<`awcO>G1yZK_7sCX#b8e{*i#Jl6oWm* zU{5jFQw;VLgFVGyPchh24Dn>Lb_HBBC+ik7Tn_@ZKpjvItTAKo>66J?CS!Lo`0~lv zUJSMuqbKpX6Y2q_z%*m9zZmQ<1|K~c8;rq6PsRpgu)!E?FvhqaJOH9W56~0z2K_j1 z02l}c19(X0GMUU}GWHpRea2v)G5FcZ*k}y)8G~P)jE%-%qcKJtylx=z6!H`qs+}>* z88oLH{J~SJVW2)9q#@aTe>}x&&^ctUbJ?GVeWif&zyVk%FjQWyYRjj#Qfe!rwgPG^ zptb^PE1~Go9y+ig_yK27&gIJ-I{@HJzYsXYta7jKD9Uk6pnd zSW|!OZUAdL!YANb~XeNjZ+#mr@t zV5irZ1(n!N5Y~4KbKY&uEZL6ijM-e-9Xvuk19)a>l(|Q~z_~BeHuY4v8XqLES8P7d zb!zP3H1|=iR-V#n;R$9wT>qH)SV!wl@*Ty;%~|3pRw^e}mWsD3`IouMO=6)rQYbnGwu-5vxc}5I}s_zg?gwt;^D>Tc$Y0!!Sn6t#tt|d(3ivLNCTvB06rXr2PyPzE>f64-xkofXOUwTeY+^f zvOYJSwey$F@9EQFX=g1j9~}+m%0QM;3mdQzN4i4CK_`HT=#WlNz1;u*w0GWdR#n#? z-|Y@F!@v|k2Ba57L_oj_7En>C3W6eFR0JCxj4_soM)YG|VhMRcOd>{+DGVy2fQX8M zbi^)-QUxh0AR&S}=Y7{c_uK+Ag1-Fs-aenR@4CB}wb$8a?|pu22XS^ISHqJ;bBVW! z7T!&qJ;dP~LHL6cMexYOaDF~BcvclD-9Xx6E+t$Z%%=A~BHlbox}CVQ;G%blzm)h> zDY0<%7SdTs-YZFK1ug##?XiuLZlyiGr2hxv^I#tF)3owheAnW;mbQ_%K{?^I1df)|UA*N{jy*nJE@L8xcsq$#J>F-b zB+8(DzMw6H%eUaOixlPE{wv~5fU8+;SG+UPA3JD`^>FhB`fLLdjI{yf=nuLrt(VSQG4Hv|$LbI`}4dfZ2%{K{HX*M+G4F1#1I2 zIUwbs^Z}S_*vn`W`Tb1nbR+R1Lkq@DP?Rh&@e=Nl|Iz;jAj2KWgzXW?4AmRPJUCVr z$Ev(6QLCoLORZhfJ<2EPa%3uO`7m5ERrn&c{q`O?9a{6-ibBDaM>Ju~Fvrw<4~Ym? zUu1#-NXwrz>AaTO>pvMS;TddYrCbH9y@^w>ji=dBn_v(zKrakUz-oN(G4|TvreI;f zcUj1?e7=V$4OkbT->b#LZ5QsAwg~EQf8+W5hPdC4xUWjaAM{#6HI43 zPY>Esst1BAf_Xfj6>>W-cs7{LI7^HR#u=?1>1Z|Ue3V<@Wf9V zkxz1i*~Ocg;_3GjhLwe1V8ZtNIs8~zCUN<+PW*YQdC6Kq*u11$&^Jk^Qt=TiyxYr5 zl=xWXY3&X3HN{Evgb7BK4-cj%{)S<|(>z*}Dzz$)6LK3oS%cj72KNPD2JOqY%fHab z2r1uy-&4UH=FX98yNHrsku%KDgo~zOKft#RDJFP2`G@a#j%eb2SHXy^JZi-~9daU1 z)~|T(t`{!F2-mHsETv#f=bI!PlWK+Nwgp}Z2WDBSMkazy6jti)$ z6`SCM$enkXO3lxg-jyb$0#I2GH^FU{tZoxB$FYD(bd9m?%W#JO~?rfLxQ zi_JXh(D5F1s0DaKvq?!XhE4)uXdyU6f~44nGb|tQj{gx?JI=6t0tUi5&aiY)8+f-l z4ecbm$dkQkz61U@*SX*f{lNP|Ioc<>hz=5UzDFAB>XC*n^hiS&X~7uk?lFdXd5ob; zJ;qQUk1^EOV+?^X1jY~uLtqS{I|PiOD?G-~05FCg1dH@fe6useV+;-T=t9Fhy3q9= zUFb%SE;QVu3ytvTLZdyp&=`*{G}faFjq~V2w|I1+TR|6^rhelQg`NOWXpx%ck%M0H z$U(1rx=knrZ_Gc*m%Xpx_m%O(5abRhvP>tEaYrh}S@U;W36d zUuavZZGtO=Mi_8~z##%xNCh5O$aq{KYXw&*)8h(N^|(Sg9#^Qq;|ewLxI#@mu23_N zE7aWM3LPhUwsZ@RDAdj)3Y`L?&`RCWV+nQfSVHG}ETIcLmQYuZCDhGh30>l`gf0b3 z=zHDQqX_-VqX=E&QG|wi6rt-qiqH)nMQD^q5t{5#gdX!KLet%~?pj^su5;IcE+mLT zB_2`eIgcpxyhjvz!6ORI_J~3+c|@T(9#LqnM-*D%5rtm$h(fP>M4^QqQD~7z6k6;N zg_e3mp=BOXXt_reddDLQz3Uc&DD)nPLMuQT5-g$5JeJVs9!qGw#}eA$v4l2yETK&v zOK7vl5@HQPkN4xVjvt?O{P=9_$7f^4XLH8taa{Gl{5qbecMC4fSUUlk)|xAuQPzf- zZMg~=U!ZX^zB;giD7a$PITdmSVb0{L4+2p~P$xTa6@Wx^7Vns6bLBJUFQ5cnxvDVw zF9e}d#($b-@l5prTHwn&P)UQ&QL#8t&h ziiSvva@7!N5wPPT@}i-a7Y)6San*FH@=_P0qvjd~nNZdO4zzBZG)Fn3Hk^`YLeCYI@wVI(j1C z1UB~QWp(s}NSVf7$~5*;rm2@Q)sQk9R5QI%Zv;wzCrB^3dY9hCS}otJK?|x`121

=cWQXKBM7UvgRm;7X4R29_bCJV=0sHk1kMLl3=Lb8@coOKtg=BndyMZA zrD0L3jUczTD_>Uz~y|2bmo{jgq+LiJ!9sXdC)I&iqDw& zWXu(daVcs-vLJNYLMh?D3sg{@}H zWFZ>9_7ZZR*@rD!z8pBA-;w(PbAUP?G@!+z@9TT$AIuNXKbjw*1(mIqm#VeARITNu zs$hxot)Q2x)xA{B_EI(5OVw;IRkOWR&Gu3?+e_7Bk*ZDj8m_5rsHZ3f-kHdp!f zILirIL3D#|VL3@FxNgubk-~XM;kN93pKMQ7O>H|Qa;}%ieBp;g&J~G_?@&8bHL%0% zjjEZ*Wn92}Bm6`=Q5kSe?^iK!O&=a@>&PmJybd{kgOQbyNVnB~WK@jM1)ClxA=rUVIYBSLy z)5OlQvsAXAqmt%}oZf5>Mk-tcPU;-;oonY3W}cl#_ysn^{(X%cU$=0JT?isob+A+4 zAjdb+%aUOi*+nXor^Q?3vcxV?RqRr`RMiHHZW*~Rx647WT4CW9yV9;yb$Oz&j|cYZ zd+Jzuu3&>vhrQOWrTm}pm136tl(PkOc*d;9-e@;cqfMMBHFmSzOpaUZ7Rm;W9ck{c zJ5+u2ne8MNXm*rvkKIG=dqG{xvEZ2C{x43T7TEoEKPCB&lc>fXum?!zASY6d{oZ~L zU2e-sGq8cmtvC~F+)3^v=+>N#HE70c1KpN0vc{e4 zPKIvh+CjH>?V&rk4$!B#Q=m^pV@}MS=1!xIr@Pak&v0izpXtto?&vx~cXFMe&vIu$ zpN;mMm^;Uv1AVSL7rL|S4BZ8dIWc#hI}iGNcRut54&;8G>)mLp?yftn)Wh|F?&*3$ z_j0|Ud!sYQqRa9U=u6R+V_hHD2fDB03FR(xmqGV){h<51{?M1Z%b~#<#AcSDvSpTl zJsL#495;qD8(D5F$a*<$9N&*-x$z+E<+xk;jxtL@?jGDhDC86}2!+I&>?SMc9^?G5aZ?=gZuhu*oO(Thjv9^D&8d_D%tG{-KjWTJ z_1ttf9UdrhMfieWh+XE&NMWX%Nt&P-VuNC+3f+tDMcn7OIoNaETtd!s^FRT7*}Y5( zpc|4V=!TSbp<77p-T)u4zI&4sCs}S0IDz%uVz(IjE%z2$yum(H`EHq8#wn5IZaJx~ z0NpEB<}UJOEGS>OGIvo8WbUGx%G?DS97No~K_m<~h`b4CYWS~|Ro&$JZe5DBmdl%?MP$y8$a6%<02BHJ-RdrWzsA*Eb4% z97X)l)Qf^v`WuFjc#?Y*PlBiBRB7~thlEZqOTsISFrN29JI&)i{6~5_GP0hMypp^h z`3o;aS2mJMt{mQ4Qm;^Eh2u7iC-N$~V#q7GvbZvc7u~|6sdp&zL@uP?sbP|Qoh)CH zYMLYup`x)SvOq>~bf*Smwv2R6zhy*5cQ$pX=tiFvErRwKq{zoacze4_x@{r$V;2y7AYl0Z0mVS{z)t`BB4Xs9Lhq8Av-$qJc#&D!bQ9m%HPl>8^F5$c&?W3L&aX5es*ddb_bczfyak++OcYle>+GF*M=?RDPXg!5SSgz#uP;WD1^gDWuep|2BtMp2}LNC|L^io#f z+L@DCjccK|>M!&by;*N!{ceL^uRmu^Z=L=W9R+Jy-W&K^rhZz#+h5p zc=KyB*4%3Ppm%8}D}7(-uk|;2x89@oqJwE48kqL$f9vn`0ew(^k0z!cbvX^JUAZyn zVsa*CGSJ49i7uvWQ`K}d)mR(MHF@qk^fJ{jHBBuvGu1YQrj9w*)H4lCeOXUpHL0C# zZ#&pi?5XxNd%8Wto@qPUPWCK&wmrw5YdhO6tTLT%FR)$hh4vzQvF&EN+a9br^|HO~ zCH7L=$M$9Ish{m{FSl3N0rpBe&Sy~*Be zhqF30(vGsD?HD`OjEfj|q;v zd9HM;+-lxE*SL3h_k7R2?>=xJx{r7RUF$w^pSpFtg?{eVyA5um+vGO8E$$1q)os%O z@1@&$E8XdKxv$*U?i;t8x6{37h}y^d>He6FxmYZg;r{IoxP$HoQ`i0IzBf6hAXYUd zPvQU9%JkU(L9I;5k-tvuG-H0r7&q6Makj0Daoa|34oA6gu8j1Md(j~AQ8?n=I>!8N z;o$hlKPdbfjd&d(QiX5#!m$;O{8UL%p%kc%1o-tY9{2bBoRR;(9`}cj`i~jkGRniz z9m;?mel+iqag03NpE~Ac#HWvIQJq=B z)t8;De(Ymi&e`1o>}3sPA8RoCSNEYq@P0H1KB)en{-_>SkE%&(zIufnt5?-)>UH+4 z-avoOBDI(kuS?WYwTu(5E7VH03OzbI&;+=P^TuDJL1(wx!7M#ZbBDQ$U7W|w-^}05 zKg<(mD!V!VG*6kQ%{23jnQn?qF?%|tW`-#* zOJZ%zRoZN9BxYuVbijy=}aw+(G$c0P_{f1{;sWn0^S*eBRSc+x(_9>O$s z5T@HATg)Cpshz=k|026sG|jNWzl@dr6|Cs5va9Xec8z_9b^Z74hxTJu@V{XV{##bj zGhKDo#_wX)^EHlPe$vn3+m@%|eUFfy3^pnhwWe%a~Eg9SLhN0=}r2B7D+&uk|lZzyAixdvT{*P0>b zYOlF4LwM3`qy^RxQ{D-@=D>`0XoecAo>nu_<+oh@psTZ&*$sV$snJLKD-; z^g`#}-;m%N%wBe#TJyB;##448`#w|9TesS7aM`TGcXc4-;dqiSiM;5*y*t@ zu^zGhvAbg>vG-%;87*j0G?XxtLMM%CW$va9#j@w1%0T=us>n6ME(P(!s1nE8Hnr2N zLq7vmCKS7a#NY-elvQk_UuH#H{L<5XKti#1AnD$ZUBuo2>9T7e={}A~^OUaHLf6}!khgk8c6H;-9y16BuG zvLAmc>+}}aV)KZ^VpoIkhOZzfYY*&F^JnZ5_6DLBod;D6A7qoxF{+*^m;W%bwCH^3 zGWVnp8!x?;_t;{a?fn;sKev>=x_5cayBu1kh4C`|x5Q;XM9L)X&FKm3QcjXcnV!Oq zdSelE8T$!R!zkwu_*cwc0zT}+5j(Awghx1s;eFSNFZ(Of)8nz>4_`((*-*?rgp@j+ zPlOYS+3k{&O~Ec=w@X?}`n1G}OUQrIp+f$Xx<~w1>gz854oz3;RLriGr29|oB6h8$ zR2{KP+~2UnbbZTszLWO!Irwp%;2QTV?#1RypVRX`OvFz+yw5K0^MdyYYr9e0*~5|a zQu%4G55LccpCi6*GB#Lw*d>Rwi}Xh^yJAv)YDxKfVwW1>?h-c@J1qapP^nxL$bYMS z9x_tP*nyI;QD4Tqe^u}Qs`zsY7v*}F*S$-64@sSi-4O9HGM=O46>=~&c-4(bLyQ{Iw+?CixZV+~_%djxf`&H+)db}Za8*&n%Cn}>_%aixf`*I z+|AgfZUi>Fg~;G(P{Ql^oR~R*=f{bhz>9Grr~~rtRL=W=E5#Wfw16=SI)+(LPxeK6 zGxw1beFKqGGUsWjCUCV<_i~-Y{AVKPibRWY8)iU%M2<~XkAn-ehU*maj6b8`5WmKZ z7FJm`3|-}1VFtQSGhqfXcJ)bb_D?=@Wl9D(rye*XE zbh-KqRHAlTbUkZYEY)q4cN5*w$#CdV=0bmSq7CYCZl;xJM^3n8u+!Nt(3y;FP| za7yO_PWN;*7nzIA_2ve1qq)i4Y=)Z=gv#N}R}1>IJuM&3WxI0@OJ=Ugv^h~=Mw(GZ z%4X^1?&hWx-_~fGyV6``t}y+~<)*(GXa<% zQJG<880T(Ao6+n)|ItmN9LfAh(M>X=asQKh$UW>HF~i)W?$4yvi`2T4@=#UR^d-%1 zq-f$P_A^)UR7*>RvJ6fs*#Js)CES^+BUv;g*CdwAO-L^)F?mp4N|{m$DFY=<%fUV3 z9!-X!oPYLfRfX`xu|CcEtZmjJmT+9SYgZ2!O-{Y(vA)zIlXkm`Q&K~zRgFaIaIc=g zKlJVqGvo!Ccgieuxc@IZ2CRJQNqQ3Ai}eyxZD^X)!pRbLVkLEneoHULr;%yQoUW;9 jMwn!Xy7a=?>bK~2A8*bv=bFx@i#gAnPs-9J^wj?V$Lg${ literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Bold.ttf.import b/addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Bold.ttf.import new file mode 100644 index 0000000..7014baf --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Bold.ttf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://cc4xli25271fd" +path="res://.godot/imported/Roboto-Bold.ttf-06d31b48586230dbad6755c1913dff96.fontdata" + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Bold.ttf" +dest_files=["res://.godot/imported/Roboto-Bold.ttf-06d31b48586230dbad6755c1913dff96.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Italic.ttf b/addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5b390ff950e6539bdfd4d84265fdb01e0c35f291 GIT binary patch literal 173516 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Regular.ttf.import b/addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Regular.ttf.import new file mode 100644 index 0000000..9cf6c6b --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Regular.ttf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://vrrmdx83skor" +path="res://.godot/imported/Roboto-Regular.ttf-60536d53c7113a1e7e3f4a10a4ea30a3.fontdata" + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Example Assets/Fonts/Roboto-Regular.ttf" +dest_files=["res://.godot/imported/Roboto-Regular.ttf-60536d53c7113a1e7e3f4a10a4ea30a3.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/already_read_indicator.gd b/addons/dialogic-main/addons/dialogic/Example Assets/already_read_indicator.gd new file mode 100644 index 0000000..4dbf5d3 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Example Assets/already_read_indicator.gd @@ -0,0 +1,12 @@ +extends Control + +func _ready() -> void: + if DialogicUtil.autoload().has_subsystem('History'): + DialogicUtil.autoload().History.visited_event.connect(_on_visited_event) + DialogicUtil.autoload().History.unvisited_event.connect(_on_not_read_event) + +func _on_visited_event() -> void: + show() + +func _on_not_read_event() -> void: + hide() diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/backgrounds/BubbleEnd.png b/addons/dialogic-main/addons/dialogic/Example Assets/backgrounds/BubbleEnd.png new file mode 100644 index 0000000000000000000000000000000000000000..c0ff16161436f2bdeb104073c0143d26f7fcb017 GIT binary patch literal 1619 zcmV-Z2CVssP)EX>4Tx04R}tkvmAkP!xv$rbk+gL!Qw&2_3_#Ib|~k`N)IhB7L!5T#us#YBqEV;=rN$DbsZOs+B* zITlcb3d!+<|H1FsnuW;;Hz^ncx?gPjV+0870?oQ@e;?a+^91le16NwxUu^)hpQP8@ zTI2}m-v%zO+nT%wT zj20<--Q(Roopby5PHTQYwkmSM*jm`400006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru<_8!JG7!^SCK&(#02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00b*ZL_t(|+U=ZAh*eb_$3I`01f7V=nnhH!liW!3hm0tR z(wHnFEYOn57TTtE5iMG^Y8L}S3qi05G0U=|KrjRwr!+^3##|VQlTI_0O*2zHb-pd; z6a$Upd+(li-@W&pFU;n>d+#~t`?KQIi8 z0Areclmbebq3sR8R^YPaV`fbNeZUq;r!IA{F7}1( z)xi6}qU32)ngX@}uS*)O_ax2trR~RnoxpN&`E5AY4plYIZ5eg`&5+7aVobv+v-{hU(Q zoH_*D5(`G%5i%=v?E~&j901q>Y?L$=^P+Xno+LR%$$tgj%fPzWFdB-GS&^~_Sku9^ z#X3nJwyJ?v>aL=iieIYPoR%88P|7zq`4Vf!0vzt!myz&H!^=Cx|u zZXhEChcO=NjIWD+*Te!cR^TyChRFD;3^_FxkXk{T4&AXC%Ev1r#G?EpPK|>ZzEo15_bpt!QIpJY6Li zu_ENoHdWy3CGDbO%DTy65ikmL=h){zfX5|$Mg^5MLLSH&#!tXQk_M@$vOYr|$+544 zz#UbFk#)Me!1ih9qwTi4lk4*XS(yWfzie+xZr2B7XNzGRw|!f3x;_{;+CJAJ5Yx8b zw0(IedfV(Q>v`fWOwQI1%&bX$o^Jd4qodpQSPPyNui0Ll9Bv%QtC3;swS9APwmBF* zw#OrZ7_hx6xta|~Ujz_GZ9f`*J0&RtjODg#89?l_-J3wffzf6Aa1#)wY;UuDdvY-@ zkXIT6am4luwy#R=#fPz?&Q$eXn7S@YuC)%vwYE=Q1i*yt4{UF?eN%F)#g%&a=hJTB zhVaoT;LGrL5I895?_^6vD$ow^W{m7Dkw`ionq6gi;C!j8c)uWLaMnI@?l838-5|0^uPJ z7;%Wpph5t%bpyfzz7|=Ez#?o$7KBYZ5Vl}I1;)TcXm`J_W*7th;h($7{qFDn&iS41 z-1B|+@MF1LJ8OW{C^j#J7nWuV04y{+NMJ{R*vLqpj)=BE)XBw)JQ6Y~lo~ZZnoUnj z|A21&7gz%g%@A-Eit|(nhq%d@_vT||3<#KIGysdWxzCoYy(BYF3_zeGk8rU{twC6T zaA<)>h2e7uQ^nar3Br1WcdAi>2#;gD$b#oFoP}fjP*im?KN6jdig5nUWuoZ@(GUv>zymsnARlBP2Mq+E zRf(89;3GSG3%v`j=OL8{sbnBV3J&Ce0))68uy25T(AcPLo^*E*P7&eE3ug0rGl11yfIj7hK1T--_7CD~HaKPzfMW?jPyYrdst4#T1E5W)glZxF z9xL=DN~Hix?Ev=a0M54nY>!y#hHRJ}TJ8WOqgus}05qHj@XbQ8GqyN4843QY+e>|( z)h{BR7qbV62#zc>g~Co^#*Ub3N<)~_lg620&hkm(_uq2o_^UGu2VE9CO@@Jt3SL;_F=;VXiFC&`}hURPS%`v+QEntd8(trp&}ktwGNgm$F@ zN?=^y#ps!&-zy4VC$Ck$oBKBLf@f{C(q}T6vE=u#|C()yHp=}{{V87cP)o1Vf zsByTFS#i#$AW@q5VgQ2zUTc*%&((TlTvq>ivp(<@mk?Poz`t-vWd;BM literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/backgrounds/rpg_box.webp.import b/addons/dialogic-main/addons/dialogic/Example Assets/backgrounds/rpg_box.webp.import new file mode 100644 index 0000000..c91b0ca --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Example Assets/backgrounds/rpg_box.webp.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dch8fuekijffp" +path="res://.godot/imported/rpg_box.webp-1dfd91eef436ce12315234af34971690.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Example Assets/backgrounds/rpg_box.webp" +dest_files=["res://.godot/imported/rpg_box.webp-1dfd91eef436ce12315234af34971690.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/default_event.gd b/addons/dialogic-main/addons/dialogic/Example Assets/default_event.gd new file mode 100644 index 0000000..6ffbc71 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Example Assets/default_event.gd @@ -0,0 +1,51 @@ +@tool +extends DialogicEvent + +# DEFINE ALL PROPERTIES OF THE EVENT +# var MySetting: String = "" + +func _execute() -> void: + # I have no idea how this event works ;) + finish() + + +#region INITIALIZE +################################################################################ + +# SET ALL VALUES THAT SHOULD NEVER CHANGE HERE +func _init() -> void: + event_name = "Default" + event_color = Color("#ffffff") + event_category = "Main" + event_sorting_index = 0 + +#endregion + + +#region SAVING/LOADING +################################################################################ +func get_shortcode() -> String: + return "default_shortcode" + + +func get_shortcode_parameters() -> Dictionary: + return { + #param_name : property_name + #"arg_name" : "NameOfProperty", + } + +# You can alternatively overwrite these 3 functions: +# - to_text(), +# - from_text(), +# - is_valid_event() + +#endregion + + +#region EDITOR REPRESENTATION +################################################################################ + +func build_event_editor() -> void: + pass + +#endregion diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/next-indicator/next-indicator-dialogic-1.png b/addons/dialogic-main/addons/dialogic/Example Assets/next-indicator/next-indicator-dialogic-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f26ed34293eca439250bbefdbcaf84bec370c10d GIT binary patch literal 2825 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 bO`84>wo1V7cBIVo00000NkvXXu0mjfC_h_G literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/next-indicator/next-indicator-dialogic-1.png.import b/addons/dialogic-main/addons/dialogic/Example Assets/next-indicator/next-indicator-dialogic-1.png.import new file mode 100644 index 0000000..86ae0fa --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Example Assets/next-indicator/next-indicator-dialogic-1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bgn2ci6nu85t5" +path="res://.godot/imported/next-indicator-dialogic-1.png-c4a79cf26dd6c99a1c9303edd396a02c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Example Assets/next-indicator/next-indicator-dialogic-1.png" +dest_files=["res://.godot/imported/next-indicator-dialogic-1.png-c4a79cf26dd6c99a1c9303edd396a02c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/next-indicator/next-indicator.png b/addons/dialogic-main/addons/dialogic/Example Assets/next-indicator/next-indicator.png new file mode 100644 index 0000000000000000000000000000000000000000..896d3cfc0fc6426518645409ff223c15b9f67bc4 GIT binary patch literal 4189 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 literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 doubt.png.import b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 doubt.png.import new file mode 100644 index 0000000..cd8f80f --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 doubt.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bl38l2bv5ny4h" +path="res://.godot/imported/pl5 doubt.png-b540307bc3464f4877f316e1fc6a1bcd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 doubt.png" +dest_files=["res://.godot/imported/pl5 doubt.png-b540307bc3464f4877f316e1fc6a1bcd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 hate.png b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 hate.png new file mode 100644 index 0000000000000000000000000000000000000000..a4eb434b9ce317f1f62d5f940c96d643b79ecb79 GIT binary patch literal 67008 zcmeEug;Ukv7wx@pflH@!hg>8TknTnr1ym%JmQ=c>J1$bv0xBRO2uOFAAR*l#-3{;D z?{DV)4{zqp=qSwa`J8*sK5MVN_S%GNX(-|2P~$)#5PTJ7c^wD@4g41!0>=dZ=n&3p zfPbJaI!dyT?}N0P;0u_gjJga2QXY$YZHfWD#&%SG?gD}Eu%P}z-Seef!8d8%DHy!d zb+CBnX6pO~BKOA5#lwYB_uc!~)((tM9USah3KzX0kUL)$d6}o~M%x(}pPsHx`0rt6 z{ASAttW-vX{jPfgpNt5f4LAv(%$Pi(Abn_pPNdMmLqtT(Ap?_#5hu-@4<79{2y^}T zG3sKuF5Wc1I#|yy=CVHMsF`KX5s{1d|9}2p-2oCp)+sLqZ4!Uqo6CH?uR5z`pFe+o zy}P!)UYayr^y9~mCgc^yno37pX6Bqh=2@iAL~nPu)yJfylOI0%+DKu!dk_VVH&N7r z-+b-ucgq3;12ukTJMdK3_3nrU5A9#x(J%TnAz-+idd26LO?S7`%9+NISg(zBe@?8f z$($b1y3?)Sb{*1B9o9>&Hb|*xXxs|1vs*UYq~s!a7niRMWjWkj9}SHUW{7cnl;j_h z?5r&MOoUPk+8Fp;omQm@+FFzvj5{>lScJEl+#GZ%khsMwXNKQ*vCg1@iV#zn*(W6I~eU0UI6y2@{B`>Oq z3Ft%(=)_zrf4$o@OXAQCSq~1LnK9&KW5du4Y#M6c`a>xXmycR4IU-2#|9en;W~Oh@ zwnoxU&9`SodR_PY&KE;p4x|fJ_a^f?Wa?6%uV?ucH{D+Ld7k{yFHwjjU+w)(k-Ke} zm635{y~t0d5YGAyf{4JS6mzwkdR6Bd{V}~doXGA)sZqm906NwSyPD-EVyqHkEp1qHY@6M ze-dCZc=JVjsr6(mWq=)c`NLwMVy*vSgkmR-C9I+9O_o?2n-nD=y6R>=odCfIzsb{|wKC7nd>Uk+DgG{YE1AUU$cR z`}*~3sm|cU_g7-0+78>3<)$U`nq&wT@6##ElKdyhyK!|CcJqxlNghXQ+6vhSRmc~# zYy|OrZtjvC_$@opr5aLua!_QUo~l4NtFVji+CoW`l8zY)d`5rSCin%;^ZE4oo^OqRd$r+ zo=e}vMUYr*7f4p;fBtN!9&*c~-5SPyy&kbIbugx@DVTaYA|I6bz71a}<-Tlt7w6M2 zCQ=EMd}}p+cen2}i>vLXDqN;3t&h$QSNobOz~OYDqmV+4FWnfnzy7C4f6o&fMf&-> zO4B9!?{}n{;v*!BmZkT}!NH9)h0>Z;+0Tk91l`3cMpIWgjO2FYCUNT9mxE}I$Yz2l zV55ULe3h7xFjr#SA1`7=az@3DzMmf6l;L_emo|^jYooVPDAy0?{vEd)xTvE;p8azPzaV*6@wiV8I65Zko4oRv2^H1h`hLsH?3S_c=d5L$^RJ zbzK1);k6h{kv8eV)!o6+On)HEX&0p93*|O54w`$2aKZerEZQBoo)!} z#V3uz@ff`K1F8V{*X){2);O7OWqR%Ai0Hh$pv{V+6MOuahep8(idvt4SchNab|xLa zg_?~(-}UMCl)2C4X5neWoitQtdhKEWg{SnpG@3N}_`hDS*y`KA5WL z$11|RHOs|EgJOGe&a1rxL~pX2ZsKxT@la66fJgP{^C$QANEvV6 zZ%>ZYl+%H`soqfcCszU2i_JOCR=UE}S{uzD2dcehv%bFG#ID*5@p`UJf(Fj9gRuQy z(?br9%?kcO;kJK&tBM+^B_yx5`E745Pwqp97U%u$sv2)jUlwU*Not4pv2f7{+K^3% zK;{;%U-@3Fa^%AL$=OVbL15+6qn;{)iDidm`rmM;d<1o=~MrN{5u2&L>wp8x2ynX9jT9*GGO!o#cC zI=6HmYgq8Vn&lW5q(A0qMJ`emmB)C)_NAD?P7TU@z)U()`xW{4_^j)%Wd$RbVa>3> zO$!dlN58c3auq-}?)RPj_1?nx1#yc*hEpdM0$LP8K==2rkseYf6r^t*81Zda*uLK@ zp4(@6Z!boN?our?A5xv|chWdeGHDh_srZA>nf0gAT9@BpVa8=BI_+wnG=cDm*ox=z zzduFZs;a7MU$paZUNJ=I^rF&*IORjL_7>*rEL(&YJN;X7E&~&rE0t@O#h5DrnirK; z@q(tUFkQ^B^t2H1oxfE-?o_dbD&H40xC~`VOs}l1`3g8LG^?JF`XKZfK-)aL8LzztJrF1*oTc@@(}Wx{|1|ns zr3}!Y-<-|wyv)zS<*D&M>~dZ0OU|<3K z5+ShdilH0F<*hfFxrvp!ts%a3n|+^*;!Jt0?x*NsInYBw^2yXo=DlNcS`h9$Se6;;WA>0c*lq3_}=IZ#_u~7{% z?)x7FxnBJm6F8CSZUZZ{I(_x)-NO&I-RGeUzUM8}!j9RSeGG5EJ^iZl?-%3}cRkC| z-}{zb9(#CEM)fNo4{SN{ksck_*Vic2O_I3W$lLkTebhl=oWjb_Sd^(}qI{R* z#%nV_xmd5{#q;D>u2YR_e%~Ng@Ua{@EEnT&9`2VvD|s5v&5-`p{Er@)jowoQY3Tt( zRhEU~$PEzCKWH*E8e1P@JTy3rwH~$uzcSfg?eQ6g&J-7$(o4?`NnGfCfO;F6?)W+SQ(Yw}Z zLafIb0V7~N19!IX-%Rb1Cs!&A}@j1FK@Sl(cktrQYb}M& z1G_+mH-TNWE>X{Fo!@w|J>I{4$8>yb!}=hKsKDj*#o_8+c`_N>cW@I`5Fz+9kVaxSw5%F`LzjUcAG`DER8O|fYH`9tq&LAa$9NFvZ#M@(fBS!-VRkZhe!JDffLtCYaF;c(`2UwyaV>c0Wp)u003R9RD#fkXEAi(~S&$o6dA1l;!T#qX}H zXf?lzQ{vOg6FSj%Up#i}_8M)+QNUyNd>(+D`ktSVzpQSKEJogNJK6(Q;jE_X!^j2_ zufLVn<{3VxQv)FT?dh;dhqI%uYG7q$B?0rX@!oWGX?H0O2%rlP2m_f@Hv*RzfY?V5 z&o}zimEY1WHkr0z+IB`!734952R1hU8QePE-i&#Dbbak@yFQrl5Elx0M)UN=ux$(X zFhjOZzG^b4r`8^Msc0L{GG!zI*jYG4DI6EVqB$0-kDf zvN>vLoW}see6{L6Lm@CL6RO4ri=CEaoat*N zVAl1-EQ;;lbrW-8{@_Jl*(D@yo=#=RZ@&7RHpxiIaY4gx5mmk)p2S~lV-mQf4V2fiM!=wWo(e1nCtj4~?AIM*WlR8zk62H4X8ei#2-0^B@bDIIgq`=uu zXzEGCk`353Rl&AU!qNmJ^4+XyDBVYSGo#Pvfc{3U4tWi)QQ&65%FpKg=8@D1@N+dDpludEL>Ti+v|%JD#{{cxKFNQN|zNxKGshbt=Qc9 zGF>G$J$>pfrr8CZR%|_9QMf!%UOMK(n#!WTr?0s1;>KJ5&~Os1#eBf~J{GTXsN$jC zP-Sw{r*I>>blbkhg7Mui;kT&kww2G-PIW;Oq{puk%_1WX^2U}u%iCG{%{wGq_GoQj zU=E)sra7-gI?q7%1SXr_8>uDpTrS7yg;1y}h!<P$WQ=`{LpvRv%>e zwT+SZlTNc6G1;s^UnP2v&(GaN*WzC*o=N?bHmG+m-{c@tS!JXA)G1#cq)HI;;R3$s ze~s5FxR?zJoq{D64i4)CL{8{rU&N9q>cMQzi}@3~jMRJQqz;7SqQ3!J4+)&hAk3)5 za3Cx`L$-)oj|kjTE#(a|eZ%sfCXl@35iuHIX;XxC50C(12W z#*c2Du6|#ygTQ&b1+ZJt1$w)8cRTbH3x+c;b;-3(|p%T=gq{H&aQ>aOtiluRP2;MlMA3 zt#2x}|FqPkormExYmLG;XC|_+gc-lBKtS&cW<~;ITOr5F>w}EX)~U69#=a=kB((bz$sy4{B!Q17{Z(_TKNN0;=m) z3X!YIT-0Y$Jx;L_rzx8UL*o8g3stiV7H61U3SLVFXG=;}EG7r7K{yTM`#<+SzZ7Wh-BxC9EmaU4F&3*mr+dTe_ebsfAk!hKo;Wm7RoXnF_%pU_Xov$4L zdG?Tfd1}$)#oN7+ywKXAOxzn#Bip}#grZwu))3q5TkERzi;oY#3tfhX3grSNMlm1~ z_B8M5cf;E9YsL33vX`h)0YF+fQSx%az&U9dnmU*LG3W|@$UpiFjx8g1azqGGq za|2j0TTxLVJ7oA2Ni<@5PxWgyxLB6G9a78NKZau54{5PI)$YU=gGjm7@Q4UZS{Zu$ zYIcZa;leNqdNgDZg^_!U=h1+WdJi=keam|Lur|5);>jkD`;1c;RnFRD1oZV9bRbsM zMmK8s3ZQJsUgOoEyXro*_|5U?nq+>$>wVHkEqT& zZ%X4$D6MnYlrrQqj5HRu>i>!Jm!va8{`RmOI!)iu{9)}UBZ9?{Wln&;72cRaDw&0~13Fv5+u0)i?6UCpPMk$)#3> zh6f5<$b=nM1KpMn2iH8PyrA4rn}ptTgJ~;Xi5}a^U8|CD#t9&9`Z9N#LqKy^f`xQ~ z!LPNWgp$~5STH;%CVPFxNz(tYPD{GQ^X6ot1jPBU5jH_gY^Qpx#X_Wc~lB!k|AfUi%|N_}`YUi{oVVS`pk z+}u^f7n!CNTrVW-W^gsOn}-}Z?@1--w!=hzla_v-^Y#eTGY;`jNI0~f0vY*ER!>iF zrRtf&0gz%eiMi$_~2+W_JeWb#UtOpv9#5EseligK;U+-kXiX8O=s( zzTQ+JoL=QYyn!5HaRn|<6hxs$+j)bvp@T#T3Mux8p~#7)p^wFgjlUw&(EDy^ZFq}I z&c(+>(uh^h4)~OXEuOiYv z3DiaMbOTVWCHnH8SymvGy;*9H$K*WtKq#60ecE74XwE&4SQ^f5_J=hyKR=&JUq}^N zi)I%DLD0xcU+U;|<4SuhT)Yu2w}`b|`tCFb_McHqGI6GHwI zg)Cb8`UmK0s7vQMo0R`h)ElX{e+699UrQaL3s0b9;_*GBFzW^+1y0UGjc%Pb#@gey1&W4jOb*XlXXzWT?e7&f!zw;t*V z8)4<H z`p1EBQEo5{#u;~f7%k6h`Yth|$T$c+VUS=TNo0n*$hcH~{G2529A3pukCQvNRwW#| z1(Y&Rb|hE*YW^L3%2tk|75Qy&=B=T4%)Burtl1Gj(q6mbC8GkzIK&pV=oD2Vk<@i{ zbrsYW(2FF=W(!bN8&;H7oiU3wXrOu`{KDKNT#5xUBynbF9)O91?Ze7x_RxHBePtzO z`t>-Ad-JBvIyXVI|NCOQifwbKDLm%hRu-i=*cAlaE}O((uM_d)knTCCAR7fe4qxkv z$Y{VC4!$xkxEOmMbaehI%!Md0PVz*!W41obA!?zGrouuLxteD$P;($uDM5J?{<1yc zzScB%0@ZZp_Dt<4YZfSZ-*j@*;TV+EcXC(Hm~mb7_p6Owhqga%#cM2pgyik{AhPY8 zu3cljTe{_96<=ZX|#9YgmcLUtqpvvB!#ITA2>jZyqqgF2yZ z83@Y8tuF^ zLD~Pt>~4fiZ!VjFp)YH><6BortXCF~Z#-AtQAnbfw3+FbxD-lmIC{^X@Zo3?SqCl% zy@P(!vF>C}{lP|>=U@8RcNwrTnp-^HBB3vEM`clci8;%u-xQFdbREIMBu6er`Id4L z0+|i5BLcJFJP1)PHpV5j{NWWhjuFJ8DZo`SGFSfI%?O86IJ`@>VrzpnQvv*Wfw}dI>k8>aJ``>Aa^o$LIw8aqav@pNcVTA(bg!qVNPi+vbk?;) z%Po1alKAChz7Q>27#iEUT*PTqiTLJDOrIk{LU(KSr_jImgO&tDfGpziO433@oQr2o z!)Ju{e>sp+(%T)qc33FZVqC<@{>6nNdJt6o?F?Sm#ycLEILp}e=;j{4tup;QT( z7>$@D=Z?K6gE{xn9%!TV3i_|i6n!gJ&utBokdWVJlGIv%DYxwXZl$-Iz7z%qJ^oA0 zPc8B{F0X~P#j&|8*Xnnzi=`{KAfa^leH6Zh!u{0lK3fGt%HCzr`dbkVxK_5ver4u4 z%f*2hk5%D!@+ z#UW4K+^?>Ko)U;{^EJ?OYAg6Ts*0Nxe38d})W-DUqln-wJjW_YI0Q{qTH9){UD!Ac z-2+Dl8TeJV@WtKL{M~la{)Y)upv|5(G|OD%;xHQK1m)J>UT%$ps=$7Jn!#fT=ddB` z&HOWD7|@PL+`1Kf@!9-GNa8fwXo@SX{96O6X#0M7`f+^U-p!5Vd8FDO$=g`NOC}8u zt^%1}api}IN_b2wIUd5}`aAPIG~rdGZa-J(kmOar(FI`v`h7OGdp|LsA`zeVwFEu$Mp7VJX0785s(2>QM;S3scdi1^j%8pgbY>FFY$mD3i@0K15iQPjkLR zn4fYx_0%Y*GMc;-s6zZX5Y4`{Bat_~NT2AS)_~=&PNyyYN*^@*@eCu#t~2Y|${sCh zTfNyusFIo!Qplemb~n zgGd}5BPyQOc$jh+8lf~RC#6;1_FF4r?6ANqQYoa)2M`M46*Npe9ir6344Ip5BWNuu zav4B4oaEeXBQ}{!fJo$gj)`xnxdQDPU0r6lnpi!k2h?Jk`&0P`(r6ayVvhGB5_G2j z&J(^|w4E!*IYL75?EKr=CG1 zId?_YEBHezYQowomTc0}(?TJ%@(YxP?Fo8M{g(HW16_Vs+3M$QytcFqtrFlPJ8O{2 zjMidYk%2=xzFHB;SKH5ON#3Ra#k+1=`ayn3x8`GQBwr#Zv#Q{+UPKQ@7B06+t5G8A z7SK(q^y}M#GukC8>al5>FHg4A9sI~31&vJS<$T1~Pag>f5?1p^zjtT&w*kaL8vYxH zjo}uVQ5YV_~Gd{2gKbKATY%9`EVN)T2=tD4tY=UpoJ5nn-)lH~ zk!^95~C{O%ioW%5912^W)x zx~~k&5jLEoN-uq8TpWmOOnfx~{7n!!)ovsO@8cvi_=%S4Fs)UgnDdGjvo+jkVlL4HsVF8^& zk8=B=1v3WgGOeyy28U=mv2g?huKsT_%k$sYu=kZ>hutjdGuNO(5@@|x3}u*exb>}R zaS6!ooPoJ_QgdPn+8n6U7rN*Z=lkm@I`=Ij6+qP3zS1)O?T;UgU)BttuKm0=X<*I)YL zX6{RbnGsQy=xEoY@Xaku;V;7z!B2uKY%)F6C)>Ayt^R+Wd}0vd&9f=@FAtgGzs3*} zp^=T96q1b}a0*!N>|~3rqI*L0)SyFX#__|H21u51W+%r&CT5I2knZJX8^5iR>VC_7 z86uqcL|(1GjElPGy1s37pTvo=>bY}i1(18j>>%6ymoAB94w%Rvecx1W^D;RgsXKXd zvcw@hOzPH^*4fZkV@9%N@S{YGMJ=+GI@3QlEA+k?o;Y(?vwC(J5ebwm4Ro^7hBQ*p z7NdVJ^TOLTB`?~M=t~4$xQ}ec5Tv5g*o-qvyg^U=UFaU5I?~wDK{QB)i_F4ahjW)h z0r4VnVZVyT_n=igGHM4-4V8W`Fgd5v`S69{Z|1sQE|bfm8yp#Q)zqrk&`5gMXhW`p zC)oLC(uL63)>F)59@-ykVa~{-!KC5{9sfMjPaTROvc%(C^#v>WoQf&zv?QOHq^aDJ zRU@8tQoEkX|BNgM2ae^KMH`Ti-C_S_UlQTDB7-_HAcZqh=^`WQ8@$eV$Yi7<1)bGs znUi#L5gkA!B#C`0ZzW1@%ql}^k}vXnNBR~zwU6pPhR3qZ&?XCat(LelKx3<(ocfHY zLdo!C(dM#0;ZK}jUmWe++heS8cL*vF`qYTNh_)KKd@9b1;2#{%mO)>>m-Ca34U;WA zK`}ej|LCk^k(Sd-7P_LK#o@2jNwd5|D;AUsk8@ajm%^$>tf6Hizi`J!ep?D6l4jKZ zC&e?a)uX{54i8k@M;?IkpNO+A+7RJazg^Ln@XKw_zElwt_JHc*bvL@i4DmIb&w&q( zg0lvQk5||ao#8~kS+8;2vglk_t1y?X~?oIV$Ph+uv0*{$lRKQ_LU6*=Pi&8FyF@_ zxguIZV9>I61vM*(EM7B@`2;@~Z+SI%wy^ou$&)mji%&;{^8EXk%LV=ex}(`pTxSt_ zukG>)Ad+dO2|Jk`24djqeFCsDfJI1eN56huzu$^m-McK5ilGqBmu8pSP6ra-=tm%E z81w46Q6^HBnW5%}96ah})p^zKCGFS)E?g6sZ<9}3jdU!Y?V2-Kq6A(&W6oM+%?z&S+| zpy|x43S+`dBWLP&YRC&SF&(YYFMc|jn{0IR`n${Zwuj$s=K7K0+{BO6Xx=i{@H3ZN zcLyZokkd-EotkDH{|#1fr*?LIK(6DMw$e^vm{X?IfV3e!Tg-AE7q5iG ztS{@k0*#Dbk54SU3$z#bWR=#VYp+Gl@Hej@pY~3G6ou@vOh;|QKfq*2YWeo)`Anpr z7cVQz&3e9g@mG@KC$GH7!_>nSOyQ5hZ;ijYb(w`w@mo;xLIW>=2SSi$)er9CKqT4x zpo5wHC%rvUP5tA&5BdRGXuTNU-8`X;@bbY7cfr84b+g)0BIQP`A4ViKW7c!+>x#{y zj2j-Bhobw!jtm(76YDn(t4a&`!dt~Z`aN8YB8hOBsOljtgZ9$p+1K&WF5rYTr(=UK zOCyt&kTvnZ(ZO$!IKN+bNV9naT2JZg*^E2}WhQarx0%m@qbW}WqFVn53rdV%%nIt9>OkM$T;|TO@-&pLq>IBca_EvmTUfxHktdS#qMag z^4wYT+&}~g6N*og)W&`9;HI-KQzZ6mOc)fGF=3jaV``sg;gZmIE72dibU7DC1eHkiZmHS7bb;~QE6*=2lb7}NoPWO>QPxNu(3th~u)>|Vdw1RpTU zZdys<0M+>9A%^bP8a(wFful2Sml@s!-xqmPUY@p?TP z#hZgj9aFog3niQw)!k^TCCQu6pWPd@GVS{3iiDhgVi>BBoQu^6D$MfzrH!-C7`MWx(Ff5W?r+G&neZj0KJ#m&VlJcpAj;s z#GDK?_YZ@@G)=(N*NPFK;vBWTYDS~s=y$aRh45^&=Vz=4!o)uwPFZHXU7CSQNJFJn zgjeF^`fn1Xi4uBZapy*LV%P>P53nRT(?|C)W%||@f;4IMCD*YWBC3NVzunIS{aGJ6 zY;C-5W9ccJ_iB~8In7(a37QMo^h_QD6Weu&$6ejuKjc|ucX!u%$Vos{1yID&Qt~h= zoQ0N{PeaE*m}z_)cV;kVIx9c~Isb5q0FE2i9{NYqI&<^^#U940=dCBiUs(9z@`TYe z`xCRkJb&anBXOB8OPxwzMD0B_F(8E4rG0L21kN$u{xPL{>%6C=V(xvT04=9pY8AvwR}0Uyb8T{?-bD={IBqNDW6@hCh_aTsB$QICGvYP zuHi)HLmvl|mWKl|zdV}%VzJ8ykoaf26~7Fk4P+Yr{(fx7d`Cw!wy=$ZW#x#3zBzcO zxIEsx`Iiere$Wi|V@c9j3{rl#dYVCDW51kGs9&TK##!T$s5H408Z9pbJ5ZcG?x<~@ zW7F#pYi>SgqdC)LK`e3T*CAkCLQ)~e$M610482b?XgKJkxu&mhc6J^|p(V**EFh-I zFX)#TlrK35&3n6Gz=&m+@#=UXt*0?!yL_!;Ps3_SjT{sD>jR_<_au4@QNp-&w_F~r zBG$61qLtT+B39l*Lua&zk2M#8m=c;2CrIKqdW||0(9Rn?y{G|xO zd&N)xR{lO}5;hGA9x9`O5q$^<+oAV49_c)hvK*u(9a7v7VSGpIJ@@zSGH?QArwBe# zwtb$qKU^6ClNp3|h2f?T`c*Ql30tYPU&T2piZJ0|FTzjT_dR%I2_w^&l@N)@5Csk4 zjvt``=)0Z|NE|m^=5B(Aq7VIr0=M0ec#2|vz|5?uvgqRU-Q5@|N`~&|bRX+-It8w! ztW`kE1~0|Q3LT0f2}&UU=MZM9=xi^A+*^JnvIqF%Dv2x&D|fCzgzSDT{7!7AkW+PR zn8=@GXr-^?T?A>UBHa90#7Wp!-wPlzy2ihwcmRLkXVxbk8vpb4m(iWr!^ehmpb5AZ zGOVzX<-QbNP{cTU69_d`&xDe*&R%M%8nh+)^RaW%2jH}ql^1ge$$6N_5i^DpC(=cf(F`2gyN8gZf~D5~O8 zgw4D}ksOCpg>m@v+7x}@nfBG;s>7nxBeiK`gwZi!`2B)13#VGfrqkzy;L<=p2tLUW zBNy!olU*>#XpudE%w7Bykria}dQEz=`0SZ)7htsmL(WIHoN@OZGWh>p!}u+x3oq~%2O z8Pv(avcF8%M>t}5{)6q0$8EBVIso$;gzpl?_+!3N5{m?BF0ccwiIoFnS_jbGNa@f!i(+nmFrns zsb|``F(`?I<>ST`v%DJ#dZ!@IcA_fte&-!<3GbQ4lfEP%=W_2Vp@)zCIR5Ts{$!RAUMJHg!Pjc!hE_DUDFBWw_1B_=`V4b0~y& ziq~eas5WzeWBjHnHY=SlPD{jxygb>PpEts$4SF=YOXNG|H~RY{x0b$}b{Sv!cu%)d zxwI8=mupPYnlS4q6XSvW!Y%=8?I2A(p;0`rgUx^+f1la zTC<`3)o*2GOM>fVF7LUU-G-32N@rrx0}r8y)I0Xiu=r(1Q9Mla(pbx-oKX5lS&6-I z0A`sqeQ~WtL_~sJa_+Gy0xLPky|6#R&tbQ`uT$ivD&DZC)3kmPapA+&L=6O#4sQIB zZut`}xXv2s5vbMihrW-zq2~JmjPaWIxTaiUnsu2YTaJD;dRuFIlY;Lr)bC7J>nB%*?u2?= zuY(SB!w+Cf9szbjTS1#y^i5*_djlAsez`lOt^rXglfz-z!|*sVGDC@ErY}g^aX^>Y zzcp}S-9;2T)L`4&l}kGfo2k3p+rx;FvFyMwu786UVT>|Oly6I&FQDu40A-Sl6sP6i z8sz~b8={rkTz)9Bfv=@=4|6dZ%q*mmNL&7tRw2^M?k997gf%3_1~hk~H+xV^cve2g z#f-^1Qh(0&htk8tBer{QgX79nA)Etf*!h^{&3+_{k>S3_yR&sg;f{3*_IvzOtBY@e z)6LrpI1)c7Xn%o z(0Ve1Kk)aWQ>Jgc==m=oNQkrHieQ+aO-x2p9=4`RFK(%lVdf(VcD+49cMdHr;ZOv@ zOd)OjKR8Ts_loD$uk8um7UPtk-Ih5I&`fs;Sv5#7A(rl>yPk|ekAM?Wcd+MS2%0Ix z6Bz%(_nYRp9z@^*+~If@ruF>($C+;6lA9pH{a%lN20w(R18wsf3>K8GcT*4rjHKW; zjHWlSDp$4*XyP>?UbmC#v!~)iBNSA5&=#Qyy+m37Wm4cqGe@i$4FxIiFXtb%qaMpqa_F^mPKLffvox~F2mvRN*y0AWf^Of>JsL)V6AF3b(wK%m@vr`IgX7iiz@Cj#}NsG-Yg9MVrCw${a6+kf!)4KEZ!pRO-CWD z$93Qb<8Q@>%2yaUsS7l(Q?`NV4xTTBJWvt>j`{MtWouL}`CZ5IhQ8El2W1;!LeYA@HdiGKeOa+lnF0xu}HyuwgyCAQ6DeCX7*b zMbb!6hVh%5n&-1He&Jzkql=`GiN+Pz0ts%nru@Q7X;SwzEW1F~-&x*oLC|r}#V&|& zQVXw}R9c(SuGJ$&z&as(6U&y$tJUkb0X+YMDlYYrV@z1fsLkZpzO&#_eU$QBsqfw9 zW?)FdItMX4r5ysD3#$jjU@}K?&y86>{qtaGf z#&L=h^Nyb{?!C#$-Ol`G+;q!PxydH^>eIdO;Wi(2?@4Zxhs)0xZ`Ge?u(y|ON>ZwA z<}J%KZv}W|M7blOgZQ#nz+U}0GsdKuWvQRWge5Xd3-UIA_#BDm=}D&=_ze>*NLOXw z=-5I!o&yI5zwMJ&x78Nju_I&4BchGH{a((};)Ef`FXNY-_6l;q8~GZz*e{gm-jC_~ z-QBp|0##FDy^O(Myiq?h{bt&sspMuUk~hR|`X_hr45U!7gdNUPvDL5&ZN~{B|L#>! zl6l}D4l&qo(PLxWR-teIqsc+T4})71Sv0qHyd+U(fD~I}vW!#_55Y1q&35}0gn_fC zA0|nL!*!QXaVwE?#enVOu7#>$OUViU5PF9y3gN^6UC9W6uUAhKHcw|(o53S1i5)AgU6jTrT{APkC`(3> zC?`$AoF68g0_CJxq>IAJ7B0&Uk4+q=fREiJ7BC1oEF1`3WHDQlqJpzZr31%4$H z;RVv;W-T8C)#JqkC$xjvA7Tv4P5^UCGhmB+lgXC`80#5(Coq6ep^5Sxs#X%m<+}5^ zto6^YwEC<86{ssb>DLF{M= ze+e)@(6I))!P_%#2To89bnR2~!7XcWGF`4v9M;;}yYJ}dVrXz<@Uwj{HBgyWg7VBy zT;^1=S6+oX3HxRJ<-a2Go$Rk%&APHxLArtA?2Di?aev;l8Ua~W_&RA%4+atCE_~pu zpFVyH%SP~kG937H5Kx!bws!zO)D$-oDLXSi3n%Q&z}P(6ONkW)I%F1@7F6rdq%%KA zRozvRDn6tZvj0SNwS~MDVTlFy&vZ`NPmN9bU_OtJHT#!GHmn<$soE4wPSiSo7wg{3 zU#T65SV99z37J&)z<^KK4d^x`?g@mOIz~-1F2+uZE<#ACYG3_jf>wNvfKoq{kYB0&1Pa2E`sxpO&+QY+i=~mMPvMU+i*5#>&Ytohem(^O_9j& zpo2mq`WBb@x@)TXfc%|26p;q|C;ey{B~|Pjr=_L+RpPpH*bXIQUy_|lbR&Vz(pxSy}|x}Z;+Dm`(=>sG3Y+&G9=;F^bf*zIs6HZ z+f?&4$l$X5%IQYzqc|z#f(AGQ+oYJAH50pDNP=1cYi!%g<<9cW8>%;EfC%n=1chKm zsYYVNlEr_!Pi&gVh9-5E?$G#hSly%@A{Y9GywmjOX6cT8V^l3kZWLxY1nU*p>r1)jAY8dur;X*;~` z1Oc`;9m}CQ13KQod2Zl;q~LCM30h={R*<}Qf{F`k*A)@j3oxQo-U#R(e}AZqqQV8R zb3`xQpI?6ZLkkbgA`(6W<4=R%U)3G1Ts1!8Wr$E_?ob+0-d0 z&}}*=p&o4&OrtrR7+@b|a3f7KZ|ryTr{*S-bN*$SNdU((vgu-yi|hjeo(l5*`nxH& zguQDh7+F)jCrV(TjrJMn{6}ZIvtGx*J~I<`P}7(;Ttj6xJ@LvdqssHdW^~B^XHC@T zy&Oxaw%NFN%~L6QNGFs(YCVL;z6>?zEoJTpr>H;uYYX=)z67=r18uvDIgmp9KJKVb zJ)V9Nq4N(Fr)cuUYZAFIwOP;$<|URL0JA+64!MTn(j>H`dse1fJ-}PtZ|7t4Z&?Q0 zM2#2SKLw-N8?yk9TpfNKbc^pUy7HreNAJc3c=1@dsL`~Lj48mZDaFCTVc9!yMqDuV zsS6!`H}%7kMrNaCP@<=&=i$S5)ooe~HpkddzD0-MpH;5@TzbhGH9ymTrEs0q@8{k& z$Ehm&-#PU}QSpznva`qDGd=DD796F5nk`Orfa10mp`J}OP z4_gO;M6TKLtlPXGTL6R4alDgl7|G{1-Vw~GGh$*?ZGKFQKtDV@Y^(ztlZc>k;jHOl z*L?h8*E=v7Qbg6VsRyn-h3TD#kLg+_aj-cgKh}14#Zon7X&Dw zhB~eHUFJO2lMvS^J}}C@fYj9}f5Z>m0^ZygiTBl=EuaXnb36|fut||IRo0^xqaXu6 za^0I#_ju8-yIJntbDC^kq2HhKlAkK}uy$!a;3Q~g>Aq0np!)*>Q-?x% zu0Zy+xqH7IcVs*JZd83dn8L^kVBe4tH+{h=7*iYkH(OUNg0+GUFIs({DX6K1gt1HF z_}*iS0dp`-4TiPO6LX-s-h=$wfulH=2`rpfT<$@_ZBBq17XPiXO|MFjcFdLUwhVu6 z%_xEmCVWy+4eOU+D8TndaYe+U8N!?LIe zRvR0ee>30*-WOhf_dNM`$}$pgE}`NL23BHgHM?X*Zv<_|x~aiz5H`j+`pGGRP;D|2 zD}`7(cLBuy#*IT7Owjr_s{`N>9N_M}dhL^Q^Hf2_N&s6+o4I+R<--@W=^2WwqksJ>Bt-wgLP`4M8wIcs?g+J1$=(9@pLgP~?S#=P}>Z zKCrU>oQe_Skvv>Tsd1lrbE~<;wjHo4^}3sA`4Vi)kousUkr92ThKQFgnF0!;TBG2z zmlc0#fiui<*V4k`_7#|{{0NG`TR@abHJCYH9T2XOz#hGg@099?G0r@4SyTIQe|_c{ z9f3fcYm+_7*eygn29>dD3bD*`RO(xkJt}%+a$1_GEZ0~^KYq4K^b(yjIbu04&=hzC z^uXqAD|xrg*Q2J|lpun4?RQ&$iY#U6>tlu=0T0Fh;pw~Msr=vn&pFny_sZUf6hgLx zY}pk`hzJ!zh;Xbj3LzD;DjE`!QTE6zN?F+>l)d-)UU%=$@AtRI!#U@^U*o!->-q@t z{Y$6r(5%$5Xqg)#EjRq*zo7}iKKMM-tQrw8vPIwLQV8*Zb6rKtV1;n9ef>D%m#H+R z(|{YKb0JCN2LG?xD_xl`j~SCOuecpt>VUQSyk()8>34Uii_v-B%A7pp(ZX&+?YWdD zBxr;ZuQGptW}st0%elgPj$4FS3RUu-xYXjIxn;dijvrZ0410p+YfqVNxAA?K`c)?0 zu$9g;$GX2TR0Km7#S9)KdA~sOVc-4E9xs7$j|rC$0HElfVDA!LWrl z!wi5?cM7q!8Jn7#egv<)1)OE)62Wt|4Sy*$Ap8?B;>KIveZ@Nt+m(X4%d_y);>X8+ zH1}95wh;eO-VOS;pwZy1r)^VWcTBf5Nz3t_;D_|3ipT{ti6oPNy6s`xl&QN5C=l&%_rzM6SD{p3OxL}h$) zJn(pNU0Qb0NcL)9Arjay7i<1(x=mt#Y%r>0618wS3Ql>{qQX-M47D`6Ob$<~Nk#Emy-d&5B-mL$P z?r=W}B>!ORIo#7&X{XQkZswA5i=12Pf>QYX2N&ZxuCob2L;%oA7HjrAdXiCFhY&Ad z+@fBEO4opADM<3xaUo!0{_~;Af+@}A1LsT~DYP}Ok zn_iip$Ob4PPmG|t?!V<~PU zMw)yL6SR^HZQMA$DhL=#Wz=DaQ)8#P&kL8Khew zJ4&d>WBomXw4Bib6cnGiR1gWds&we#zTEq49AzZf)0tf062C7mju|GBZ)$03hB-xj zt(wUUN^*@bI$>KyxIirX>t3ipF9#WUHdJ zHHL_1Fw)K4>{WE3lh#Cdkg`Fde1YNRVbTN=Sx#=S#Ji`+?i7*(fn~rC1$>G$9J!V3 z194_M-zB$Wa45cC3i)lLyqnOHPLFss(iU1_81~DDyyJA}NVJHc!8+L(-~lXAPb7sv z0?JP^aA+?@ebu%KbC<{Ou};usQu$bv{2t<~zEvoNqy<g32uqbwH z4o;?_q@dwDw4VzFjM;LVOKEE+0i<8GsS&XjhW|TauQ~mRH5;g1EFhiQ$vc`jpCDWS z^^%OE!MiloTi(1+=ZDDe2QqA~4~m5l8>pqM0Y{XLxebl=fI__|WX_1Lyt{tETksh3 z+Kfy}r2lAepZicn@kWm+-sbIv@{^dfRW&ViP2DbWlz3R~`CMi(l;y#t#ygxZ8pCFw zm-Nv^*T3_8pS3tAT`$|-ALn{cfU%)(+-X{wEEUCii}Op z&(EKOD6Zh8aO&gIHuD~Y5|v1a@GM=GgS{<mAoOoLfLc2977T%2Klk;_qm}9rO zOaJPaJ=1n5PG&~T&Igg@Qh@xDJd-q&K~2#!{Ax)bBUmigkj{}mdVwtib$D#zTFzc_+6%6P7>ME_eI)6Y1+Piqi<`M{DlI#D;KPRoCAGnJGw zIP3Om%+1OB3X7J?%Mxa4b>so3IfV9srG7%L2_V8j&7`;?6crX=cTwtc+S~ZcZZ>i! zw@LQjHPqJ8Asc*MXN*+%G?;j5t^8DU^p$x@PeIW{XTwziK|U0Wb%4?nUzF;h4Yykh z@$lsD*NHY}t*Vu5p)dU%D5kF;$<`d_*Umge*NEgvEcTFMb;2*#LJ6OK??Cd?WY(kr zE=H<$|NA z_%KhOt7SLE@5M_W!Xaeb8Cpj`|5m@alaZsYk;|K^ZXDFgm94e}CDUd{rxayo=%8Ev z!u!Kpc*lbwJ-_q~=^)iXD`GWVva6Q}g5c#B5bTJuk!M8eI`JQxGsb&3?q6gn+>x(Xtt3?j*P zNkxH&m-*_?RXo|Lc&RzCmx^*0-GuEVRq}}S#hHI~DT?uX#T*y=2zB)J)$-<(bdDhe z>z>nse8E-9#zN`d|m)8dp{aA8(d-oI6W;SwenOc!#k?>Oxt;EkFW6 zdn^}9gm{^Sqm?9g_Lo(~C?GH;QsGMouInnKgS7E2(+F&1y7XXaZB?#AypJQ$$$FnR zObx~^`VTuR(~&myzc1Ljl7(5Yk@3< zP*5OQ@Po_in^2L0=ZLLixu!kC41yDQOI3`8gE)-swn$6pWfPOH>Ch~04|ocy<6XP6 zg$>skl3-KIvy}<8zQUl|cc5Fi;z1G{F8d;38_%XX9TJJbkvv!JwqNF0_BY|dkCUqk z1PJL1--dE)D`-i>?OSeCa%aC3$X&;l@8>pgAv+co zL;JTcVi{x8Ax|SinDNd|#SlqYWHoS0LVWD|kke6gv0z7i^<%Y;z+g7j+X;mkuf@{1Y$rK8X59R3P^(8~|apgrpj9+1yIlS34IH z%vfR%nL|A1fpf5$lCAm%kyx*j#Z1cvOD|>TIDY{)ZnT?M?6XM&PxsG+Orpu#>Pa3i zWt2rj^iR{j_L(y{rbCS-)WqJ8HReqRp$81h*zF6NW=z15nQA?Gurx+$On$~tB}%A- zMThbzobl@CBK4^mPjAIYk2py^ipCD2SN&Vszf>bm%nKEN(t)>G8}gr08%?Rb_{n$f zI~9;nJ+c@{8#cm-Xf|=Wn%R*dY`~72`We;=bXwq~eQfWIFa2 zv5S1~=`sFmmqcz(GZpZ~sfNEMbm2o^njwkdz8SykJ>iDIdrYEI0*MkBdozP&Nb;F_ zd+}3Q2@bxATn4Z!d?QxBz=lwj@~Y%GZpyo0eMwz5ApC?MNovE2xtx9{rWRy`=`8@<& zM&jxI>LCA*C(7QR5{$KwKwuTY#`l6v34mjquhZFG^*@98!F%Ge{-qniERXS_Aw*zy z<)71Z+bN@9$Lo{tL&tL(S7$(@J?6Bc;t?{m9q&Cxk7GdaHa8A!M11jRP*9R(q2li z1CG^n*x?C&bfUJZo<1~!fmt6+=CfAo+<)$Kl_&fn0-JMkhn)SQ?*jww^+;juG~$@~ z@-<}^6LLCk*EE(G%vk8F@Z2U&IM8DEq+Lp}S!G;CrLW)+6AZLn}68)>KwPY>7GoD~TB-OlTnk*jg_~9w$C{U|#N}V{XWf z{MU|c0K040(B-<3tD&-fLeW)SiiQU!%5%a&%_={B1x=1c(4V9XH(^&lao9%T#X{bI z-r1?4;Fu6`$mM%`I|w2k0elO#i^6yBQ;_lZr`8^Rhg6>i)Xk~izoL%DT6{#RP20~^ zx7Peb#KiDoT7?^+TE>_N)3DsiDt0`Wk!2sXTaBIR3^mP&4~0lJ`K>v6g4TG&{*yz0 zz`l0ox4KyHfi(Z%`S~KL$17d)VP5h?ak?admGiATO1H=A!XCuP(m5skd})~6B#7IvE4mjzX_sYbEM z|MKZ?4V@gDZq6$imr}^`Fq=yd6Eb>>#FXTn>D;B~IrZO)TX@sOT9O5`#@P_ymKM2a zNEvc&6kf}Z6EVdf5Zc%-m)qGr3mP|Ua(#(oyyZt#8XLm(Tx-(Pl zQ&S|qiv04O^Lu6`F)B!v}24HI)Up=Gm#B+!O0N40a(uduPcNCACgt~QEs zf2(zorkI;g(w35gX|=?wD{fy!T3oe7!yVi{iHm8RD+ zy$DihV|n!3+bi5-tN6Y7_Xi=N4b*a6e@4{42bv3{oV2*p5B;y2_q|}}HV|i~C?d5{ z3<^rIQD|`8%F`Gdd zxXH6*-y&loa;IA740nInK|S;@wbT)^GCZXKc(Nj$*V(kNE=vEEF<9omV~40G zSg-zgd1-fsWHR(Axdy@83yyyqhy#&-5dtVdF&||HAZ-m*`OmItlN1mE`!d4HwLC5>NpPKvVZc{i6}r*cQ3U=NYX3PWMU%l$}ICM0b~abxFi?_1f1 ztmk#W6Wzi$^PA1ewf4eJ3=&ah@Uw=jw3Q?XH=T3fe{lx<5xEsv`P*VZiFx}-(L_uC zwE&6E5Zkfyq)&f-eO}v0r_$+r(AXfhDb?b7=WuKjAuNpb3H_n`5rnE@08QR64RKbB z1cGs`<+kV@?zY1x_wL<$q{A5J!Iqn=jYVGNwC~^E>*pb}gS^s!^Lzz|a07mdNW>Ch zi`zgmQR3F!^TtZba>Tz)>5@?fNQfB9IixGpdk4 z22|zLR21y(u5a3HA+K|rM8d92;9{B1!YyLe4FK-a)Ngq~R4C+KHh*u>3wMHq(1+qO z+^PXZBJa2?E~+#HH{PLjiKfRSYpbnd7YX7mW&Xn9e zE`_hRd6lewuSxgMg4JTK1YTHiE{pB43lXR2l&0Q5qTxa*(bjwdgOmx}iBFywuz%!n z47RhZU^-y{zi~q?r-j~?MtdoQ^f$uNrJ$5&)WB?YiTMyu+<#9gqWxxv9swMG2fuRl z3gkw`qAcmVRM$@TjDS7q^TR2XN;7q$C;Zxh651n>(RfMsd2R(a@@cot_l&*GKaLxcln5ARYCifb#{iua$sCU_-+#N`06 z-ri_Np#qSj{d)5t!Yu-9oCR)*+Ubs--Q3XwSYeSQ3W4(EY1PsZu-3c+$6-|oC{Uj{ zzZnGgkbNqA>hPhg&J9)|{8JP)N$0BtD~JqnYd<0GhI~EL|Hn)74M=fYJZ)fbsdIS_ z&~97>5_G9|%4u<^@?R9O=sF`&OqjuhgSE3WY$A{GPO{B=7aOQlPtwL0tsjIr390hW z^eY24yz^-l$&6uF>e`A<`XH*N7X0yAOY6CBhs-)R$dJ=FL)vqs%61@FJp9EL0Q2V6 zUOyECecjvq>^(e=M?@7u5Tc6`={ew4lV6U~KLkwkJnXjIn*cTSRJ6+d$&vS}sQXk` zBp^zAXEGpI^RNNQuLRm}_=uACWwS4_+DfwTnUMQXb}}2DtT_C9Zh@J@;DM8|Oq=WQ zAnAIg!zRd)Vn;C-Qjlh%%{mb!@9<`l)#rGgbisz-ER{PCu$f1vmy)8dWFgrW`cB1n zs8W@RL++p%w^~F-p6Sv5eU_jO0KW1%TXwbdlkEqQqNn5}n8?~nB{uKvQBYG+pL*b$ z-gz}v(Cn<;qot)s5HNTk5j(&L@U_v0tU{c*o)6%n@zx)G-FR(g1hq{78{YT?h4^UK zsEMlv>Fsw_RaNEM%l2o$<*Dquzy$;ZV=nf(%d-F6_vXLXh#GKb%53d;7R} zd#}!|1|JF}oc-HhJQ=tXarz;CTisQ=Bx`|Fz zD%|lp)tMC=1^47)x(CN~Gji8gr%mrb9=4pRiAl(LmddWnT#k4hbHO`EC4M(L`>`aZ ztiZbP{q$xF1&?pHgW+zgmQyxi{) zTDM^ONNZv}S2gOxH5m?^k}8BYEMvXwf;zrSDixN)w#|2nei)sj1fQdagpr#-ol(dz zPRzhk9TLxJjKwv(4o!(T7xt7r%2T%fnNvFJJWC%w5_1sLaAO}b6Gcb)Q+lgu7y|)w zDnJZ@(z+F6+|n7?j?nGp@lE&n@lQfsVMF(THIluMa}mh-gzG(dUv}YuJ(seypa4t| z6WhNxO2EE8?#QTq^qh=AX!(x<8(E!#Q%+GtuzTjo+{ep#jtpUmz=!r94SNsqeUpb` zmkJd*G9w=Gvt&5YUb-@hL}cKc3l zB*nkNAe!JV`pa3c;5WpzhhBhG-S?1<{8S6WIei=OX~h@Lc{_B;+xua>D5UP;ER2w* zxdZ+0k#X_fSJmG9*na4|(%I_kwJuy@$?%dxO(?dm*KYJ)FxIV+ZRr1!JvQ#l*jYuc z#2z$o)Ue`Tu|RrrTu`+u^?LEpMUh_-tP*DwcYzl?omWgV{JUs^@t#Jxvio$tshC(d zei_BE76KjZJS*`M1Ko{V5;V8#WhThrY2)V~)@iyjKg%EXz>Nu1g2VJJ;3Sr4%?U?U zg4JCKGK!tAdvO!2gSO89>@_+!D1m8ub*y1Wq_P_?^eabhss4QJSUB}8?uukzE`KK% zxz0iJ)ukE@oTPP8ov^NVRq0mq>J>Xp z)uL+yCzw6lhChB_Cg&9TrDcxs;FWQVw13La+WfB(Fv3~pb)FL3Hr23}*(R@#>Rx3X zZDH0(=Cj>P`LJ_g($s>d_;;Uu{tE)J3VuW{h$8mgw~Qvayvf4nRO*5lFk|xJ=y%xT zLHqPZq!<183BlB9`+*F`3NXd>&ORx|Tcy zCjIRhFj(u0CTP}tq5`Hhzr9Qjq6wb^muyuGH~T)gTXkY&Dtx8|4;2+Emwx=Az}&db zLhiD<7bnC}EPYTfz7PQ*$a#cNYV<)6ds&8AVB%ykd@tYU*Q%3FqBYzcs7nt#U0m|q z!nMPvAg0LG@L(il?|QN@r&M9+SDu*_a9*z~qhd1Ah`l8Vr?3NLWUkQEQSbOHBw)Mt zn>y_CQ?MD7W16>OY@42_rAK}+ylp4>sX=U;vLUNUJ(A+XmS63yEC-vy3*}!s2Z4s2 zG%AgsYj63h!r#Aw>1Jh^Mv)P0b}N>iP>eM#8F15-#`AfSFX=T3hLW@ANFqMX&(}ky zA6ljDkY*&q4aeb0789AXt`^NUbs1b$jip|B#mQ2Lfb6uG<|_A;EuUc4ip~!2A$-LY zCUbg1ZWDRnRxK_(Rx=R5#j{q10oy0!vAxek>~qO6t3A zBM}y38Xj8N(l&`}V+q}&Hu2g9?aX|EvpEMJxoeQblN%}}i z2s-V*Z9ZZFw6kn4$Wd#NeVTg@dl&{Md&>4xQT9Dd(ogrk!s{mvkYr{*O`+IGaUSZ@ z&qToRR_9*lXGrzm+Xssqr<4Z&*uy$5Eu|c(qEt%FvDN$^^v(5Xg^- zX9-LS|7JE|)kDdN-JSUmH=O5>zaJDUlrk5BC^_ohqaTxK@P$oi2#oJPXo~L03b*Y_NAMs5Mn zJ@X)7=JelZ=Co8OO8XJ_1ClVs!$g6oh$+{8OQwo>1AbxM5CGoTRO-7%c}bczGn5&k zqk2Z`xKad@2+_HXynkzPXHH4llr-HgO!DS(q#a>QVxLxETEB+T!mkehG&M3>TR36P zLXXrqSbp}^L&p`o;DywoV1t6vOR(465V|gDs5X?y(j}~ByLtJi)7v{FL%*>%-8YOR zem)zbld3ZidwRKjCUy-IAW9@7Ve{ZeGOv5@(B4zqrmw*dJ7-iNv zlESc?c5jwVKSO(E?RWDsdm7mT3jXwySc`wVl2QtybJ?!WlT>opOUBl9_t^y1sSEqvcO!c6j|F4AhV>}OAF zAxT^-1MVW9^-$tgXx_&#ZM=j?Y{ZPk1A@x%LN5_$?R(#ELa+hp(|t;?7)wIH&#=(w z@F=7#q(DeukTr4i6}6RoNG}ZM`sGQXskn$H zeEu(9J5;3Di?B>m_v)aCzHHTQzGcHPwwa7^o?8(3PyiHp2i8|~XD5xWb@bbC;!K6w z3Vrh*U_IqXLbc8wzP5UoDVzlXa;j+*+1vM#&lml#%p_KUDs~3Z;26OA-sspD&Y|7H zU$<|heBmj){ZKBo9CREm2^|@`Yfz~#K3YkT=aH~pKSQ!jax6AxNp^M?gk;ifH*l!K zQnEupWjmiYI$Xf&F;~fU8YzP0Y2o2m4h1P?cKB8krOpZ@-@r%v&G+AUKCj!MGhEAC zgJDxV?jX6TU-3pqT&CFf$OKE&V|>8*_NJs)yxFOv^>c^p5^`HB6h~0zN*YyJG$BdM zTqm!&;?JvQ7!`z;%szRsLAcOW0$DE`HH>XA@VEWHCNv4Qy9clB&g*aleYE!rXxzeY-s2WAx|_EI$;bb zOS%Ix=iiWwA>+d`w0J0%!}N|inX)lve{mHc+O$D`))(6UKF16aK}SliO0sWEST0sC zLpk&$_=fz_IAI9GLbJP}LPf!_m;dmZxfvDCz$fWP11knd@V*)a{WDF|$o*%7_#Mra zXU)f?Xfy?XFuIF1>o=MSRvm5O4Z3EQOc(sE#M#J_ywyt_f_`u3A`cN=T%{btAXPN; zVUH~4MpHOr!-HsIkd_wDbcpb}Kz|sycC-Apz&%YVa0*XRMGhMA#j%@4F#9b>_Fb`+ zI>3rTCXN>U)U}cff)~k2p>I!6TZ!Z&s*^fJro+}mo`Hh`mM{;`R6bI||ZA+Frvx@iQ^y!3; z^Wkpm+U}VcjNgYa@u&~u$zlO! z`m-rM7SU)%UkLwQJz5%)+p;hzA!X{i;8Q7muV)J$23p6N%)}DpO@0R((E4G` z9bQe=Y?WK7kpyxy8(C?Z2AGzNiEji=#E5YuT*H^(BgOTPNVer>LB>#<`Pka_ucQ2I z(gO^hhWyU=>jjrA?fe$wqi}@??nRjdZ{S9;8oR>DwyR-9zH=7u6Lh{PdrZJ|oV4n9 zO6bhQ0)5U)2Fq#pl#dryF^qp5U=|y|V=sVeCtVTD77hsH93syOJER7#AwD+g zJG3y@S2Jt$G$dmG9i7661Lqw~MCzM|oZ;#Tyzuz=xfY3dGU1u=@A=F*?^IC~j$4N* z(*nz}Z$_^?Ron(WEd+#&-OP5cx6;L1u7hyzjf29KL(6Hx32janIhgP9Mxwoka`U3j zN(^#D3JcELB~b@iNITgY)Wv<6{^PqXWZu=+gpb@sR9mBKw5dTi+7iEZ?jqXe?J7D7Rts~xLa6mwgqZ7T>-B=Vap(~ZbHFy9w=v=Vw_161)v(&TXE15)utxIS|AfT3>iR~i&ycT?GAS+ z2+ik=SF4fFlUB(3EO$m2kh%Uhdz07i5Tr6j&^a2`7%2mDvvcbE%cqis^(Xlh-UIAl zIl*BpVO4nAj%qry-rvK5i5zLqHGrzS8~fs{Licz4U6^~qMXk_XgB~X>S8wwR5Q>NV zRAfxY=cAfWGR0IA+{r@gzwjA6c5jt2Pm5+6JNMXF%x$Y5MYYC=<74j$9CM7Be}R~Usy-!OIJt7+EcezNa$NE6UtHEUg(@h1Snd_ zME1dH%9l*b*S1m{Hs&j!-5=}iq>2KiMS?lQ7+5(@28B|#oH=Dkw{p5$wyxgbWdvYr z6t;ex$6OuOfrm;f>j*fTOFQxaYVYTH&!68bdBpO<8jemDJSR|CO2tL-wGb5+9(zC% z{I~dZBcm8SSs=1{d%dFz^j>`$;_pDE84}SLV??=dWIVl zNnsqQ?7w&o@#MP*JvheDFpl<06H@!_HNp?O33TOQMT-M|>XU}Yy1yx_esv7Sf z?lg7V_{oXpq5M$7g^NVG$YYNUIXXync7j(XcRwv>{_i_ecx%?`Np|ak`I`3pt}J8x zYMK812wKuS1`MVQ7a(@Ldfj5r&LQ#{Rh^sAXCw?VfA z>c88U2?m_;aS}<2@0|+!ERB^{Xezq#(=v+CF?b;r|6#L!%tn(zqLan?gZo2DW3$&B z^j_-E0Ib4~M0^ID%(*)te${aTf12eS7-3IG5P`Ow!y@=Uqt#5gq68X>I zqp7Q_I}97kr+HT@MDA&pS>soROzRdRPlgRCOth#TP${_h>7=WX`j0<%cGhOnWg4)S zyG$9kSKA8T?fCQK!}jA{X%EHGLkzHa)sb`Jw$ItSbUYFu(v^H3CmwU%gcw*phC_9v z9+Taeq^lPuDn))DCA^Nf;8}gsJ_J*^ZtZ78!=fslViLIaQkz+&DUzJMzCCE^<^Z@+z z5K55>waHps%DM03#lb;UOU2KCIsfFWcQOyAIAtMwx0ye6whgJavGSYraz8XRq#JsT z73H@oM$pc6S(U^Q4F`%r3W7ldqMMV4^n>K;kY1ZBPuM=DFqbHe5CRC3w0eAzW{e_V z*B>J+urbI0n~|G3;1V>ntPmUS;WAQN&B6o_sX|+*2M2mS=HiL6cXMCAzcBiu&ao`0 zcr5Z@9LUkKuXy6^ zLB0}@z^mr2%;t@Am_A|t4%)xX*q}Ng&Cds5?YLHOJ#T>w!sXQVjT+|uhPLqdKQ4^+ z{o+)TJF{~m5FPMaw1Q`XSnNlPu+)^f)-UZ}ZhXcOQQlaPIuc7h*=-)CzgPDfoP*1( zcYc`EW)BeZA~*BXt7&*ll_Kt#F!>_&?;X>}()EbGs&hwi@}6wf<`*#qbd)xWOi=Sd z;uL2GWdhw-Niy@o&8&q2+&|HEY$A||=N?L&RfcI+f)z1%oo&bf?;N4sfTvAa7Z?m7 zW%CcmAjL1D%Y<;c?GsGcGJcX{oljwXkl8KI2;^@FX>o(`dn&N<$WdtgyZ$EXVJumt zt6eBiEUb}l>_R~=`T2yO(Lty=cMj{HDSX#TbtZr7inJ>9W_iW*=Ryr~SkDu^zlJ~k z$Z;Ke)$Gq)Y6h87SCICDn^p}m|E3DC&;#Mt()-GCCL3Jss*-J?O~gl%HjaOY2JSvW zCXS9T7yW*3vqvqrAgO_BpzQlRfrsXDQ{>e{Z8)b+UmXr0*pj8Nmfw?L(-GDw+jh&% zZX$)N$T{?L!V!51aob{B$y1~eJ$`-nyS>D?+bLO5naB5#?DCJ`A~6mhe=OsKSq#%? zZK8d9^B_!}-b0J!!S<`HGmZ%Q>nOzbrxIw7*%P2}4-)Z3+$*px-a`7m^}BJifL0-m zG3H4kgwz*6BX;BkssrEO#V19DQf%}0aDb===e5<<38(NRCRt=bg?$Vy4sU5!$7kG_ z0p0FE`4BZ#ySW~Z^C)#D+|lVSdcb=W--KX}^p)!M4gd3W6jVPc$1{#|7__c=S*Bm9 zvD{H3x{aP?d57$*1_16%jsn&v<9Kj)fk?VYgrl@_@L-7{o-QhYF{5w%>Km?_o#UVfDwHLVy&@{$N%qSoHbfqb;35&)%l_QTzOL3i z>xhDN)8j2s$`F^lj}md*-(Klu)Z?z_aCTya@MaDv{i1ACz?s=I)bfs{z_&2pvkJPSr0(b!gJL2gFRm);9tLXB_yIMcDOT5vNm>j? z`>(-THcsXDUPQw63!trF{p+3g3`UC`6d)WGOl1hE zGeoITMZaS<@j8kN0-v14z%e=3ZhrfkWU2X2u@gv=Z=?=s=!HssI#x96CPDn>vKI*d z(}SxtCZ6IGr}0q!SdK0o9XahNFhjWiStG2BOZ0taQMix#FgBJqi`lvP*pJs|>#}H#LSUFxURfwK?Y)ox#jHQvHpk0Ty-w z6I1cwyZP>%Q!l()4#Un>(4b?RuIe2ru%6f)nT5`0Zf>b#+MWrA7VfA9IhL;e4#_P_ z8dmS4ARPMi*HCSkCEjcZgi?kL0_Q?G86ESpe7_qo?i_@!=v-QSm>$?jq4mujwTjVS z{|kdnVY(=mm~-lGTEPxIe!tspgO-Y7It6TXMOH&(qie`8!%-i4?-5)_bo5;#aUR%P z!rTD-;h#e_HH~S5{D$@sl>aT&i6@^3%lR)n!SV3rz)NFdOgulskyLq{kfedGYw&x6 zA@~dSt5ZDCN~suzY;9pQxn0n!e-rU2n*k|(lC1s=ILx05FN(CDa8aQ|Zst_9J5jD2 zK=<%VnAD<$FUF4C`b*U!%(U@51_T`#whZUNct$bl;m?H)Rk(?ctg2E?W9m+~ez#&+ zJezRJ00*9@pJiH6RL11=yxfd)_oTCZE~<*60=4cFWm>qIzp35<`SRqT*kvuzYAMBc zIIC+OBvD;aUt*JV&}tR1N(1j(#p;A|8#YLT)IVgYJZ8D;{*SR#V8x#VSA8ZvqvTCO zG6{uAPRQ0h^78yu_I5xD#*EDmlmDdkXfVD=$qM<(gd}O8DY7HxbwN3&>`3;@r1HG# zJ(M5G)DbgILSK_rGXHOuP`Od7*rfSIIOqPVhCv&J`n%oW@&|yUyzg zNUH{pj^Aa{h~8q*kaHU>ef1OQC`;Bl)QgGibpB)hV5+bW64`{IaB0VeBA#nG154-( zlO|t7aq=k+RNfR&93Bt82%NgZ(w!n|F_!CsGg1A5@*+v${J!e{yYq=|YtXY( z6x@obZ}LdKlXH;O85>dt(71SS35$s2Azz0SW};qcFVqD=tjjqO%Q=?cEDi%7Zz*S|C;Chm_DB9V zJVy-%2t5Klnyl3K58n`LAESv!97PM)J)+3?63~I=hlhKfK_3z&&c1$Z7M6aOq>@a_ z92R@p{nsqWj(p|PnkeviGQaF<-|>ms4G^5Z*~6cfw!ND{mGU|_yVd--we1HDx%!_b zl-a*_Q7Bn;i#Mbc zIVnJp9)SR+I_5md)orN$79RF%b=^fKGJFId-rMrgkY9E;X|K;$=W-K}U*Zhz?x#9t z&o|&{OvpPST8|GPp9qd27|xolnc9qj@2kvyjqk*w8}_Z~YCol16JkDYJ+dB8e401leaMi&#Jw%)2tGM1^`u!GC*s81ZIKot38QXLcc} z(Cj|Zij^W8=ld)+NgDv*&Vrs3^~}rcYz-re6i2wS#UCQ`;?l5*)cT@AoD$!=Gsv$d zdfYVJ9=q*$5g8u1SGm7q!uYY+gj9GZLAwq*>GO#Ht1S-6Jw6rZXbgqZW-Af>#qeyb z4ickL0#Z?~X72*OdNTI@qYo$^$sa%tdAJC5rX6H4xnfJ*e@eg*xYngk?z_n^^>t9s z!o-ZzrhJObIc7hsqp~WeX5o*G!maVwI(HvRnN?VNUA!1UuU~EJnEwIS)ftO#1An zc8)PY02+)gHqsT3KDl~WahN=1O?M2ipabMhv%=(?1dVx4Xzp);+$qjonzw`A-*@=q zpzpCH#U1W5q#6J^-#fw3F+y!(f(g&sAp>-*4B=XF?v}G&z)huXxN6!sLNw^= zRQapnSO2|Es;2KswNRX@Af#Y*MU>m;)$c}90|~lpk&NL6Mkpcr1~&BH6w+RhRM(PL zxkf}8yM|BVv^+rFZ0ixtv|KrV+y;biZS>Kiz|*>9I94_U#g^cq8NSg4rQC&%#XK|# z`5AZ6Hx3{mnecrePQD;xC8@JmG&x95iB>S(%8;gB@vB>7`Wpxl8hC-+1)*a%xK1B z&)>D~Id+-dis!mEgPa-+(51pLuT8#KqersqN z2?ZDZGgQTO%(GzCsGgi_Qvt@55&K!~_gzX{!OHBWU0Ul>@XwQLn?i@^queX?)s8lt zuqlf#d77A(7FepfUx7oDl~fUxjN^5mA{g^F9+nPG# zrI0<)cqymjH^Wuc&y*d#+>u24ck)_^&{@Ct*mxx<+s zbN5Go3bP_FMc)CAinDshX)K$*n@(ueH<#js%X2ugvDqxq(zSL4BMI6SSsjxwO30JH zTqnR1-^ybA;hgOXLl zE??FGjBh7=8g*I1(W^w!KW!iOM+?nzvlNsSgUc_SR;fGVI16NV5_v z69XrjK0I+RbM9cXbkT8bm6S?++fS zE}s`O)Gfqe?K>m>T;m*aFqORhlkKy2wKfyBVwO9Dx6MYVi;C6lb*kDV^Ol}ltD4wjm#_oWP z3o`JT2wHW`=SbDnw%*1a|Jb?Q#vq=$*;^HhL*SwtjNu2ztzVFh=FbzhF z5}6iXedNM+s8B=i-*vTJi>7dhF*wWiB9bT@Tfzq$h65(jT|dSik$fXYh0*{UawLVn z>B(ikcJchjkxG$Oz^67bvsHJ#t6DX5GN5p~aqMeb+kmKH%k^B}dn{q5$Lq-%C%C4H z%P)V@j-OMrc{W)0#@SRP%+_IvdHTgZIHZph8EwERtiV12Shl>R$0QWL?)E1?GF@E$ zU2y(Gdj`?#mai6Bl+AYMP%)>9Ux7j0seyR1$d^;Zs^2K2l-CFsV2_~I>CW%|#9I;V zy}}JzC&pDMf8TSyH!PPg2q|-reN_ClLXr8zHVn0R@=*OIXy1AuC?teQ;P5g8(ALJX z9__`?7d5uq28>4qWr2B|M{qx=-6^Ye?Rc@h3;y-Fx60vq-_YpDENxgFilSaiJ~$9#g%Rij-oH-M0ZCBb;MA9 z>aOn29!8Z_M{|74+7L6XJJQ8{6<6r=@!Km5gG$CqT>yGpt);!ekKyRAecmbmidMT5 z(M%W5@x~2&D1&67eX%~1v+d}Ym_&`%s5ya3v%J9b>$as8iDhmP9%J|^3Te_AWNZbS zymLqZJrdY>b!DPC&xYC{5MkkwvE6HmIi$K9BM>#Bn(E$%TcTKOhq+cFaX&4r;x|Yx zxXH90%=C|fJvxYo>@)Mo-L1wWk};60)OSW+6)_JdQjqlK41>sQdsyEY$x54kK%j~n%lb@hd$!idB*f2^t zt>f0l)0#W0MT$dHx1_I)PUnz=)TM z6#d(JSnsfTA@(pT>)&)H`?cU`+B9q%8`MK9f|vg-oKT-}=%z_?RMB>$4$Lzx0DLrK z^+jrlabjHm+mfN{-*RBhhR?B~vpIL~pRW@iS8?2Z{H6R%LDq_%qAJNbYWsZNOU3({IW&%qTu zpF|Wo1{Ez#FiS+yz)q>L{-ze|w|6Sw8}=m#t2bjkGhzbwjVrQmO0-3k{y}^vH->v= z4nF=ZlzkBxz&W+u-qBohB9ruUN&a&7G*!%N5Dt>YpUXeOxaujs1eHAgtsrCLF zS&{1;Ut1(HGmvL`p6PgP&Vf|wSw%IzSYmd?t#GaG7e?%RcIyH(0=0Lo=0EMdG|OqQ zUnP3J!%jT@DG?if#x6eR3E-2!zzUU%VPRNyO^4??9#S;axbtb%htA zX8jyTAWIN|pjIRuJGSm$h!2Da=l@Fjo(GiU1*?lUA2Ke=Nv&q=b&V#?-qi}DX6Z;g z*OdR%FU?#62@`lmQ#4LCwx$O9fld28ij`0?n3Sas11tamWMCVj#_>qMC`r zxAWNphNs&vk7S2uXJ^-0?_%u?$s-K%PH_sHuG96$i^+6`HA%COx?gH(Hc)nEWmpgLcWtN4ft;r`^=amEm^JwrRz zOTQ`4V}{Y!zSdjt=BZG8sSJal8B?xtyQi#o2R*0qOekY$p8O7AJ$cE zzGtRN^eRvWAKJ>bdE{N9J4T2ItJND5+F$zk_qZh+hsUx9_st*Xd6U@+=gY3SC6O3J zYjvwwPMMJ}lS_9;L+be@$?Go#7)88de|t+a3nrfE@j7K~bZ9!=PJB=Dn+b%MYYMln zS%E~{F_i?OjmmA6?$jmOrdR+2OsN6=;hb?zctJo*v+=Jpq$e`NlC}Y&`ci|WpYY*? zM=x=h`&qF_iZzhX;Y4u~*M!9_UPrHnf0!xo88vss8fRyCrLWd;c~sPgydaqy{P0Gc zHqxQwFs>nJt;TR&e6XIe`FLvo_=hf+uFT-N{^18gdc7$Z2Y^ahtYyl;3AMD)+-LiL zPXrkX>-$y3FmmpQdmoR$U`|A+fMya|b6|1C4mzxElxZpd;GKeJM2~X+IHXKC2gDA1 zRo}bTV^0{@mgDvAbvt&t1@F-loS1|^LSg>TKE(C6rovmg;E?)wMV)XWSbXgp%LoF` z$LH>x%OxrF>*7V>9)aAtc&VBE6GdIoz?P5b+;JyYB`@X5`zc)*Jh&ei(Wk|jef84I zS#HAYsr}KNYLs1pbtt_~vZ>kw;?*39{%ur@7>+ zyT3Bas;#$Gbqg|U$2Z{$^=zjYcx=QUOUFxZ`3vv#ndUDN9&Ku^_~V`ZDEEaTFOz5@ z1s9unc)n|{n4#0lnCIgfAy=pu()VP5h#h2Jd@x!;6cN2dzQj{&rL&?9okGN|-4d0j zE-HtF#A|Q|byL;Bpq={<7e$l?HJJJSls8fi97fX327wS+>T#qD(}60*R<<*Ou&ZE=uy%V437oQbbQ#6L@fYJ(8I41i7X0ua{CiK* zQ-XwdrEjn|Yioig=CC~uK#lNqMlnA6q>#a(sHL)!&!3NBqOX_y!$b9@;X)5)S=2C|M~)R%RuuL}ahB zS2n-rd4ImY{?}Re{kosyx*k^qpStZQ>(i(+EC-*`HB{+2$v?A^vl0_QP9y=(+`S8m zPQ(51dbGu9Pth>wrWPBF@DrF`owrXc$bcsVT%EGBgpy^T zLr}V2WCNk8dJQ4~OQAeJOZ)nc?TWT~z_(nL(eGY56bw)C1AdZx8bsE#^$!domRU>u zb1v VWJE;f=cm8)CaN&?HR?I*WK)%oFwW}P_0f{Lf9-Rtkq@>Ba|9@1nH?xx-2 zB|&@&6plEe#Ko6ezudaA(B6zWUS#-%3SLvd^nPK_(HPaxpc=BrOFkEAyXSp6D2OO( zrsbPG*Qe6=mL|L@zc!ymTe>ptGwIl9uGE?q3AatPM_QDrJnp3j%;?Yj-Yp`z{R=9L zi|;a^TUt$b{(iUlzh4+Vt9DvhW#9=Q3;W+UQJF38>x!tkmg*Hu5Rb(s*D%u#>bhK@ z{kag+2wU3@`pEz_?}@a0-CWIl1&~TVNFkhyo#AJ|b@HVYd~!C`?h<2Uxog)w0Z6R& zZ%;EPf<~-^e1W)Ou9wJrbW0(lRvSL3#>p0qLlew4n>v0<$qKUQIy_tMwF=I8uKZ%B zz(tGgGwF2~t+ax|r!=&)XLiUfnp4ME9tvPxYUx|8t6X9~ratb|it{xi3(XFG={X4o z#A}bvgNWAY^i$VbaA;`|qxZ?Ig7B}WVBHywOIfggBSLmG#pq z2z;%d4R{w)XFgA8_h9yqU_GnQQsqNe?d!B;y zMXz>MTubQ@4$ly|{tnX&4xPYD_OuXPuE zGxELv=V3Ix8w#FQ=MuqBXQD7w9hV1+F+o@^3 z?xZPoZ85*}2XLef@TCR1rad4Wf8hS%&L48D&L^+N{SM?Ot%xc!2Jt7nbyW6g2$f-5 zAnOgkCuGpt=U4q%v7Vc{2wx}eE1*Jdfpzz6A+g8DmG`4&?Quphp{Z`~$O&;>8f>AV zJj}H5l+sYJl1DzQ84m?9A{_yDXb)IW;&DPJ@4i3tikNT zxs^5ey?6CmyHaZq2|W)v$rH8|1_dy177KG#Ms*nCQ^7Nv%tyT znA`?mO%IoWF6u+~kVPg}I;GYoh&W4A5+D}!|`bF*LU;g{%B7?^8(K?d`E|qurdel%|;-=p3CL6X>29jv=^op#1SIfI**j?i5=03ux4G*P%xetTi(P0C9 z!v9{VuC6W*WM0dt*FkDGqe~C5^>fh_tM^DrNrI*XU2t< z+L_wIZ0>VtI_=%nvCAhAzpB6E@uMC_a!b&aoD2E$tR1AcJ*w#eN_bDbbXT28no2KI z+$e`JA$uKhB{hlUux_d15?HJxJ1wqE9v1weonZfzGj`_G81zW`1I_0>#%lW+&+aL_ z^bI{6@y{Rzf7dm&w&{bb;;u>nEb`DVQ;wFXp~cLSuy*yE*J+DY zgY*Oi1y8TO_ZS(@7!2qGo)5)lSnEgD4E^umAsR^n-PqudS+ctPIUZTqjalsBu=iE; z++2o;#IM{V$19?S;MVti3h}`L-Qu<;3tVN=O6dsO`GmD=#=eeF|3C0UAWyA>5FGAq z7wa7uWS{W2%OEY%MMZzOQzgX7Zl0FB!X)%Bv0WncRpvVqCI=PSXM(PF#}eD9hc3>p zYIAq6gJ-8VT!!rL{VBSzehNdk4l2X2yHULS{_TdJ(|*45+BdHKvSLEKPK>85{nK~o zTIkumhZMVA0ZWXLHn6Ce&;EAE1UP>Z>p-gI&P%3R-GIRa2>Ms9KI1#dPe1E%17vmop`2o%;3thGi20q7bD6G)>t9+k5)DI%#qxV%d>f@M~`LKCxMMrj- zQLjnv6n}qhwZ^45{@98SQwb`eIRq#Y8^V=FW_0+NTOyQ!|Lf%wyISvp{g6pBfuM2v)QK|S;yMYEo@X87(@n{lZ&L$u z+qJ79J3n5OD`gHs58sxe;sE66{Nf9@;Wd_5GZHZK z>u9{Z9U*hS+^05CEOnAR|1x-!R=(EFam=)PQ(^?8(sYw=!UA!OJPfOs;rCaD+=Kzw zQGYu~4VXK-1=4SS`{gP9)mFhw7lz?$_1%K22c>(vbHvW=6eM!U=>`kR1In?Mf*m&2Y#;%r>R1} z@JxmXM8!-G8>)KUIxJ(y2JK|kpQJElk2*4`V!hBSSaXi}8P8J{Ef(Yn}Ua_oXaML!h^!f#O*H6}r8_V7WW z!6We@Mk`y#bXo=)*T07myR+8z0aGO6<9lCwyFY)vm(&UNI-ARhA-bX!bxG-jeSS2}1{V4NZSk)*{_w!709{I2trmxx1!~WFdzK213VflAvQoPi zO)qF9+Z}<|IhXLDFQbZD!ut@d$|%$k-(y;*y{6McHFFyy?MStSrg@5+cjWTzbtdfK>atyrD?kl32n<#;eJ?}8*qMFTzxBB{eN z5XADm?b9Ejg4*ThF4Rr`PKGGZ{gcz<3;>~@qcv2Zl2n>KVu-3YaI7wPCo|+f`u>(- z7-^KREO=^Tx^@l3b%A5N@?($0EAxos3LqUjj&D)kVv}_@F=9~nr@3sxgI7OW!BXZV zow98cgdfX?4{IIyL|U_brHF%l(6*RB-u*QgCoAQ@;E;%tSTuK#xg`3Y{NGAQ0*h3H z>fa*QoEv$nAqnybyP%bGH&2fC=kL}|9Zrr7EH41sm%Nx^aHZ>%v4h~y3~?fGaem34 zooM>mk3u>rxNn0us*qnoR1MhnYYD^)F$B4cgr(fWBa33V3how^$RNEiBKX{TfgiV6 zOtcPEfJVuqQpbImw6WM#$U;1Jbi(%NH)s zX3cmA7H)_`3038UWg;=n-X9w`e)_lP^r`%Z`;K&%R?g) z!kLgt;qV!D{08l0oNXt@yT)sU<}Brkx^}#l?%7*O+W+)DJo9~-Gne+!c%)D=^R<{^$XGm>`y&e{SGV;sFY zz6s%p?#wdCF&&9wUL%?&(kRU0 zQs4BWyKP0Zq5c-#T?=BBomDype;!8=qEEe8JQ?LPDE0U7Y9FS$$-&C!FOV_96Hp_B zGRxoiJ2*J_a4x2=sHlA5d$Vp!^lKOe4&g&jiD@`@@r=FDyU08=k@(=#~nYLg(c)zErMe3Fum>HxRe|^--s<$|sS$vj|ZS)7Qh| zQhjYLEr;CZla92aW~F?ml%I6p_jF(SODVml=gkMet9H81r)wfi0828{`NS!Fwt*^Q zTJa&u1{8S~=L|J-=q0N|X;9kfBeL2IfvL z(7Q_4hJ(QHC4O<2J^Og~PMrl^{J@(`5l79a^@XY>{!zLSZ=%O_Z;*tv|AMr2pW}fH z-8TNp4Wvl2)Xo?QB|Vq)`+*-Gs}vYzUH)e)8h?|~V48D^%yt7qiqCiWv;AOQT?(O0 zo4_n!MS!w^>}Rb;4x-f)1FgL#4^AXPkvWU!yYyn=g6kKiwN8Af7qOHE%Unzxd06wP z=B6EZRq=@BpmzZ#>!=9XgDH93ZuD%+fTi$dj#-PZd1_&qId2{R4G?s#&9j;+C#?(= z#fzlsFiF@o9D>i?TKqK0X=2JCmK;vnP;QM$H0@otFFnk&5gQN2xFF22>sY;Nt<~=@ zDBnk+a{dl@rt|j1I?|RdddUpho2;u&w%=sqz?>J;t-5=0NQ5HmZ`&yW4RHa1)4;_? zM5X4w4BkFUWe0eO@B5&+z3`7<>lpIaCdr6$d9eKXU1A`B* zd+jXgUQ;JdbpP9)WBTLf;&fP3m}p!`5BKD;HKHpxuP?qWP*MzP??4QJ??&&f@rFRw z%Gs^lluXBd@j0c7;;-TD2Qbo;U#w7%Ym}y+oT0xjbHv zfF#$;o>X;;I7*G*b(S!>G-iE+;lwrvzfN1IInjoRvT>CcSwh3A;_}nv2=*32odEjy z1zTbY3Z`+ER>2dw748zcDPxirNZK&mOXKhfTHJ0chJ`*u&W(|jAZ2XYQ&aSH!pb@IGqwFq{56< z_h;$-#*yuNGKjb}B7&q*u5f!ls{ zdx6+WP%g0c*-8SOqfVfK%wd!p|QLV~bcer-zx$@m13>ZywaH-G!{ESiZB` z#g>mom9E*V4^hJKGOeN*Y`!@nOwKoa?#yo)FIVdRWEZ{VTBQ{*rHu#|lS#0Vs!qV0v%L)Dp#Riw)ZIg@vjP zaKqG|UoQ0}u$Le#Be3)|ZCNBmji(3TdvCVG-GcRubhNDxZhd$oqJw^{3A7 z++17|l7HVGX+*_G5BZWf%?)8}-iwllxIBI;7N#k~^zy5)6>=jlgOX~S?X-JfADQM($4x^@#p>{;vE8CRl@Fb=$ z%FL*B+0%k&=mNrYB5eNFI2aqGbCC>4hBKTxtPY99ow!z94Q~EoHRXlw{Ov7(YbDqu zHG{~f#(+UGj{=9WEKjDKVuD*fRsPnm>chFyE@Eh=(eOh}lh)x>MKu13(yC5;A$dJK zdHc$hCo_2yPa&vjyzwkuVX(5$TF5G%FIHYlBYjHSux*T8H{*;=e({M*<2QX&NIcW& zT&d$5a}7O}dbJFq^jl_@dTHpt$06bV;hRR|k)zx0&DXw3p_fgya%QoKS>r@}66f`` zm2qyffPo$5%_}kT5i6S84YG!Q#_czZZOH`m+K{F!Te$(#05hdyz^8gs!TWC6R=x0k z0#wl_QJ1${L05KCUDLEul+2=Z*W+?sv$0Oh^!Qy7ms95!-iFGG4Ft+fr_cEo^KVqc zw+mtUgZ_^BS!_7dr zQ{*4cKbFSv@(Qa!b`;hAH#l2U*KapYvwti%3Jtk-wd21t58CJyclAJdJ#MDxDno6q zCt7{RB$izZW5~ReS0H?+{Yl&}mO;?MWVMNp{V-A@I?pb;>+@%)`%AaRTsb4y z)z`^HY)v@4Pk9q6zs5)Y366plpMyoU{lyN>{uOQ$}`oc=)!m<20 zp??;%MeQFA#nNN&s%$HOpZ28x&Z}~~_l-@;sVxOsPRg-aDwHYViE-5Owb~KAU_bWv zBsWsG;)}@@lRa*Lhz;6&(2hp|Fwm^+pK*7LE82)Eo*G zbcdh-c%Qj*1xjiUM>SVDr-S)+Lap&b+L4}T7KzJ&^5HvwF8s4-3tzo+> zWA2i(D4iU~i;Q{oBWgs&q$()K(UwLv$~99iJI+OiL^~%gTWKiW@=!1I5kB_bE^Rdg zpHXrgGfiGci*72n@1c^gC^iYtWg0E%^QOmVLvgDAITR$KcWeh5hr!}h`8T#c4X0D$U<%_Nw~ydi z9)dlBp_Mu*T4-F|lyLu;A)8;g>2hxMgRMUTv+~Ij`o5LNl<5QU9UUAGD1 z8!x%rizZeq_UX5!u}d&MwUKDb5NP?EUFVL0_|mfXZwXL*8NnJ8iBntM_X z(O_26hmdx8uCSv@p`vX~f&dQ?5WDUC8GJBhAw@FPYfHHQ=18D3B!XjC`H-7m9S=S` zasa26ZN<$;Lgw@ABR@442k#g&5aDsS9oj|$D!a~9EBEwPos}gD5X6ezK^S7|e?|gL zgYKQ*9ORwTXk9Sm-xuSh8Gat`KZ~{Q8-i1_#-?=f)%({IB83RsyD%2~E$7sRTw{G? z8Zog7HE7cM1YgsmM$ka|TG?vEQou#6kLV)FVO!<1T|i#EGB%)1qx-_yEMLARNEAJi zFoM|L?p#Sy;xaK)u$(^i*hVyOlKt8lpqvD!jU+{+nKZ_*T0V12NnS+cChp^M#`gBM z4hWp@NVUpairUupeVEI%ap&Ag!#v=HV=1hP%Z%>KEs|0UK_AEu!g;VXOa)J(f^yoF zGzc(+wLikZX*p=};Q0sZAR^R!?VhQw`CV5s$e-Y`z1h&fv}l<$j_uYN_c7 zrphtvQ9&CQ9=nU^?&@N}Fdr?oX{;uRJaxf3ts%|DE5M>5f4uf5(@M63(-3xr*X|!m zx|7{h6%*@`T~BeA?~H$duu_YQpi{tvz(#N~xbbOrcF+J!;r&Nx7~_Mv;l4^zzZ8OR~9sW+;J(p=30A+fo(-bX7=&LgV9zuk=Xwdo``w&YU0lIw7+F!lJmSXwp9CV1W1q3y16)duOwOP ze*tKgp~%SxU{1IUmZyJL7RsYYDHwh*ZmRgBqALu6rRxV=%cZvjk;w7+LdgW)7U_Zf zd}Rny8^W6 zDy?@%&mwgmv?(ozRCal}reP345N8Ce{E8~aPozsw=)C0&oTVN7)`Vj3;}Z{&ph_IE5})s!8Sh+?pa}P=dE5ERzRtHuufo~I6E-Cm?GR!PKK=CZ zMXR|4su)xYwky0O3K^2 zZGnbMwV}a!!tq@5-Yr8QT3`x6Q_z$(YBJ!33#Em6^5A0P=u^M4jF>_zq&9g3P{<$5 zYJ>`9hMC5+rv*eOyLC}h`9H4K5mPNY0O0WBRCNZju}(g6$P-T@&?g`V$id0cmho0_ z)y~uNAx?)DET|j#Q#9*Gc!Ku%*<{V5EWL6qgwqO7fE)ZvW1f!Z+g}l7{L*l%HdV9o zpyXfjt{m^vKiVx`ZCu3{AoOqJYiVhz?EjUi>FDJ6J$t8*R`}`8N(PZSmUp|dtN6`J zm*g=-)FEC5##Y5}_IJDv!XTGe+^zYdsR;+_Ab`RaI`7d9NBGPUC z^r2Jx2*|5_;zI#sEN_A!{HBlf+xhv&&ZW>(W;eCm#F?2`>?!3EJUK%<+64PV!%zZ8 zGRBk2=;Wj$P6{pLp$FkC+W6Q9L|v!9{3A)rKjGs7L+RU&h!{_BZu)w*u*|>^@GxeTr3(6}4TO$d$^qL`61L2N0L7eQZkUacwx@io@~ViUe<*NLZ+=X^jA zNZA&*>MF6X6{^+?C``~F|zK*ii(Pu02wIFbFWJr!prM?@&8>3X6I{>JtGcA}E(G^x`S2Ijl!@Mw!alb`#5w@ z&38`gR7}z~`(aN*TS+iPEp34rUE$a8CuJI9_%_(rZ?0U+gMgr?0ux*D&>MJsZ8C;F zg?&dvSRdg6JTZoXVBP0*YaHAY)z{6+(Av&sgd|IDm}8~yV8>}-3DJ%O zbfix?5!LrXAkgR`J4-Z9L1Ldc>}cabtbs^>xE|vOqaUNSCbnnm0yJukNjGsBLp@b=7dgsl=urJ zju2#eS94v)+O_DApI&T0nVg6dv&hH9{Ķ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 literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 hate.png.import b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 hate.png.import new file mode 100644 index 0000000..34f5c36 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 hate.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ch4hvrgmq3j7t" +path="res://.godot/imported/pl5 hate.png-388d1f5b2edc2acf9fc210941b2baa3e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 hate.png" +dest_files=["res://.godot/imported/pl5 hate.png-388d1f5b2edc2acf9fc210941b2baa3e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 plot.png b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 plot.png new file mode 100644 index 0000000000000000000000000000000000000000..4763b8236b106af13bd0f248d26645b4f124c4b4 GIT binary patch literal 65154 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 Q5cs=r-blAZ8}so00D+4{tpET3 literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 plot.png.import b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 plot.png.import new file mode 100644 index 0000000..50dfaa7 --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 plot.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://1k1be4cqjj4t" +path="res://.godot/imported/pl5 plot.png-e1a0a115000494e0cdac49ee21b7cee4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 plot.png" +dest_files=["res://.godot/imported/pl5 plot.png-e1a0a115000494e0cdac49ee21b7cee4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 sad.png b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 sad.png new file mode 100644 index 0000000000000000000000000000000000000000..97845b26de3074550b80633f0b2122b339043237 GIT binary patch literal 66584 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�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

A7|xxePi|T%>kXOm&}yRNU_~^ISor+ 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 literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 scoff.png.import b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 scoff.png.import new file mode 100644 index 0000000..4a6271d --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 scoff.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://675isgfym2tw" +path="res://.godot/imported/pl5 scoff.png-76e14fb5288feda1c9087fd38abcefa5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 scoff.png" +dest_files=["res://.godot/imported/pl5 scoff.png-76e14fb5288feda1c9087fd38abcefa5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 shy.png b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 shy.png new file mode 100644 index 0000000000000000000000000000000000000000..a131cfaf0511bc6c4eeb07be39a9d93c2d0e8c44 GIT binary patch literal 67080 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 literal 0 HcmV?d00001 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 surprise.png.import b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 surprise.png.import new file mode 100644 index 0000000..d6f0dfe --- /dev/null +++ b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 surprise.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dpvtdr1itkbd7" +path="res://.godot/imported/pl5 surprise.png-40a3e6634c031f3cf1912cb589c2490a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5 surprise.png" +dest_files=["res://.godot/imported/pl5 surprise.png-40a3e6634c031f3cf1912cb589c2490a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5.png b/addons/dialogic-main/addons/dialogic/Example Assets/portraits/Antonio/pl5.png new file mode 100644 index 0000000000000000000000000000000000000000..f676f779799e9a9e556416b5a3e9496700f14c6d GIT binary patch literal 65862 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 -YA7Kg!FvT5!5mK- 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 z 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