Skip to content

Instantly share code, notes, and snippets.

@me2beats
Last active September 20, 2021 03:53
Show Gist options
  • Save me2beats/9dcb5663f9c4338c755452cbed7c6a12 to your computer and use it in GitHub Desktop.
Save me2beats/9dcb5663f9c4338c755452cbed7c6a12 to your computer and use it in GitHub Desktop.
SceneTreeEditorUtils
static func get_scene_tree_node(plugin:EditorPlugin)->Tree:
var scene_tree_dock:Container= plugin.get_editor_interface().get_base_control().find_node("Scene", 1,0)
return NodeU.get_node_by_class_path(scene_tree_dock, ['SceneTreeEditor', 'Tree']) as Tree
# almost same, just find_child_by_class() used instead of get_node_by_class_path
static func get_scene_tree_control(plugin:EditorPlugin)->Tree:
var empty:Tree
var base: = plugin.get_editor_interface().get_base_control()
var scene_dock = base.find_node("Scene", true, false)
var tree_editor:Control = find_child_by_class(scene_dock, 'SceneTreeEditor')
var tree:Tree = find_child_by_class(tree_editor, "Tree")
return tree
static func is_item_node_a_scene(scene_tree_control:Tree, item:TreeItem)->bool:
var open_scene_icon = scene_tree_control.get_icon("InstanceOptions", "EditorIcons")
for i in item.get_button_count(0):
var button = item.get_button(0, i)
if button == open_scene_icon:
return true
return false
static func get_scene_tree_items_by_type(type, scene_tree:Tree, plugin:EditorPlugin, items: = []):
var root_item: = scene_tree.get_root()
if not root_item: return
var root_node = plugin.get_editor_interface().get_edited_scene_root()
var result: = []
if !items:
items = get_item_children_rec(root_item)
for item in items:
item = item as TreeItem
var nodepath:NodePath = item.get_metadata(0)
var node:Node = root_node.get_node(nodepath)
if node is type:
result.push_back(item)
return result
#todo: shorter name
static func get_items_to_remove_when_filtering_scene_tree_by_type(type, tree:Tree, plugin:EditorPlugin):
var items:Array = get_item_children_rec(tree.get_root())
var items_by_type:Array = get_scene_tree_items_by_type(type, tree, plugin, items)
var parents:Dictionary = get_items_all_parents(items_by_type)
var filtered_items: = parents
for i in items_by_type:
filtered_items[i] = true
return arr_minus_dict(items, filtered_items)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment