Árvore
Uma árvore de cena com duas colunas, construída de um dicionário aninhado por uma função recursiva.
O editor acima está rodando este projeto. Mude uma linha e ele recarrega.
Classes do Godot usadas
TreeTreeItem
O código
scripts/main.gd
extends Node
const SCENE: Dictionary = {
Main = {
Player = {Camera2D = {}, Sprite2D = {}, CollisionShape2D = {}},
Level = {TileMapLayer = {}, Enemies = {Slime = {}, Bat = {}}},
UI = {HealthBar = {}, PauseMenu = {}},
}
}
var status: Label
func _ready() -> void:
var column: VBoxContainer = _root()
var title: Label = Label.new()
title.text = 'Tree'
title.add_theme_font_size_override('font_size', 26)
column.add_child(title)
var tree: Tree = Tree.new()
tree.columns = 2
tree.set_column_title(0, 'node')
tree.set_column_title(1, 'visible')
tree.column_titles_visible = true
tree.custom_minimum_size = Vector2(520, 380)
tree.item_selected.connect(func(): _on_selected(tree))
column.add_child(tree)
_fill(tree, null, SCENE)
status = Label.new()
status.text = 'click a row, the item_selected signal reports it'
status.add_theme_color_override('font_color', Color('#999999'))
column.add_child(status)
func _fill(tree: Tree, parent: TreeItem, data: Dictionary) -> void:
for key in data:
var item: TreeItem = tree.create_item(parent)
item.set_text(0, key)
item.set_text(1, 'yes')
item.set_custom_color(0, Color('#8eef97') if data[key].is_empty() else Color('#ffffff'))
_fill(tree, item, data[key])
func _on_selected(tree: Tree) -> void:
var item: TreeItem = tree.get_selected()
if item:
status.text = 'selected %s' % item.get_text(0)
func _root() -> VBoxContainer:
var background: ColorRect = ColorRect.new()
background.color = Color('#12141a')
add_child(background)
background.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
var center: CenterContainer = CenterContainer.new()
add_child(center)
center.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
var column: VBoxContainer = VBoxContainer.new()
column.add_theme_constant_override('separation', 16)
center.add_child(column)
return column