feat(ux): T2 独立屏落地——RouteOverlay 升格 LevelMapScreen+组合根屏级互斥
类/文件改名 route_overlay.gd→level_map_screen.gd(RouteOverlay 退役,uid 随迁);屏底=暗幕 0.6 半透→不透明 BG_ROOT+石纹底噪(TEX_BACKDROP_STONE load_tex 守卫缺位纯色回退,spec Layout 形态升格);open_choices 进入转场 alpha 淡入 200ms(UiKit.motion;就地刷新/模态栈恢复不重放)。 组合根:_battle_root 宿主引用留存+_level_screen_active 状态+_enter/_exit_level_screen 单一出口(进屏隐战斗屏/出屏显战斗屏);_on_choices_presented 走进屏;_on_route_chosen 出屏分支;_on_adventure_finished 强制回战斗屏呈现摘要(放弃入口终局兜底)。_input_locked/模态登记序(节点层与商店层之间)不变——兑付覆盖层域内弹出的遮挡恢复语义由模态栈零改动复用。 探针机械改名 main.route_overlay→main.level_screen(ui_probe 5/ui_click_probe 4/ui_input 5/ui_tune 2 处)。坑⑤再证:新 class_name 后未刷编辑器缓存致四探针 Parse Error 超时——--editor --quit 后全绿。轻闸=冒烟 557/0+五探针 PASS。
This commit is contained in:
1 parent
30002f85fd
commit
ae2ca4ffd4
7 files changed
+78
-37
No files matched your search
+25
-7
@@ -7,14 +7,16 @@
|
||||
# ③ 放弃冒险二次确认(布局决策 3)——首击转确认态(文案+危险红脉冲约 3 秒超时回落),二击提交
|
||||
# ④ 顶栏语境:关卡名(level_row.display_name)+ GP 常驻徽章(2026-09-26 二轮拍板去向落地面)
|
||||
# ⑤ 底部状态栏(布局决策 4):生命/属性/本关加成三组常读(零加成隐藏),放弃按钮右端异位
|
||||
# 节点图选路覆盖层(模态):兑付确认后由组合根打开。零自动推进的玩家停点语义:唯一前进通道 =
|
||||
# 关卡画面(独立屏,Level Map Screen——2026-09-28 形态升格批 M-2 迭代 3 T2:原 RouteOverlay 模态
|
||||
# 覆盖层升格独立屏,spec level-map.md 形态章节同批改写):全屏不透明独占呈现——激活期战斗屏宿主
|
||||
# 由组合根整体隐藏(非暗幕半透、零透出)。零自动推进的玩家停点语义不变:唯一前进通道 =
|
||||
# 图上点候选节点 → route_chosen(node_id) → 组合根转 runner.pick_next_node。
|
||||
# 高内聚边界:只读 runner 成文出口(nodes()/visited_ids()/node_index/next_candidate_ids()/level_row/
|
||||
# hero_hp/gp/effective_*/bonus)做渲染,无任何写面;图形为程序化占位质量(占位纪律)。
|
||||
# 放弃入口(2026-09-21 用户拍板「放弃接口也要有」——台账 119):选路停点 = 天然非战斗期(接口契约:
|
||||
# 战斗中放弃一律拒绝),按钮常驻底栏右端;可见性归组合根(只在冒险模式开——放弃的语义对象是
|
||||
# "整局冒险";调试两层无节点图天然不可达)。
|
||||
class_name RouteOverlay
|
||||
class_name LevelMapScreen
|
||||
extends Control
|
||||
|
||||
signal route_chosen(node_id: int)
|
||||
@@ -54,13 +56,23 @@ var _confirm_left := 0.0 # 确认态剩余秒数(_process 倒计
|
||||
|
||||
|
||||
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)
|
||||
# 独立屏底(形态升格 2026-09-28——spec Layout:深底+石纹底噪铺满;底纹缺位回退纯色——load_tex 守卫)
|
||||
var base := ColorRect.new()
|
||||
base.color = UiKit.BG_ROOT
|
||||
base.set_anchors_preset(Control.PRESET_FULL_RECT)
|
||||
add_child(base)
|
||||
var noise := UiKit.load_tex(UiKit.TEX_BACKDROP_STONE)
|
||||
if noise != null:
|
||||
var tex := TextureRect.new()
|
||||
tex.texture = noise
|
||||
tex.stretch_mode = TextureRect.STRETCH_TILE
|
||||
tex.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST
|
||||
tex.set_anchors_preset(Control.PRESET_FULL_RECT)
|
||||
tex.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
base.add_child(tex)
|
||||
var center := CenterContainer.new()
|
||||
center.set_anchors_preset(Control.PRESET_FULL_RECT)
|
||||
dim.add_child(center)
|
||||
base.add_child(center)
|
||||
var box := VBoxContainer.new()
|
||||
box.add_theme_constant_override("separation", 10)
|
||||
center.add_child(box)
|
||||
@@ -195,6 +207,7 @@ func _process(delta: float) -> void:
|
||||
|
||||
# 打开选路口(cands = 候选节点引用数组;runner 只读用于整图渲染与状态栏刷新)
|
||||
func open_choices(cands: Array, runner) -> void:
|
||||
var was_visible := visible # 进入转场判据(就地刷新/模态栈恢复不重放淡入)
|
||||
_runner = runner
|
||||
_hover_id = -1
|
||||
_reset_abandon_confirm()
|
||||
@@ -213,6 +226,11 @@ func open_choices(cands: Array, runner) -> void:
|
||||
_fit_canvas(_runner.nodes())
|
||||
_refresh_status()
|
||||
visible = true
|
||||
if not was_visible:
|
||||
# 独立屏淡入(spec Transitions:约 200ms;alpha 淡入非明度变化——art-bible §2 明度恒定)
|
||||
modulate.a = 0.0
|
||||
var ftw := create_tween()
|
||||
ftw.tween_property(self, "modulate:a", 1.0, UiKit.motion(0.2))
|
||||
|
||||
|
||||
# 画布随图自适应(level-map.md Layout:画布宽随层数、高随同层最大节点数——公式与 _layout 同源;
|
||||
File renamed without changes.
Reference in new issue
Block a user