68 lines
1.6 KiB
C#
68 lines
1.6 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class FlashbangScreenOverlay : MonoBehaviour
|
|
{
|
|
[SerializeField] private Image flashImage;
|
|
|
|
private float currentIntensity = 0f;
|
|
private float fadeDuration = 3f;
|
|
private float elapsedTime = 0f;
|
|
private bool isFlashing = false;
|
|
|
|
void Start()
|
|
{
|
|
if (flashImage == null)
|
|
{
|
|
flashImage = GetComponent<Image>();
|
|
}
|
|
|
|
if (flashImage != null)
|
|
{
|
|
Color c = Color.white;
|
|
c.a = 0f;
|
|
flashImage.color = c;
|
|
flashImage.enabled = false;
|
|
}
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
if (!isFlashing || flashImage == null) return;
|
|
|
|
elapsedTime += Time.deltaTime;
|
|
float progress = elapsedTime / fadeDuration;
|
|
|
|
if (progress >= 1f)
|
|
{
|
|
isFlashing = false;
|
|
Color c = Color.white;
|
|
c.a = 0f;
|
|
flashImage.color = c;
|
|
flashImage.enabled = false;
|
|
}
|
|
else
|
|
{
|
|
// Linear fade out for the white flashbang overlay
|
|
Color c = Color.white;
|
|
c.a = Mathf.Lerp(currentIntensity, 0f, progress);
|
|
flashImage.color = c;
|
|
}
|
|
}
|
|
|
|
public void Flash(float duration, float intensity)
|
|
{
|
|
if (flashImage == null) return;
|
|
|
|
flashImage.enabled = true;
|
|
isFlashing = true;
|
|
elapsedTime = 0f;
|
|
fadeDuration = duration;
|
|
currentIntensity = intensity;
|
|
|
|
Color c = Color.white;
|
|
c.a = intensity;
|
|
flashImage.color = c;
|
|
}
|
|
}
|