Files
ImmortalSect/src/UI/Panels/Manager/InventoryPanel/InventoryPanel.gd
T

40 lines
1.5 KiB
GDScript

extends Control
## 测试数据:模拟 sect_data 里的嵌套资源(分类 → 子项)
var test_resources := [
{"name": "粮草", "items": [{"name": "米", "quantity": 10}, {"name": "蔬菜", "quantity": 20}]},
{"name": "丹药", "items": [{"name": "聚气丹", "quantity": 5}]},
]
func _ready() -> void:
var tree: Tree = $ScrollContainer/Tree
tree.hide_root = true # 隐藏内部根,顶部就是"粮草/丹药"
tree.columns = 2
tree.item_selected.connect(_on_item_selected)
_refresh(tree)
pass
## 每次数据变化后全量重建(简单可靠)
func _refresh(tree: Tree) -> void:
tree.clear()
for category: Dictionary in test_resources:
var cat_item := tree.create_item() # 无父 = 顶级项(挂在隐藏根下)
cat_item.set_text(0, category["name"])
cat_item.set_metadata(0, {"type": "category"})
for sub: Dictionary in category["items"]:
var item := tree.create_item(cat_item) # 子项
item.set_text(0, sub["name"])
item.set_text(1, str(sub["quantity"]))
item.set_metadata(0, sub) # 存整条数据便于取用
## 动态新增一项后刷新
func _on_add_button() -> void: # 测试:手动调一次
test_resources[0]["items"].append({"name": "灵米", "quantity": 99})
_refresh($ScrollContainer/Tree)
func _on_item_selected() -> void:
var tree: Tree = $ScrollContainer/Tree
var selected := tree.get_selected()
if selected != null:
print(selected.get_text(0), " → ", selected.get_metadata(0))