①node_overlay:show_reward_items 三选一(池≤3 全列——当前三件即全列;池空直通=切片期合法空态保留;选择前继续隐藏=强制构筑点语义)+item_chosen 信号+close_reward 收屏 ②main:奖励分支接三选一(活行∩解锁集,注册序前 3,呈现侧零 RNG)+_on_reward_item_chosen(入库存来源归因 reward_node→toast→_on_node_continue 兑付确认回选路零自动推进)+_reward_node_choices ③解锁门控链(拍板③甲=解锁进投放池):main _aux_unlocked_set(工坊解锁∩活行;罗盘退役/失义件不入集)→adventure params.aux_unlocked→LevelRunner.set_aux_unlocked→BattleOrchestrator 公有 setter→RewardEconomy.set_aux_unlocked+_rollable_rows aux 行过滤——空集默认零投放=白板/夹具态模拟读数零扰动 ④工坊呈现:workshop_status 投影+deferred/retired 状态面;camp 文案=已解锁·能力封存中(失义件)/已退役(罗盘) ⑤node-reward.md spec v1.0 出生(06 条目兑现) 坑一轮:BattleOrchestrator 无公有 reward_economy(E1/E3 封装)——公有 setter 转发;竖线锚四处拼接病自愈 闸:冒烟 577/0+四探针 PASS(click 问题=0)+单测 0 FAIL
64 lines
2.3 KiB
GDScript
64 lines
2.3 KiB
GDScript
# VERTICAL SLICE - NOT FOR PRODUCTION
|
||
# Date: 2026-09-11
|
||
# 关卡节点覆盖层(模态):奖励点/恢复点兑付结果的确认呈现。
|
||
# 高内聚边界:节点文案的玩家可读化(谁获得什么/回复多少)内聚于此;"继续"意图经信号外发。
|
||
class_name NodeOverlay
|
||
extends Control
|
||
|
||
signal continue_pressed
|
||
signal item_chosen(item_id: String) # 迭代 7 T5——奖励节点三选一兑付(拍板②丙:奖励屏=小构筑点)
|
||
|
||
var _label: Label
|
||
var _btn: Button
|
||
var _choice_box: HBoxContainer # 道具三选一按钮区(show_reward_items 时呈现)
|
||
|
||
|
||
func _init() -> void:
|
||
var dim := ColorRect.new()
|
||
dim.color = Color(0, 0, 0, 0.6)
|
||
dim.set_anchors_preset(Control.PRESET_FULL_RECT)
|
||
add_child(dim)
|
||
var center := CenterContainer.new()
|
||
center.set_anchors_preset(Control.PRESET_FULL_RECT)
|
||
dim.add_child(center)
|
||
var box := VBoxContainer.new()
|
||
box.add_theme_constant_override("separation", 12)
|
||
center.add_child(box)
|
||
_label = UiKit.label("", 20, true)
|
||
_label.add_theme_color_override("font_color", UiKit.WARM)
|
||
_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||
box.add_child(_label)
|
||
_btn = UiKit.button("继续")
|
||
_choice_box = HBoxContainer.new()
|
||
_choice_box.add_theme_constant_override("separation", 12)
|
||
_choice_box.alignment = BoxContainer.ALIGNMENT_CENTER
|
||
box.add_child(_choice_box)
|
||
_btn.pressed.connect(func(): continue_pressed.emit())
|
||
box.add_child(_btn)
|
||
visible = false
|
||
|
||
|
||
func show_reward() -> void:
|
||
# 格面资源批(2026-09-15):奖励点内容随可选类道具删除悬置(功能道具渠道 P1 待拍板)——直通节点确认
|
||
_label.text = "关卡奖励点\n(节点内容待定——冒险结构/关卡节点地图 定稿批裁决)"
|
||
_btn.text = "继续"
|
||
visible = true
|
||
|
||
|
||
func show_rest(healed: int, hp_after: int, max_hp: int) -> void:
|
||
_label.text = "血量恢复点\n休息回复 %d HP(%d → %d / %d)" % [
|
||
healed, hp_after - healed, hp_after, max_hp]
|
||
_btn.text = "休息完毕,继续"
|
||
visible = true
|
||
|
||
|
||
# 选择完成收屏(组合根在 item_chosen 处理毕调——入库存+确认后回选路由同拍)
|
||
func close_reward() -> void:
|
||
_choice_box.visible = false
|
||
_btn.visible = true
|
||
visible = false
|
||
|
||
# 探针复用:以真实按钮路径触发继续
|
||
func press_continue() -> void:
|
||
_btn.pressed.emit()
|