using Godot; using Newlon.Components; public partial class FlashShaderController : Node { [Export] public float flashTime = 0.5f; [Export] private ShaderMaterial shaderMaterial; private uint toggleStack = 0; private Tween flashTween; public void DamageFlash() { Flash(); } public void Flash(float customFlashTime = 0) { if (flashTween != null) flashTween.Kill(); var time = flashTime; if (customFlashTime > 0) time = customFlashTime; flashTween = CreateTween(); flashTween.TweenMethod(Callable.From(SetBlend), 1.0, 0.0, time); } public void Select() { toggleStack++; UpdateSelected(); } public void Deselect() { toggleStack--; UpdateSelected(); } private void SetBlend(float blend) { shaderMaterial.SetShaderParameter("blend", blend); } private void UpdateSelected() { if (toggleStack > 0) { shaderMaterial.SetShaderParameter("selected", true); } else { shaderMaterial.SetShaderParameter("selected", false); } } }