newlon/scripts/entities/FlashShaderController.cs
2025-07-23 16:07:55 +05:00

51 lines
992 B
C#

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<float>(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);
}
}
}