51 lines
992 B
C#
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);
|
|
}
|
|
}
|
|
}
|