Kursach_StealthAction/Assets/Scripts/AcousticJammerOverlay.cs
2026-10-23 15:44:09 +03:00

69 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// Полноэкранный визуальный эффект акустического ослепления (подавления чувств).
/// Активируется во время крика Босса: полностью затемняет экран и гасит эхолокацию.
/// </summary>
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<RectTransform>();
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<RectTransform>();
imgRt.anchorMin = Vector2.zero;
imgRt.anchorMax = Vector2.one;
imgRt.sizeDelta = Vector2.zero;
Image img = imgObj.GetComponent<Image>();
img.color = new Color(0.01f, 0.005f, 0.005f, 0.98f);
img.raycastTarget = false;
AcousticJammerOverlay overlay = root.AddComponent<AcousticJammerOverlay>();
overlay.overlayImage = img;
overlay.canvasGroup = root.GetComponent<CanvasGroup>();
overlay.canvasGroup.alpha = 0f;
overlay.canvasGroup.blocksRaycasts = false;
overlay.canvasGroup.interactable = false;
return overlay;
}
private void Awake()
{
if (canvasGroup == null) canvasGroup = GetComponent<CanvasGroup>();
}
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;
}
}
}