@@ -9,7 +9,7 @@ static var block_code_button: Button
9
9
var editor_inspector : EditorInspector
10
10
var editor_selection : EditorSelection
11
11
12
- var selected_block_code_node : BlockCode
12
+ var _selected_block_code : BlockCode
13
13
14
14
var old_feature_profile : String = ""
15
15
@@ -97,31 +97,31 @@ func _exit_tree():
97
97
func _ready ():
98
98
connect ("scene_changed" , _on_scene_changed )
99
99
editor_inspector .connect ("edited_object_changed" , _on_editor_inspector_edited_object_changed )
100
- editor_inspector .connect ("property_edited" , _on_editor_inspector_property_edited )
101
100
_on_scene_changed (EditorInterface .get_edited_scene_root ())
102
101
_on_editor_inspector_edited_object_changed ()
103
102
104
103
105
104
func _on_scene_changed (scene_root : Node ):
106
105
main_panel .switch_scene (scene_root )
107
- _on_editor_inspector_edited_object_changed ()
108
106
109
107
110
108
func _on_editor_inspector_edited_object_changed ():
111
109
var edited_object = editor_inspector .get_edited_object ()
112
110
# var edited_node = edited_object as Node
113
111
var selected_nodes = editor_selection .get_selected_nodes ()
114
112
115
- if edited_object is BlockCode and selected_nodes .has (edited_object ):
113
+ if edited_object is BlockCode :
114
+ make_bottom_panel_item_visible (main_panel )
115
+
116
+ if edited_object is BlockCode and selected_nodes .size () == 1 and edited_object .owner and edited_object != _selected_block_code :
116
117
# If a BlockCode node is being edited, and it was explicitly selected
117
118
# (as opposed to edited in the Inspector alone), select its parent node
118
119
# as well. This provides a clearer indication of what is being edited.
119
120
# Changing the selection will cause edited_object_changed to fire again,
120
121
# so we will return early to avoid duplicate work.
121
122
var parent_node = edited_object .get_parent ()
122
123
if parent_node :
123
- EditorInterface .get_selection ().add_node .call_deferred (parent_node )
124
- make_bottom_panel_item_visible (main_panel )
124
+ editor_selection .add_node .call_deferred (parent_node )
125
125
return
126
126
127
127
if edited_object and edited_object .get_class () == "MultiNodeEdit" :
@@ -131,14 +131,46 @@ func _on_editor_inspector_edited_object_changed():
131
131
# when we select the parent of a BlockCode node.
132
132
edited_object = selected_nodes .filter (func (node ): return node is BlockCode ).pop_front ()
133
133
134
- # We will edit either the selected node (if it is a BlockCode node) or
135
- # the first BlockCode child of that node. Keep track of the block code node
136
- # being edited so we know to monitor for changes from EditorInspector.
137
- selected_block_code_node = list_block_code_for_node (edited_object as Node ).pop_front ()
138
- if not is_block_code_editable (selected_block_code_node ):
139
- selected_block_code_node = null
134
+ var block_code_node = list_block_code_nodes_for_node (edited_object as Node ).pop_front ()
135
+ select_block_code_node (block_code_node )
136
+
137
+
138
+ func select_block_code_node (block_code : BlockCode ):
139
+ if block_code == _selected_block_code :
140
+ return
141
+
142
+ if not is_block_code_editable (block_code ):
143
+ block_code = null
144
+
145
+ if _selected_block_code :
146
+ _selected_block_code .tree_entered .disconnect (_on_selected_block_code_changed )
147
+ _selected_block_code .tree_exited .disconnect (_on_selected_block_code_changed )
148
+ _selected_block_code .property_list_changed .disconnect (_on_selected_block_code_changed )
149
+ editor_inspector .property_edited .disconnect (_on_editor_inspector_property_edited )
150
+
151
+ _selected_block_code = block_code
152
+
153
+ if _selected_block_code :
154
+ _selected_block_code .tree_entered .connect (_on_selected_block_code_changed )
155
+ _selected_block_code .tree_exited .connect (_on_selected_block_code_changed )
156
+ _selected_block_code .property_list_changed .connect (_on_selected_block_code_changed )
157
+ editor_inspector .property_edited .connect (_on_editor_inspector_property_edited )
140
158
141
- main_panel .switch_block_code_node (selected_block_code_node )
159
+ _refresh_block_code_node ()
160
+
161
+
162
+ func _refresh_block_code_node ():
163
+ main_panel .switch_block_code_node (_selected_block_code )
164
+
165
+
166
+ func _on_selected_block_code_changed ():
167
+ if _selected_block_code :
168
+ _refresh_block_code_node ()
169
+
170
+
171
+ func _on_editor_inspector_property_edited (property : String ):
172
+ if _selected_block_code :
173
+ _refresh_block_code_node ()
142
174
143
175
144
176
static func is_block_code_editable (block_code : BlockCode ) -> bool :
@@ -154,10 +186,10 @@ static func is_block_code_editable(block_code: BlockCode) -> bool:
154
186
155
187
156
188
static func node_has_block_code (node : Node , recursive : bool = false ) -> bool :
157
- return list_block_code_for_node (node , recursive ).size () > 0
189
+ return list_block_code_nodes_for_node (node , recursive ).size () > 0
158
190
159
191
160
- static func list_block_code_for_node (node : Node , recursive : bool = false ) -> Array [BlockCode ]:
192
+ static func list_block_code_nodes_for_node (node : Node , recursive : bool = false ) -> Array [BlockCode ]:
161
193
var result : Array [BlockCode ] = []
162
194
163
195
if node is BlockCode :
@@ -168,11 +200,6 @@ static func list_block_code_for_node(node: Node, recursive: bool = false) -> Arr
168
200
return result
169
201
170
202
171
- func _on_editor_inspector_property_edited (property : String ):
172
- if selected_block_code_node :
173
- _on_editor_inspector_edited_object_changed ()
174
-
175
-
176
203
func _get_plugin_name ():
177
204
return "Block Code"
178
205
0 commit comments