## 营地顶栏小 HUD 栏(裁决 10——钥石余额常驻,最小集形态):承载 UiKit.keystone_badge(工厂单点)。 ## 读数只经 camp_data() 投影单口(禁第二账本、禁视图自算);刷新挂卡④ CampRefreshBus 单口 ## (bus 目标册成员——显式触发才变,禁 _ready 自刷/自持第二入口,契约 5);载体=PRESET_TOP_WIDE 48px 浮层。 class_name CampHudBand extends Control var _badge: PanelContainer func _init() -> void: set_anchors_preset(Control.PRESET_TOP_WIDE) custom_minimum_size = Vector2(0, 48) # 高 48px 浮层覆盖、不挤压画面(camp.md §顶栏) mouse_filter = Control.MOUSE_FILTER_IGNORE # HUD 栏不挡场景命中区(浮层覆盖语义) UiKit.camp_hud_band_surface(self) # 栏体色面——整件外观单一出口(色值与 α、铺满、不吃点击、挂载全在出口内);先入=绘制序底,徽章后入不被盖 _badge = UiKit.keystone_badge("钥石 0") var dock := HBoxContainer.new() # 右对齐容器承载徽章(Q2 已裁乙——位数增宽自然向左展;摆位机制先例=confirm_dialog 钮行同款容器 alignment) dock.set_anchors_preset(Control.PRESET_FULL_RECT) dock.offset_right = -12.0 # 右缘内缩 12px(UiKit 钮间距同档——白名单 3) dock.alignment = BoxContainer.ALIGNMENT_END dock.mouse_filter = Control.MOUSE_FILTER_IGNORE # 容器自身默认 STOP——与出口内 IGNORE 是两个点,必须同批落(漏一处顶排物件点不动) dock.add_child(_badge) add_child(dock) ## 余额写入(格式串=既有消费面同款「钥石 %d」——badge 工厂约定单点,禁第二格式串) func set_balance(v: int) -> void: _badge.value_label.text = "钥石 %d" % v ## 刷新单口落点(CampRefreshBus 目标册成员——显式触发才变,契约 5 刷新时机①②③同一闸) func refresh_camp(camp_data: Dictionary) -> void: set_balance(int(camp_data.get("balance", 0)))