4 ## Preload the main panel scene
5 const MainPanel := preload("res://addons/dialogic/Editor/editor_main.tscn")
6 const PLUGIN_NAME := "Dialogic"
7 const PLUGIN_HANDLER_PATH := "res://addons/dialogic/Core/DialogicGameHandler.gd"
8 const PLUGIN_ICON_PATH := "res://addons/dialogic/Editor/Images/plugin-icon.svg"
10 ## References used by various other scripts to quickly reference these things
11 var editor_view: Control # the root of the dialogic editor
12 var inspector_plugin: EditorInspectorPlugin = null
16 self.name = "DialogicPlugin"
19 #region ACTIVATION & EDITOR SETUP
20 ################################################################################
22 ## Activation & Editor Setup
23 func _enable_plugin() -> void:
24 add_autoload_singleton(PLUGIN_NAME, PLUGIN_HANDLER_PATH)
25 add_dialogic_default_action()
28 func _disable_plugin() -> void:
29 remove_autoload_singleton(PLUGIN_NAME)
32 func _enter_tree() -> void:
33 editor_view = MainPanel.instantiate()
34 editor_view.plugin_reference = self
36 get_editor_interface().get_editor_main_screen().add_child(editor_view)
39 inspector_plugin = load("res://addons/dialogic/Editor/Inspector/inspector_plugin.gd").new()
40 add_inspector_plugin(inspector_plugin)
42 # Auto-update the singleton path for alpha users
43 # TODO remove at some point during beta or later
44 if not ProjectSettings.has_setting("autoload/"+PLUGIN_NAME) or not "Core" in ProjectSettings.get_setting("autoload/"+PLUGIN_NAME, ""):
45 if ProjectSettings.has_setting("autoload/"+PLUGIN_NAME):
46 remove_autoload_singleton(PLUGIN_NAME)
47 add_autoload_singleton(PLUGIN_NAME, PLUGIN_HANDLER_PATH)
50 func _exit_tree() -> void:
52 remove_control_from_bottom_panel(editor_view)
53 editor_view.queue_free()
56 remove_inspector_plugin(inspector_plugin)
62 ################################################################################
64 func _has_main_screen() -> bool:
68 func _get_plugin_name() -> String:
72 func _get_plugin_icon() -> Texture2D:
73 return load(PLUGIN_ICON_PATH)
78 #region EDITOR INTERACTION
79 ################################################################################
82 func _make_visible(visible:bool) -> void:
86 if editor_view.get_parent() is Window:
88 get_editor_interface().set_main_screen_editor("Script")
90 editor_view.get_parent().grab_focus()
92 editor_view.visible = visible
95 func _save_external_data() -> void:
96 if _editor_view_and_manager_exist():
97 editor_view.editors_manager.save_current_resource()
100 func _get_unsaved_status(for_scene:String) -> String:
101 if for_scene.is_empty():
102 _save_external_data()
106 func _handles(object) -> bool:
107 if _editor_view_and_manager_exist() and object is Resource:
108 return editor_view.editors_manager.can_edit_resource(object)
112 func _edit(object) -> void:
116 if _editor_view_and_manager_exist():
117 editor_view.editors_manager.edit_resource(object)
120 ## Helper function to check if editor_view and its manager exist
121 func _editor_view_and_manager_exist() -> bool:
122 return editor_view and editor_view.editors_manager
127 #region PROJECT SETUP
128 ################################################################################
130 ## Special Setup/Updates
131 ## Methods that adds a dialogic_default_action if non exists
132 func add_dialogic_default_action() -> void:
133 if ProjectSettings.has_setting('input/dialogic_default_action'):
136 var input_enter: InputEventKey = InputEventKey.new()
137 input_enter.keycode = KEY_ENTER
138 var input_left_click: InputEventMouseButton = InputEventMouseButton.new()
139 input_left_click.button_index = MOUSE_BUTTON_LEFT
140 input_left_click.pressed = true
141 input_left_click.device = -1
142 var input_space: InputEventKey = InputEventKey.new()
143 input_space.keycode = KEY_SPACE
144 var input_x: InputEventKey = InputEventKey.new()
145 input_x.keycode = KEY_X
146 var input_controller: InputEventJoypadButton = InputEventJoypadButton.new()
147 input_controller.button_index = JOY_BUTTON_A
149 ProjectSettings.set_setting('input/dialogic_default_action', {'deadzone':0.5, 'events':[input_enter, input_left_click, input_space, input_x, input_controller]})
150 ProjectSettings.save()
152 # Create cache when project is compiled
153 func _build() -> bool:
154 DialogicResourceUtil.update()