Game/Components/SonarComponent.cs
public class SonarComponent : Component
{
[RequireComponent] public GaussianSplatVolume Volume { get; set; }
[Property] public float Intensity { get; set; } = 1f;
[Property] public float TargetSize { get; set; } = 300f;
[Property] public float TargetSpeed { get; set; } = 5f;
[Property] public float TimeToFade { get; set; } = 1f;
[Property] public float FadeTime { get; set; } = 1f;
[Property] public bool IsSubtractive { get; set; } = false;
public bool IsDone = false;
TimeSince timeSinceStart = 0f;
protected override void OnAwake()
{
timeSinceStart = 0;
}
protected override void OnUpdate()
{
Volume.Mode = IsSubtractive ? SplatVolumeMode.Subtract : SplatVolumeMode.Add;
Volume.Radius = Volume.Radius.LerpTo( TargetSize, TargetSpeed * Time.Delta );
if ( IsDone ) return;
if ( IsSubtractive )
{
Volume.Intensity += Time.Delta / FadeTime * Intensity;
if ( Volume.Intensity >= Intensity )
{
IsDone = true;
Volume.Intensity = Intensity;
}
}
else
{
if ( timeSinceStart >= TimeToFade )
{
Volume.Intensity -= Time.Delta * FadeTime * Intensity;
if ( Volume.Intensity <= 0f )
{
GameObject.Destroy();
}
}
else
{
Volume.Intensity = Intensity;
}
}
}
}