extends ColorRect
## Drives the fullscreen PS1/CRT post-process (ps1_filter.gdshader) from the DP
## registry so every uniform is live-tunable in the console. `show_ps1` toggles the
## whole overlay; the ps1_* floats feed the matching shader uniforms 1:1.

# DP param key → shader uniform name. Keys are registered in debug_params.gd with
# ranges that mirror the shader's hint_range, so nothing here can go out of bounds.
const _UNIFORMS := {
	"ps1_pixel_scale":      "pixel_scale",
	"ps1_color_depth":      "color_depth",
	"ps1_dither_strength":  "dither_strength",
	"ps1_scanline_strength": "scanline_strength",
	"ps1_roll_speed":       "roll_speed",
	"ps1_roll_strength":    "roll_strength",
}

@onready var _mat: ShaderMaterial = material as ShaderMaterial


func _ready() -> void:
	DP.any_changed.connect(_on_param_changed)
	_apply_all()


# reset_all() fires with key "__all__"; a single edit fires with its own key. Either
# way just re-push everything — it's a handful of cheap uniform writes.
func _on_param_changed(_key: String, _value: Variant) -> void:
	_apply_all()


func _apply_all() -> void:
	visible = DP.b("show_ps1")
	if _mat == null:
		return
	for key: String in _UNIFORMS:
		_mat.set_shader_parameter(_UNIFORMS[key], DP.f(key))
