using UnityEngine;
using UnityEngine.UI;
///
/// Полноэкранный визуальный эффект акустического ослепления (подавления чувств).
/// Активируется во время крика Босса: полностью затемняет экран и гасит эхолокацию.
///
public class AcousticJammerOverlay : MonoBehaviour
{
private Image overlayImage;
private CanvasGroup canvasGroup;
private float currentAlpha = 0f;
public static AcousticJammerOverlay Create(Transform hudCanvas)
{
var old = hudCanvas.Find("AcousticJammerOverlay");
if (old != null) DestroyImmediate(old.gameObject);
GameObject root = new GameObject("AcousticJammerOverlay", typeof(RectTransform), typeof(CanvasGroup));
root.transform.SetParent(hudCanvas, false);
RectTransform rt = root.GetComponent();
rt.anchorMin = Vector2.zero;
rt.anchorMax = Vector2.one;
rt.sizeDelta = Vector2.zero;
// Черный экран с легким темно-багровым оттенком
GameObject imgObj = new GameObject("VignetteBlackout", typeof(RectTransform), typeof(CanvasRenderer), typeof(Image));
imgObj.transform.SetParent(root.transform, false);
RectTransform imgRt = imgObj.GetComponent();
imgRt.anchorMin = Vector2.zero;
imgRt.anchorMax = Vector2.one;
imgRt.sizeDelta = Vector2.zero;
Image img = imgObj.GetComponent();
img.color = new Color(0.01f, 0.005f, 0.005f, 0.98f);
img.raycastTarget = false;
AcousticJammerOverlay overlay = root.AddComponent();
overlay.overlayImage = img;
overlay.canvasGroup = root.GetComponent();
overlay.canvasGroup.alpha = 0f;
overlay.canvasGroup.blocksRaycasts = false;
overlay.canvasGroup.interactable = false;
return overlay;
}
private void Awake()
{
if (canvasGroup == null) canvasGroup = GetComponent();
}
private void Update()
{
bool isBlinded = EchoTrigger.Instance != null && EchoTrigger.Instance.IsBlinded;
float targetAlpha = isBlinded ? 1f : 0f;
float speed = isBlinded ? 14f : 3.5f; // Мгновенно ослепляет, плавно возвращает зрение
currentAlpha = Mathf.MoveTowards(currentAlpha, targetAlpha, speed * Time.deltaTime);
if (canvasGroup != null)
{
canvasGroup.alpha = currentAlpha;
}
}
}