管理面板弟子卡支持 id 存取与按 id 删除

- DiscipleInformation 新增 disciple_id 字段,set_info 时写入对应 Disciple 的 id
- Manager 废弃 test_disciple_table 手动建卡,新增 add_disciple_card:
  Disciple 对象 → 信息字典(含 id/name/realm_name/五行)→ 实例化卡片
- 新增 remove_disciple_card(id):遍历 HFlowContainer 按 disciple_id
  匹配摘除并销毁(供 disciple_removed 信号驱动)
This commit is contained in:
2026-09-10 00:27:44 +08:00
parent 050c8116ad
commit c1fb348f07
3 changed files with 33 additions and 21 deletions
@@ -1,11 +1,14 @@
extends Control
var disciple_id: int;
func _ready() -> void:
custom_maximum_size = Vector2(180, 320);
custom_minimum_size = Vector2(180, 240);
pass;
func set_info(info: Dictionary):
disciple_id = info['id'];
$VBoxContainer/HBoxContainer/Name.text = info['name'];
$VBoxContainer/HBoxContainer2/Level.text = info['level']
$VBoxContainer/HBoxContainer3/GridContainer/MetalVal.text = str(info['metal'])
@@ -13,4 +16,6 @@ func set_info(info: Dictionary):
$VBoxContainer/HBoxContainer3/GridContainer/WaterVal.text = str(info['water'])
$VBoxContainer/HBoxContainer3/GridContainer/FireVal.text = str(info['fire'])
$VBoxContainer/HBoxContainer3/GridContainer/EarthVal.text = str(info['earth'])
#print(info)
pass
@@ -15,6 +15,7 @@ grow_vertical = 2
size_flags_horizontal = 3
theme_override_styles/panel = ExtResource("1_po3i5")
script = ExtResource("2_6fig8")
metadata/discipleId = 0
[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=1066350214]
layout_mode = 2
+27 -21
View File
@@ -1,6 +1,5 @@
extends Control
var test_disciple_table : Array[Dictionary] = [] # 弟子
var test_field_table : Array[Dictionary] = [] # 建筑
var test_order_table : Array[Dictionary] = [] # 订单
var test_alchemy_table : Array[Dictionary] = [] # 炼丹配方
@@ -22,7 +21,6 @@ func _ready() -> void:
var manager_panel_scene := load("res://src/UI/Panels/Manager/ManagerPanel.tscn") as PackedScene
var inventory_panel_scene := load("res://src/UI/Panels/Manager/InventoryPanel/InventoryPanel.tscn") as PackedScene
sect_resources["弟子"] = manager_panel_scene.instantiate();
sect_resources["弟子"].name = "弟子";
$TabContainer.add_child(sect_resources["弟子"]);
@@ -43,12 +41,6 @@ func _ready() -> void:
sect_resources["库房"].name = "库房";
$TabContainer.add_child(sect_resources["库房"]);
for e in test_disciple_table:
var d := disciple_info_scene.instantiate()
d.set_info(e)
sect_resources["弟子"].add_info_card(d)
pass
for e in test_field_table:
var d := field_info_scene.instantiate()
d.set_field_info(e)
@@ -66,25 +58,12 @@ func _ready() -> void:
d.set_alchemy_info(e)
sect_resources['炼丹'].add_info_card(d)
pass
pass
func init_test_data() -> void:
test_disciple_table.append_array([
{"name": "赵一", "gender": "", "level": "练气一层", "metal": 0.5, "wood": 0.9, "water": 0.1, "fire": 0.2, "earth": 0.15},
{"name": "钱二", "gender": "", "level": "练气一层", "metal": 0.5, "wood": 0.9, "water": 0.1, "fire": 0.2, "earth": 0.15},
{"name": "孙三", "gender": "", "level": "练气一层", "metal": 0.5, "wood": 0.9, "water": 0.1, "fire": 0.2, "earth": 0.15},
{"name": "李四", "gender": "", "level": "练气一层", "metal": 0.5, "wood": 0.9, "water": 0.1, "fire": 0.2, "earth": 0.15},
{"name": "周五", "gender": "", "level": "练气一层", "metal": 0.5, "wood": 0.9, "water": 0.1, "fire": 0.2, "earth": 0.15},
{"name": "吴六", "gender": "", "level": "练气一层", "metal": 0.5, "wood": 0.9, "water": 0.1, "fire": 0.2, "earth": 0.15},
{"name": "郑七", "gender": "", "level": "练气一层", "metal": 0.5, "wood": 0.9, "water": 0.1, "fire": 0.2, "earth": 0.15}
])
test_field_table.append_array([
{"name": "灵田", "弟子": 0},
{"name": "灵田", "弟子": 1},
@@ -129,3 +108,30 @@ func init_test_data() -> void:
test_inventory.append_array([{"草药": test_sub_inventory1}, {"粮食": test_sub_inventory2}, {"丹药": test_sub_inventory3}]);
pass
func add_disciple_card(d : Disciple) -> void:
var ds := disciple_info_scene.instantiate()
var info := {
"id": d.id,
"name": d.name,
"gender" : "x",
"level" : d.realm_name(),
"metal" : int(d.get_attr("metal")),
"wood" : int(d.get_attr("wood")),
"water" : int(d.get_attr("water")),
"fire" : int(d.get_attr("fire")),
"earth" : int(d.get_attr("earth"))
}
ds.set_info(info)
sect_resources["弟子"].add_info_card(ds)
pass
func remove_disciple_card(id: int) -> void:
var panel: Control = sect_resources["弟子"] # ManagerPanel 页
var flow: Node = panel.get_node("ScrollContainer/HFlowContainer")
for child in flow.get_children():
if child.disciple_id == id: # 指定项匹配
flow.remove_child(child) # 1. 先从树摘除
child.queue_free() # 2. 再排队销毁
return # 匹配唯一,删完即走