feat: 三选一刷新对齐商店(2026-10-06 用户令)——免费双源 X/Y 用尽后 GP 付费档(同 shop_refresh_* 旋钮/同冒险钱包 spend_gp 单口/同 reward_pick 池重抽),付费刷计数每停点清零;CurioPickOverlay.set_refresh_display 与商店同构(钮常驻选择态/两源皆穷禁用/角标免费余量/价签行 GP 价);通关停点刷新重发带 refreshed 标直落选择面不再重开胜利总结;店内门票专长三选一维持无刷新;单测 curio_refresh_paid_test+覆盖层刷新面断言;落文=秘宝.md 双源节 GP 付费档+冒险结构 v0.16+06 商店刷新条目换代(机制已落码态)
This commit is contained in:
1 parent
ced5fb75c3
commit
12807298eb
11 files changed
+185
-30
No files matched your search
@@ -20,7 +20,8 @@ var _continue_btn: Button # 继续钮(兑付反馈态唯一
|
||||
var _refresh_btn: Button # 刷新钮(迭代 11 第①批 T5b——余量>0 才显示;M7 升顶条图标钮)
|
||||
var _refresh_badge: Label # M7 余量角标(图标钮右上——demo ⑥ 同构)
|
||||
var _refresh_l: Label # 刷新余量读数(X 优先 + Y 冒险池)
|
||||
var _refresh_allowance := 0 # 组合根投喂余量(本视图零核心引用)
|
||||
var _refresh_allowance := 0 # 组合根投喂免费余量(X/Y——本视图零核心引用)
|
||||
var _refresh_gp_cost := 0 # 组合根投喂 GP 刷新价(免费位用尽后的付费档读数)
|
||||
var _selected := "" # 点选暂存(确认前可改选)
|
||||
var _header := "" # 停点头部文案(选择态保持显示)
|
||||
var _card_meta: Array = [] # open_pick 缓存 [{id, text}]——高亮还原读面
|
||||
@@ -105,18 +106,22 @@ func open_pick(header: String, cards: Array) -> void:
|
||||
_confirm_btn.visible = false
|
||||
_replace_box.visible = false
|
||||
_continue_btn.visible = false
|
||||
_refresh_btn.visible = false # 刷新余量随 set_refresh_info 投喂后现形(open 先归零防残留)
|
||||
_refresh_btn.visible = false # 刷新面随 set_refresh_display 投喂后现形(open 先归零防残留;店内门票面不投喂=无刷新)
|
||||
_refresh_l.text = ""
|
||||
visible = true
|
||||
|
||||
|
||||
# 三选一刷新余量投喂(组合根读 adventure.attune_refresh_left()——0 = 刷新面隐藏)
|
||||
func set_refresh_info(allowance: int) -> void:
|
||||
_refresh_allowance = maxi(0, int(allowance))
|
||||
_refresh_btn.visible = _refresh_allowance > 0
|
||||
# 三选一刷新呈现投喂(2026-10-06 用户令对齐商店 MC-1 同构——free_left=X/Y 免费位余量〔基础 0〕,
|
||||
# 免费位用尽转 GP 付费档:gp_cost=本次 GP 刷新价、can_afford=冒险钱包可付;钮常驻选择态,两源皆穷=禁用不隐藏)
|
||||
func set_refresh_display(free_left: int, gp_cost: int, can_afford: bool) -> void:
|
||||
_refresh_allowance = maxi(0, int(free_left))
|
||||
_refresh_gp_cost = maxi(0, int(gp_cost))
|
||||
_refresh_btn.visible = _refresh_allowance > 0 or _refresh_gp_cost > 0
|
||||
_refresh_badge.text = str(_refresh_allowance)
|
||||
_refresh_l.text = "免费 · 不消耗 AP" if _refresh_allowance > 0 else ""
|
||||
_refresh_l.visible = _refresh_allowance > 0
|
||||
_refresh_l.text = "免费 · 不消耗 AP" if _refresh_allowance > 0 else ("刷新 %d 金币" % _refresh_gp_cost if _refresh_gp_cost > 0 else "")
|
||||
_refresh_l.visible = _refresh_l.text != ""
|
||||
_refresh_btn.tooltip_text = "刷新候选——换一批战利品\n免费 %d 次(刷新件 X 优先 + 冒险池 Y)\nGP 刷新 %d 金币\n池源=共享池,与商店货架同源" % [_refresh_allowance, _refresh_gp_cost]
|
||||
_refresh_btn.disabled = _refresh_allowance <= 0 and not can_afford
|
||||
|
||||
|
||||
func _emit_refresh_requested() -> void:
|
||||
@@ -152,6 +157,11 @@ func press_continue() -> void:
|
||||
_continue_btn.pressed.emit()
|
||||
|
||||
|
||||
# 探针/测试复用:以真实按钮路径触发刷新意图(信号外发——受理归组合根)
|
||||
func press_refresh() -> void:
|
||||
_refresh_btn.pressed.emit()
|
||||
|
||||
|
||||
func selected_id() -> String:
|
||||
return _selected
|
||||
|
||||
@@ -163,6 +173,7 @@ func show_result(text: String) -> void:
|
||||
_confirm_btn.visible = false
|
||||
_replace_box.visible = false
|
||||
_continue_btn.visible = true
|
||||
_refresh_btn.visible = false # 刷新=选择态专属功能(结果态停点已兑付——残钮零意图可点)
|
||||
visible = true
|
||||
|
||||
|
||||
@@ -184,6 +195,7 @@ func open_replace(items: Array, incoming_name: String, holding: int, slots: int)
|
||||
_confirm_btn.visible = false
|
||||
_replace_box.visible = true
|
||||
_continue_btn.visible = false
|
||||
_refresh_btn.visible = false # 刷新=选择态专属功能(替换子态不换候选)
|
||||
visible = true
|
||||
|
||||
|
||||
@@ -193,6 +205,7 @@ func close_pick() -> void:
|
||||
_replace_box.visible = false
|
||||
_continue_btn.visible = false
|
||||
_confirm_btn.visible = false
|
||||
_refresh_btn.visible = false
|
||||
visible = false
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user