101 lines
5.2 KiB
GDScript
101 lines
5.2 KiB
GDScript
## 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")
|
||
|
||
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)
|
||
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
|
||
queue_redraw()
|
||
|
||
var _glow_layer: Node2D = null
|
||
var base = null # 格面基座层绘制域件(_init 自建)
|
||
var face = null # 格面标识与叠加层绘制域件(_init 自建)
|
||
|
||
|
||
func _init() -> void:
|
||
base = _BASE_LAYER.new(self)
|
||
face = _MARK_OVERLAY.new(self)
|
||
|
||
|
||
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 != "")
|