grunk/addons/beehave/debug/new_node_blackboard.gd

77 lines
2.2 KiB
GDScript

extends VBoxContainer
var frames: RefCounted
var graph_node: GraphNode
var item_tree: Tree
func _init(frames: RefCounted, node: GraphNode) -> void:
self.frames = frames
graph_node = node
graph_node.blackboard_updated.connect(_update_list)
func _ready() -> void:
name = graph_node.name
set_anchors_preset(Control.PRESET_FULL_RECT)
var title_panel: Panel = Panel.new()
title_panel.set_anchors_preset(Control.PRESET_FULL_RECT)
title_panel.custom_minimum_size = Vector2(200, 50)
add_child(title_panel)
var title_hbox: HBoxContainer = HBoxContainer.new()
title_hbox.alignment = BoxContainer.ALIGNMENT_CENTER
title_hbox.set_anchors_preset(Control.PRESET_FULL_RECT)
title_panel.add_child(title_hbox)
var icon_rect: TextureRect = TextureRect.new()
icon_rect.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
icon_rect.texture = graph_node.icon
icon_rect.set_size(Vector2(20, 20))
title_hbox.add_child(icon_rect)
var title: Label = Label.new()
title.text = graph_node.title_text
title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
title.set_anchors_preset(Control.PRESET_FULL_RECT)
title_hbox.add_child(title)
item_tree = Tree.new()
item_tree.custom_minimum_size = Vector2(200, 400)
item_tree.hide_root = true
item_tree.allow_search = false
item_tree.columns = 2
add_child(item_tree)
_update_list()
func _update_list() -> void:
item_tree.clear()
var root: TreeItem = item_tree.create_item()
if graph_node.blackboard.size() == 0:
var no_bb_message: TreeItem = item_tree.create_item(root)
no_bb_message.set_text(0, "No blackboard data")
return
for bb_name in graph_node.blackboard:
var bb_name_branch: TreeItem = item_tree.create_item(root)
bb_name_branch.set_text(0, bb_name)
#print(graph_node.blackboard.get(bb_name))
for key in graph_node.blackboard.get(bb_name):
var bb_kv_leaf: TreeItem = item_tree.create_item(bb_name_branch)
bb_kv_leaf.set_text(0, str(key))
bb_kv_leaf.set_text(1, str(graph_node.blackboard.get(bb_name).get(key)))
func _get_icon(type: StringName) -> Texture2D:
var classes := ProjectSettings.get_global_class_list()
for c in classes:
if c["class"] == type:
var icon_path := c.get("icon", String())
if not icon_path.is_empty():
return load(icon_path)
return null