## VERTICAL SLICE - NOT FOR PRODUCTION ## CellUnit——BoardView SubViewport 世界内逐格渲染件(Node2D),被动绘制壳:_draw 六步时序器 ## +视野迷雾域+微光子件生命周期+格件几何;基座层与标识叠加两绘制域件 _init 自建持有 ## (cell_base_layer/cell_mark_overlay——单一变化原因=迷雾规格与格件节点生命周期)。 ## 无 class_name(类名缓存面纪律)——使用方经 preload 引用。 ## 探针直读冻结成员(glyph/fog_state/plate/glyph_color)与 _glow_layer 住宿主; ## hl_color/hl_visible/dot_visible/mutation_mark 探针读 u.face.*。 extends Node2D const _GLOW_LAYER := preload("res://presentation/views/cell_type_glow_layer.gd") const _BASE_LAYER := preload("res://presentation/views/cell_base_layer.gd") const _MARK_OVERLAY := preload("res://presentation/views/cell_mark_overlay.gd") const _SEAL_LAYER := preload("res://presentation/views/seal_mark_layer.gd") var edge := 46.0: # 格边长(BoardView.set_cell_area 单点驱动) set(v): edge = v if _glow_layer != null and is_instance_valid(_glow_layer): _glow_layer.setup(edge, glow_group) _sync_seal_layer() queue_redraw() var cell := Vector2i.ZERO # 板坐标(诊断观测面) # ── 未开格类型微光(英雄 8 向相邻未开格的组粒度类型提示) # 作用集 = 可挖域 ∩ 身份可查格,由 BoardView 侧派生下发;本件只承接绘制与子件生命周期。 # 静态:不呼吸、不入动效预算;相位门控(结算/道具窗口态隐藏)在 BoardView 侧。 var glow_group := 0: set(v): if glow_group != v: glow_group = v _sync_glow_layer() var glyph := "": # 文字位——数字/雷/封印/人/?(现行视觉封印与数字互斥,同位承载;探针直读冻结) set(v): glyph = v queue_redraw() var glyph_color := UiKit.INK: # 文字色(墨族/雷朱/封印黑/小人蓝;探针直读冻结) set(v): glyph_color = v queue_redraw() var plate := false # 数字色牌开关(BoardView paint 按已开格 glyph 写入——原则二;探针直读冻结) # ── 视野迷雾呈现态(纯呈现零逻辑;规格=art-bible §6.5 v3.5,现行事实源=HUD框架「视野迷雾」节)── # 0=正常(灯光区内)/ 1=全黑(区外未开格——现行事实源「区外未开格=全黑不渲染」不透明档)/ 2=记忆态(区外已开格灰显可读) var fog_state := 0: # 探针直读冻结 set(v): if fog_state != v: fog_state = v _sync_seal_layer() # 封印随格隐没(§6.5——雾态 !=0 整层隐藏) queue_redraw() # ── 封印印记(卡④ 法阵化——着色器按格边参数化绘制,替代 tex_seal 贴图整格铺放)── # BoardView paint 按格态写 seal_on(封印格=未开且未移除);子件 on 才建、off 撤、edge 变更重注入。 var seal_on := false: set(v): if seal_on != v: seal_on = v _sync_seal_layer() var _glow_layer: Node2D = null var _seal_layer: Node2D = null # 封印印记子件(seal_on 才建——作用集=封印格) var base = null # 格面基座层绘制域件(_init 自建) var face = null # 格面标识与叠加层绘制域件(_init 自建) # 封印子件生命周期单点:on 才建、off 撤;visible = seal_on 且非雾态(§6.5 随格隐没) func _sync_seal_layer() -> void: if seal_on and _seal_layer == null: _seal_layer = _SEAL_LAYER.new() add_child(_seal_layer) if _seal_layer != null and not is_instance_valid(_seal_layer): _seal_layer = null return if _seal_layer == null: return if not seal_on: _seal_layer.queue_free() _seal_layer = null return _seal_layer.setup(edge, fog_state == 0) func _init() -> void: base = _BASE_LAYER.new(self) face = _MARK_OVERLAY.new(self, _set_badge_mask) # 徽章遮罩下发口(构造交付 Callable——glow 层引用自持本件,face 零私取回引) func _set_badge_mask(on: bool) -> void: if _glow_layer != null and is_instance_valid(_glow_layer): _glow_layer.set_badge_mask(on) func _draw() -> void: var rect := Rect2(Vector2.ZERO, Vector2(edge, edge)) base.draw_base(self, rect) # 基座层整树(描边/立面/投影/接触带/倒角与其补画序) face.draw_marks(self, rect) # 变异标记 face.draw_glyph_layer(self, rect, glyph, glyph_color, plate) # 字形/色牌/徽章/封印 face.draw_overlay_under(self, rect) # 点迹+高亮(雾层由宿主夹在其后) _draw_fog_layer(rect) # 宿主迷雾域(原位——雾夹在 hl 与 removed 之间) face.draw_removed_dim(self, rect) # 退色层 ## ⑥ 视野迷雾层(最顶遮罩,§6.5 落文): ## 全黑=不透明纯黑盖全部叠层(含封印印/徽章/高亮——封印印记随格隐没,§6.5 显式推论); ## 记忆态=记忆板素色压平(纹理免疫——色牌/封印印/徽章随板隐没)+数字记忆墨重画(数字可读硬指标 ≥4.5:1) func _draw_fog_layer(rect: Rect2) -> void: if fog_state == 1: draw_rect(rect, Color(0, 0, 0, 1.0), true) elif fog_state == 2: _draw_fog_memory(rect) ## 记忆态换装域(demo 口径「地板纹理 + 灰罩 α.66」: ## 地板纹理原样直画 + FOG_MEMORY_PLATE α.66 灰罩压顶;素材零改动、格边长零改动。 ## 记忆墨 FOG_MEMORY_INK 对合成底归一后(真实渲染面)三关 5.71–5.93:1 ≥4.5:1(§7.2 硬指标; ## 测点行值与素材随动,见 ui_contrast_probe 迷雾段)) func _draw_fog_memory(rect: Rect2) -> void: if base.tex_base != null: draw_texture_rect(base.tex_base, rect, false) draw_rect(rect, Color(UiKit.FOG_MEMORY_PLATE, 0.66), true) if glyph != "": face.draw_centered_text(self, rect, glyph, UiKit.FOG_MEMORY_INK, maxi(18, int(ceil(edge * 0.5)))) # 字号下限 18(§7.4 冻结公式同源) # 微光子件生命周期:有组才建、组变即换、无组即撤——作用集 ≤8 格常驻, # 其余格零节点零绘制成本。与父件 _draw() 分离的三条理由见本件头注(命令序列/重绘预算/材质挂点)。 func _sync_glow_layer() -> void: if glow_group == 0: if _glow_layer != null and is_instance_valid(_glow_layer): _glow_layer.queue_free() _glow_layer = null return if _glow_layer == null or not is_instance_valid(_glow_layer): _glow_layer = _GLOW_LAYER.new() add_child(_glow_layer) _glow_layer.setup(edge, glow_group) _glow_layer.set_badge_mask(face.badge_glyph != "")