diff --git a/game/presentation/curio_interact_controller.gd b/game/presentation/curio_interact_controller.gd index df3f20fc..3b16d2dc 100644 --- a/game/presentation/curio_interact_controller.gd +++ b/game/presentation/curio_interact_controller.gd @@ -78,7 +78,7 @@ func on_presented(payload: Dictionary) -> void: return ctx.views.end_overlay.open_victory(Narrator.battle_end_text("victory", false), "继续", ctx.views.board_view.get_global_rect(), - "%s\n%s" % [String(ctx.flow.gp_summary.call()), Narrator.bonus_keystone_line(payload)]) + {"gp_summary": "%s\n%s" % [String(ctx.flow.gp_summary.call()), Narrator.bonus_keystone_line(payload)]}) ctx.flow.open_modal_after_playback.call(ctx.views.end_overlay) ctx.flow.refresh_presentations.call() diff --git a/game/presentation/views/board_cell_unit.gd b/game/presentation/views/board_cell_unit.gd index 38ceac79..f1c99076 100644 --- a/game/presentation/views/board_cell_unit.gd +++ b/game/presentation/views/board_cell_unit.gd @@ -198,7 +198,8 @@ func _draw_glyph_layer(rect: Rect2) -> void: draw_texture_rect(st.tex_mutation, rect, false) # ③ 数字/徽章(数字 ≥ 格高 50% 墨族对格底 ≥4.5:1;徽章右下角金,遮蔽态 = "?") if glyph != "": - _draw_digit_plate() + if plate: + _draw_digit_plate() if st.tex_glyph != null: draw_texture_rect(st.tex_glyph, rect, false) else: diff --git a/game/probe/ui_input_probe.gd b/game/probe/ui_input_probe.gd index ba6c4ac7..669bd081 100644 --- a/game/probe/ui_input_probe.gd +++ b/game/probe/ui_input_probe.gd @@ -231,8 +231,8 @@ func _ready() -> void: if bv.hover_probe() != seal_t: _problems.append("case① 悬停未到达(_hover=%s 应=%s)" % [bv.hover_probe(), seal_t]) var u1 = bv.cells_probe()[seal_t] - if not u1.hl_visible or u1.hl_color != UiKit.GOLD: - _problems.append("case① 悬停金框缺失(visible=%s color=%s)" % [str(u1.hl_visible), str(u1.hl_color)]) + if not u1.st.hl_visible or u1.st.hl_color != UiKit.GOLD: + _problems.append("case① 悬停金框缺失(visible=%s color=%s)" % [str(u1.st.hl_visible), str(u1.st.hl_color)]) if bv.mouse_default_cursor_shape != Input.CURSOR_CROSS: _problems.append("case① 挖掘光标未切十字(%d)" % bv.mouse_default_cursor_shape) # ---- case② 悬停禁入:hover_forbidden 信号 + 灰禁红框 ---- @@ -240,14 +240,14 @@ func _ready() -> void: await get_tree().process_frame if _forbids.is_empty() or _forbids[_forbids.size() - 1] != forbid_t: _problems.append("case② hover_forbidden 未达(%s)" % [str(_forbids)]) - if bv.cells_probe()[forbid_t].hl_color != UiKit.RED_FORBID: - _problems.append("case② 禁入红框缺失(color=%s)" % str(bv.cells_probe()[forbid_t].hl_color)) + if bv.cells_probe()[forbid_t].st.hl_color != UiKit.RED_FORBID: + _problems.append("case② 禁入红框缺失(color=%s)" % str(bv.cells_probe()[forbid_t].st.hl_color)) # ---- case③ 悬停已开格:路径预览点迹 + 移动光标 ---- _push_motion(_pos(bv, reveal_t)) await get_tree().process_frame var dots := 0 for c in bv.cells_probe(): - if bv.cells_probe()[c].dot_visible: + if bv.cells_probe()[c].st.dot_visible: dots += 1 if dots < 1: _problems.append("case③ 路径预览点迹未亮(dots=0)") @@ -266,8 +266,8 @@ func _ready() -> void: # 掩盖)——有盘断言纹理在槽、缺盘断言字形回退,两分支防双写踩踏复活 ---- var seal_unit = bv.cells_probe().get(seal_t) if bv._palette.seal_tex != null: - if seal_unit == null or seal_unit.tex_seal != bv._palette.seal_tex: - _problems.append("case④b 封印纹理槽未挂封印印记纹理(tex_seal=%s)" % ["无单元" if seal_unit == null else str(seal_unit.tex_seal)]) + if seal_unit == null or seal_unit.st.tex_seal != bv._palette.seal_tex: + _problems.append("case④b 封印纹理槽未挂封印印记纹理(tex_seal=%s)" % ["无单元" if seal_unit == null else str(seal_unit.st.tex_seal)]) elif seal_unit == null or seal_unit.glyph != "封": _problems.append("case④b 缺盘字形回退缺失(glyph=%s)" % ["无单元" if seal_unit == null else String(seal_unit.glyph)]) # ---- case⑤ 双击 chord:禁入格双左击(核心拒挖零副作用)→ chord_attempted ---- @@ -371,12 +371,12 @@ func _ready() -> void: if mark_t.x >= 0: bv.set_variant_mark_resolver(func(_c): return "flat_damage") bv.refresh() - if String(bv.cells_probe()[mark_t].mutation_mark) != "flat_damage": - _problems.append("case⑭ 变异角标未落位(mutation_mark=%s)" % str(bv.cells_probe()[mark_t].mutation_mark)) + if String(bv.cells_probe()[mark_t].st.mutation_mark) != "flat_damage": + _problems.append("case⑭ 变异角标未落位(mutation_mark=%s)" % str(bv.cells_probe()[mark_t].st.mutation_mark)) bv.set_variant_mark_resolver(Callable()) bv.refresh() - if String(bv.cells_probe()[mark_t].mutation_mark) != "": - _problems.append("case⑭ 角标未随 resolver 复位(mutation_mark=%s)" % str(bv.cells_probe()[mark_t].mutation_mark)) + if String(bv.cells_probe()[mark_t].st.mutation_mark) != "": + _problems.append("case⑭ 角标未随 resolver 复位(mutation_mark=%s)" % str(bv.cells_probe()[mark_t].st.mutation_mark)) else: _problems.append("case⑭ 无未开格可验(板面异常)") # ---- case⑮ 视野迷雾(三态呈态/半径圈/移动跟随/开关两态零扰动/提灯插值位; diff --git a/game/probe/ui_struct_probe.gd b/game/probe/ui_struct_probe.gd index 77c2f02c..cda2253a 100644 --- a/game/probe/ui_struct_probe.gd +++ b/game/probe/ui_struct_probe.gd @@ -281,11 +281,11 @@ func _pick_battle_node(main: Node) -> int: # 入口/兑付停点走 level_screen.open_choices 直传(不写 _pending_candidates)—— # 候选从视图态取:_cand_ids × runner.nodes() 的 type(编号解析=node_id_of 单一出口) var ls: Node = main.level_screen - if ls._runner == null: + if ls._map._runner == null: return -1 - for nd in ls._runner.nodes(): + for nd in ls._map._runner.nodes(): if String(nd.get("type", "")) in ["battle", "boss"]: - var nid: int = ls._runner.node_id_of(nd) + var nid: int = ls._map._runner.node_id_of(nd) if nid in ls._cand_ids: return nid return -1 diff --git a/game/tests/unit/data_config/config_db_test.gd b/game/tests/unit/data_config/config_db_test.gd index 75916573..68bcc7b6 100644 --- a/game/tests/unit/data_config/config_db_test.gd +++ b/game/tests/unit/data_config/config_db_test.gd @@ -137,16 +137,16 @@ func _test_shop_accessors(db) -> void: var got: Dictionary = db.run.shop.product_row(String(first.product_id)) Kit.check("shop_product_row 按 product_id 精确命中首行", got == first) Kit.check("shop_product_row 未知 id 返回空字典(容错通道)", db.run.shop.product_row("no_such_product_id__").is_empty()) - var tier_rows: Array = db._shop_rows("gp_drops") + var tier_rows: Array = db.run.shop.gp_drops if not tier_rows.is_empty(): var tier0: String = String(tier_rows[0].tier) Kit.check("shop_gp_drop_row 按 tier 命中", not db.run.shop.gp_drop_row(tier0).is_empty()) - var bonus_rows: Array = db._shop_rows("level_gp_bonus") + var bonus_rows: Array = db.run.shop.level_gp_bonus if not bonus_rows.is_empty(): var blv: int = int(bonus_rows[0].level_index) Kit.check("shop_level_gp_bonus 按关卡序号命中行值", db.run.shop.level_gp_bonus_at(blv) == int(bonus_rows[0].bonus)) Kit.check("shop_level_gp_bonus 未登记关卡返回 0(兜底通道)", db.run.shop.level_gp_bonus_at(-1) == 0) - var price_rows: Array = db._shop_rows("price_level_bonus") + var price_rows: Array = db.run.shop.price_level_bonus if not price_rows.is_empty(): var plv: int = int(price_rows[0].level_index) Kit.check("shop_price_level_bonus 按关卡序号命中行值", db.run.shop.price_level_bonus_at(plv) == int(price_rows[0].bonus))