43 lines
2.0 KiB
GDScript
43 lines
2.0 KiB
GDScript
## VERTICAL SLICE - NOT FOR PRODUCTION
|
||
## SealMarkLayer——封印印记的独占承载子件(挂 BoardCellUnit 之下、1:1 贴格;复用 cell_type_glow_layer
|
||
## 的子件模式:材质独占、全幅 draw_rect、非零 alpha 触发——不复制其函数体,微光层件零改动)。
|
||
## 层序:印记层在 CellUnit 子树内(低于 BoardView 层的小人精灵——hero 精灵同层后挂天然在上);
|
||
## 迷雾态(fog_state != 0)整层隐藏由宿主 fog_state setter 联动承载(§6.5「封印随格隐没」)。
|
||
## 零动效(不呼吸不脉冲——§2.1 挖掘期唯一在动=接触带微光);参数与色全由 gd 注入
|
||
##(单点 = ui_kit SEAL_* 常量——本件禁内联色值与参数字面值)。
|
||
extends Node2D
|
||
|
||
const _SEAL_SHADER := preload("res://presentation/views/seal_mark.gdshader")
|
||
|
||
var _mat: ShaderMaterial = null
|
||
var _edge := 0.0
|
||
|
||
|
||
# 作用集侧唯一入口(on=false 仅隐不撤——子件生命周期归宿主 _sync_seal_layer)
|
||
func setup(edge: float, on: bool) -> void:
|
||
_edge = edge
|
||
visible = on
|
||
if not on:
|
||
return
|
||
if _mat == null:
|
||
_mat = ShaderMaterial.new()
|
||
_mat.shader = _SEAL_SHADER
|
||
material = _mat
|
||
_mat.set_shader_parameter("cell_px", edge)
|
||
_mat.set_shader_parameter("ring_frac", UiKit.SEAL_RING_FRAC)
|
||
_mat.set_shader_parameter("wall_frac", UiKit.SEAL_WALL_FRAC)
|
||
_mat.set_shader_parameter("arm_frac", UiKit.SEAL_ARM_FRAC)
|
||
_mat.set_shader_parameter("halo_frac", UiKit.SEAL_HALO_FRAC)
|
||
_mat.set_shader_parameter("halo_alpha", UiKit.SEAL_HALO_ALPHA)
|
||
_mat.set_shader_parameter("halo_gamma", UiKit.SEAL_HALO_GAMMA)
|
||
_mat.set_shader_parameter("mark_col", UiKit.SEAL_BLACK)
|
||
queue_redraw()
|
||
|
||
|
||
func _draw() -> void:
|
||
if _edge <= 0.0:
|
||
return
|
||
# 一格全幅:片元着色器按距离场产出环+十字+环外光圈。
|
||
# 输入 alpha 取 1/255(非零)——全透明几何在部分批次路径下会被整条跳过,着色器就跑不到。
|
||
draw_rect(Rect2(Vector2.ZERO, Vector2(_edge, _edge)), Color(1, 1, 1, 1.0 / 255.0))
|