iter34 卡④ T1-T3: 信息迷雾类型可见性——层距 N+Boss/候选豁免+单圈回雾(N 读表)+呈现显隐决策面+画布大图断言与探针常数同源
- level_table.gd: info_visible_layers 字段(int≥1)+validate 越域 domain 错;level.tres 挂 2 - level_runner.gd: type_visible_ids() 纯函数(入口 BFS 层差 ≤N ∪ Boss ∪ 候选,锚=当前节点层/入口停点 0;visited 不豁免)+_bfs_layers() - level_map_screen.gd: node_display() 静态决策面+display_probe()+_draw_graph 图标/文字/Boss 描边三处改读决策面(结构通道零改动) - 新单测 level_map_type_vis_test(26 断言)/level_map_info_fog_test(19 断言);run_all 注册两行 - smoke_all ⑬ 真图 L2 入口停点可见性组(+5 断言);ui_input_probe ⑬ 常数锚同源化+⑱ 雾不扩可点域 轻闸读数:冒烟 1211 项 0 失败(主区基线 1206,+5=新增组)/probe_gate --click 全绿
This commit is contained in:
1 parent
43c0f3c118
commit
ed8e0f9f3d
11 files changed
+571
-21
No files matched your search
@@ -414,6 +414,52 @@ func visited_ids() -> Array:
|
||||
return out
|
||||
|
||||
|
||||
# ---- 类型可见性读面(信息迷雾 v2.1:近处见类型,远处起雾)----
|
||||
# 可见集 = Boss/终点(type=="boss")∪ 当前候选(下一跳恒可见——生成承诺)∪
|
||||
# {id : |层(id) − 锚层| ≤ N};N = db.level.info_visible_layers(禁硬编码);
|
||||
# 锚层 = 当前节点层,入口停点(无当前节点)= 0;层 = 入口 BFS 深度(与呈现层分层同源口径)。
|
||||
# 纯函数零状态:已过节点不豁免(单圈语义,零累积记忆);断点快照零新增字段。
|
||||
func type_visible_ids() -> Array[int]:
|
||||
var out: Array[int] = []
|
||||
var layers := _bfs_layers()
|
||||
var anchor := 0
|
||||
var cur := current_node()
|
||||
if not cur.is_empty():
|
||||
anchor = int(layers.get(_node_id(cur), 0))
|
||||
var n: int = int(db.level.info_visible_layers)
|
||||
for node in nodes():
|
||||
var nid := _node_id(node)
|
||||
if String(node.get("type", "")) == "boss" \
|
||||
or (layers.has(nid) and absi(int(layers[nid]) - anchor) <= n):
|
||||
out.append(nid)
|
||||
for cid in next_candidate_ids():
|
||||
if not out.has(int(cid)):
|
||||
out.append(int(cid))
|
||||
return out
|
||||
|
||||
|
||||
# 入口 BFS 层表(id → 层深;入口层 0、出边逐层 +1,与 LevelMapScreen._assign_layers 同源)。
|
||||
# 不可达节点不落表(加载期孤儿校验应已拦截)。
|
||||
func _bfs_layers() -> Dictionary:
|
||||
var layers := {}
|
||||
var entry := _entry_node()
|
||||
if entry.is_empty():
|
||||
return layers
|
||||
var queue: Array[Dictionary] = [entry]
|
||||
layers[_node_id(entry)] = 0
|
||||
var i := 0
|
||||
while i < queue.size():
|
||||
var cur: Dictionary = queue[i]
|
||||
i += 1
|
||||
var d := int(layers[_node_id(cur)])
|
||||
for nxt in _out_nodes(cur):
|
||||
var nid := _node_id(nxt)
|
||||
if not layers.has(nid):
|
||||
layers[nid] = d + 1
|
||||
queue.append(nxt)
|
||||
return layers
|
||||
|
||||
|
||||
func awaiting_choice() -> bool:
|
||||
return _phase == Phase.AWAITING_CHOICE
|
||||
|
||||
|
||||
Reference in new issue
Block a user