Merge branch 'master' into iter23-forge-20261012
# Conflicts: # design/gdd/systems/表现与支撑/存档序列化.md
This commit is contained in:
commit
3392ea7e2d
19 files changed
+257
-332
No files matched your search
@@ -235,7 +235,6 @@ func _build_ui() -> void:
|
||||
info_panel.treasure_slot_clicked.connect(_treasure_ui.on_slot_clicked) # 迭代 7 T4——两步交互第一步
|
||||
board_zone.stop_pressed.connect(_on_stop_pressed)
|
||||
board_zone.refresh_confirmed.connect(_on_refresh_confirmed)
|
||||
board_zone.convert_pressed.connect(_on_convert_pressed) # 积点兑换(迭代 22 秘宝批 T4——试炼镐 HUD 入口)
|
||||
board_zone.legend_toggled.connect(_on_legend_toggled)
|
||||
board_zone.hover_forbidden.connect(_on_hover_forbidden)
|
||||
board_zone.chord_attempted.connect(_on_chord_attempted)
|
||||
@@ -1240,32 +1239,10 @@ func _refresh_presentations() -> void:
|
||||
# 每个核心信号/写调用返回后的全量重查装配(更新触发注记——无推送信号,命令式重查)
|
||||
var refresh_remaining: int = maxi(0, int(db.action_economy.refresh_cap_per_round) - _refresh_used_round)
|
||||
HudPresenter.refresh(stage, info_panel, ap_bar, settlement, runner, _level_active, db, refresh_remaining)
|
||||
_sync_convert_button()
|
||||
_treasure_ui.refresh_slots() # C 区秘宝槽重查(反哺批⑤——试炼镐积点进度随挖格刷新悬停浮窗)
|
||||
_sync_settlement_visuals()
|
||||
|
||||
|
||||
# 积点兑换钮态(迭代 22 秘宝批 T4——读数口命令式重查;未装配=隐藏零占位)
|
||||
func _sync_convert_button() -> void:
|
||||
if settlement == null:
|
||||
board_zone.ap_bar.set_convert_state(false, 0, 0, "")
|
||||
return
|
||||
var cs: Dictionary = settlement.attune_convert_state()
|
||||
board_zone.ap_bar.set_convert_state(bool(cs.get("assembled", false)), int(cs.get("points", 0)),
|
||||
int(cs.get("need", 0)), String(cs.get("display_name", "")))
|
||||
|
||||
|
||||
func _on_convert_pressed() -> void:
|
||||
if settlement == null:
|
||||
return
|
||||
var v: Dictionary = settlement.use_attune_convert("trial_pick")
|
||||
if not bool(v.get("ok", false)):
|
||||
board_zone.toast.show_toast(String(v.get("reason", "无法兑换")), "warn")
|
||||
return
|
||||
logger.log_action("convert", Vector2i(-1, -1), true)
|
||||
board_view.refresh()
|
||||
_refresh_presentations()
|
||||
|
||||
|
||||
func _sync_settlement_visuals() -> void:
|
||||
# 结算阶段(round_end → 下一轮):D 区去饱和+金橙偏移锁输入(明度不变)+ 明细带展开 84px
|
||||
var settling := _is_settling()
|
||||
|
||||
@@ -52,7 +52,8 @@ func active_selection() -> int:
|
||||
return _use_selection
|
||||
|
||||
|
||||
# 槽点击(第一步):AP 类(target=none)点击即用(无目标);空间类进/出选中态(toggle 取消)。
|
||||
# 槽点击(第一步):AP 类(target=none)点击即用(无目标);空间类进/出选中态(toggle 取消);
|
||||
# 自动兑付件展示行(handle<0)无使用动作——点击给说明提示(反哺批⑤)。
|
||||
func on_slot_clicked(slot_handle: int) -> void:
|
||||
var settlement = _settlement_get.call()
|
||||
var runner = _runner_get.call()
|
||||
@@ -62,6 +63,9 @@ func on_slot_clicked(slot_handle: int) -> void:
|
||||
_use_selection = 0
|
||||
refresh_slots()
|
||||
return
|
||||
if slot_handle < 0:
|
||||
toast.show_toast("自动兑付件:满足条件自动生效,无需手动使用", "info")
|
||||
return
|
||||
var rec: Dictionary = {}
|
||||
for r in inventory_projection():
|
||||
if int(r.get("handle", 0)) == slot_handle:
|
||||
@@ -112,9 +116,16 @@ func inventory_projection() -> Array:
|
||||
cb = func(_c: Vector2i) -> bool:
|
||||
return ms.has_unrevealed() # 只读查询面(排雷玩法 has_unrevealed——手搓全板双循环收口)
|
||||
var out: Array = []
|
||||
var cs: Dictionary = settlement.attune_convert_state() if settlement != null else {}
|
||||
var auto_seen := false # 自动兑付件是否已随骑库存出现(恒否——charges=0 不入骑库存;守合成行重复)
|
||||
for rec in runner.treasure_inventory.query_inventory(cb):
|
||||
var arow: Dictionary = db.treasure_item_row(String(rec.get("item_id", "")))
|
||||
var dn := String(arow.get("display_name", ""))
|
||||
# 积点进度浮窗行(反哺批⑤——自动兑付件 C 区悬停 tooltip 补 N/M 进度;件 id 锁定=装配行唯一)
|
||||
var note := ""
|
||||
if bool(cs.get("assembled", false)) and String(cs.get("item_id", "")) == String(rec.get("item_id", "")):
|
||||
note = "积点 %d/%d" % [int(cs.get("points", 0)), int(cs.get("need", 0))]
|
||||
auto_seen = true
|
||||
out.append({
|
||||
"handle": int(rec.get("handle", 0)),
|
||||
"item_id": String(rec.get("item_id", "")),
|
||||
@@ -122,7 +133,22 @@ func inventory_projection() -> Array:
|
||||
"name": dn,
|
||||
"used": bool(rec.get("used", false)),
|
||||
"usable": bool(rec.get("usable", true)),
|
||||
"note": note,
|
||||
})
|
||||
# 自动兑付件展示行(反哺批⑤补——charges=0 不入骑库存〔_reseed_attune_charges 跳过注入〕,
|
||||
# C 区四槽末尾补合成行承载悬停进度;handle=-1 非库存句柄:槽点击走说明 toast 分支不进两步交互)
|
||||
if bool(cs.get("assembled", false)) and not auto_seen:
|
||||
var adn := String(cs.get("display_name", ""))
|
||||
if adn != "":
|
||||
out.append({
|
||||
"handle": -1,
|
||||
"item_id": String(cs.get("item_id", "")),
|
||||
"glyph": adn.left(1),
|
||||
"name": adn,
|
||||
"used": false,
|
||||
"usable": true,
|
||||
"note": "积点 %d/%d" % [int(cs.get("points", 0)), int(cs.get("need", 0))],
|
||||
})
|
||||
return out
|
||||
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@ extends PanelContainer
|
||||
signal stop_pressed
|
||||
signal refresh_confirmed
|
||||
signal legend_toggled
|
||||
signal convert_pressed # 积点兑换意图(迭代 22 秘宝批 T4——写口唯一=BattleOrchestrator.use_attune_convert)
|
||||
|
||||
const COL_GOLD := UiKit.GOLD
|
||||
const COL_DOT_OFF := UiKit.DOT_OFF
|
||||
@@ -22,7 +21,6 @@ const COL_INK := UiKit.INK
|
||||
var _dots: HBoxContainer
|
||||
var _ap_label: Label
|
||||
var _btn_stop: Button
|
||||
var _btn_convert: Button # 积点兑换钮(迭代 22 秘宝批 T4——试炼镐 HUD 入口;未装配隐藏)
|
||||
var _btn_legend: Button
|
||||
var _btn_refresh: Button
|
||||
var _refresh_sub: Label
|
||||
@@ -63,12 +61,6 @@ func _init() -> void:
|
||||
_btn_stop.pressed.connect(_emit_stop_pressed)
|
||||
row.add_child(_btn_stop)
|
||||
|
||||
_btn_convert = UiKit.button("兑换", 0.0) # 行板紧凑钮豁免——积点兑换(试炼镐;未装配隐藏)
|
||||
_btn_convert.size_flags_vertical = Control.SIZE_SHRINK_CENTER
|
||||
_btn_convert.visible = false
|
||||
_btn_convert.pressed.connect(func(): convert_pressed.emit())
|
||||
row.add_child(_btn_convert)
|
||||
|
||||
var spacer := Control.new()
|
||||
spacer.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
row.add_child(spacer)
|
||||
@@ -136,15 +128,6 @@ func set_refresh_cost(cost: int) -> void:
|
||||
_confirm_lab.text = "RAP−%d · 旧板旗作废" % cost
|
||||
|
||||
|
||||
# 积点兑换钮(迭代 22 秘宝批 T4——试炼镐转化获取 HUD 入口:装配时在列〔visible〕、
|
||||
# 积点未达 disabled;文案=件名+进度。未装配=隐藏零占位)
|
||||
func set_convert_state(assembled: bool, points: int, need: int, display_name: String) -> void:
|
||||
_btn_convert.visible = assembled
|
||||
if assembled:
|
||||
_btn_convert.text = "%s %d/%d" % [display_name, points, need]
|
||||
_btn_convert.disabled = points < need
|
||||
|
||||
|
||||
func set_refresh_state(remaining: int, ready: bool) -> void:
|
||||
_refresh_sub.text = "RAP−%d · 剩 %d 次" % [refresh_cost, remaining]
|
||||
_btn_refresh.disabled = not ready
|
||||
|
||||
@@ -18,7 +18,6 @@ var _board_area: Control # resized 命名转发用(原 lambda 局部捕获
|
||||
signal action_requested(cell: Vector2i, kind: String)
|
||||
signal stop_pressed
|
||||
signal refresh_confirmed
|
||||
signal convert_pressed # 积点兑换意图转发(迭代 22 秘宝批 T4——试炼镐 HUD 入口,源=ap_bar)
|
||||
signal legend_toggled
|
||||
signal hover_forbidden(cell: Vector2i)
|
||||
signal chord_attempted(cell: Vector2i)
|
||||
@@ -83,7 +82,6 @@ func _init() -> void:
|
||||
board_view.chord_attempted.connect(_forward_chord)
|
||||
ap_bar.stop_pressed.connect(_emit_stop_pressed)
|
||||
ap_bar.refresh_confirmed.connect(_emit_refresh_confirmed)
|
||||
ap_bar.convert_pressed.connect(_emit_convert_pressed)
|
||||
ap_bar.legend_toggled.connect(_emit_legend_toggled)
|
||||
|
||||
|
||||
@@ -107,10 +105,6 @@ func _emit_stop_pressed() -> void:
|
||||
stop_pressed.emit()
|
||||
|
||||
|
||||
func _emit_convert_pressed() -> void:
|
||||
convert_pressed.emit()
|
||||
|
||||
|
||||
func _emit_refresh_confirmed() -> void:
|
||||
refresh_confirmed.emit()
|
||||
|
||||
|
||||
@@ -220,4 +220,8 @@ func set_treasure_inventory(items: Array, selected_handle: int) -> void:
|
||||
var border_col: Color = UiKit.GOLD if selected else UiKit.PANEL_BORDER
|
||||
slot.add_theme_stylebox_override("panel",
|
||||
UiKit.panel_flat(UiKit.PANEL_DATA, border_col, 0, 1 if not selected else 2, Vector4(4, 4, 4, 4)))
|
||||
slot.tooltip_text = "%s%s" % [String(rec.get("name", "")), "(已用)" if used else ("(不可用——当前无有效目标)" if not usable else "")]
|
||||
# note=积点进度行(反哺批⑤——自动兑付件悬停浮窗补「积点 N/M」,进度随挖格经组合根重查刷新)
|
||||
var note := String(rec.get("note", ""))
|
||||
slot.tooltip_text = "%s%s%s" % [String(rec.get("name", "")),
|
||||
"(%s)" % note if note != "" else "",
|
||||
"(已用)" if used else ("(不可用——当前无有效目标)" if not usable else "")]
|
||||
Reference in new issue
Block a user