using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class GameOverManager : MonoBehaviour
{
[Header("Ссылки на интерфейс")]
public GameObject deathScreen; // Твоя панель DeathScreen
public Button restartButton; // Кнопка RestartButton
private AudioSource audioSource;
private bool isDead = false;
private Transform playerCam;
private Transform monsterLookTarget;
private Image blackOverlay; // Компонент цвета панели
private float fadeTimer = 0f;
void Start()
{
if (deathScreen != null)
{
deathScreen.SetActive(false);
// Получаем компонент картинки с панели, чтобы менять прозрачность
blackOverlay = deathScreen.GetComponent<Image>();
}
if (restartButton != null) restartButton.onClick.AddListener(RestartGame);
audioSource = GetComponent<AudioSource>();
if (Camera.main != null) playerCam = Camera.main.transform;
}
void Update()
{
// 1. Плавно разворачиваем камеру в лицо монстру
if (isDead && playerCam != null && monsterLookTarget != null)
{
Vector3 targetDir = (monsterLookTarget.position + Vector3.up * 1.3f) - playerCam.position;
Quaternion targetRot = Quaternion.LookRotation(targetDir);
playerCam.rotation = Quaternion.Slerp(playerCam.rotation, targetRot, 8f * Time.unscaledDeltaTime);
// 2. ПЛАВНОЕ ЗАТЕМНЕНИЕ ЭКРАНА В ЧЕРНЫЙ:
if (blackOverlay != null)
{
fadeTimer += Time.unscaledDeltaTime * 0.7f; // Скорость потемнения (за 1.5-2 секунды)
Color c = blackOverlay.color;
c.a = Mathf.Clamp01(fadeTimer); // Плавно увеличиваем прозрачность до 1
blackOverlay.color = c;
}
}
}
public void Trigger3DDeath(GameObject player, GameObject monster)
{
if (isDead) return;
isDead = true;
monsterLookTarget = monster.transform;
// Отключаем физическое движение игроку
if (player.TryGetComponent(out Rigidbody rb)) rb.isKinematic = true;
// Включаем крик скримера
if (audioSource != null) audioSource.Play();
// Сразу включаем объект панели, но делаем её прозрачной
if (deathScreen != null)
{
deathScreen.SetActive(true);
if (blackOverlay != null)
{
Color c = blackOverlay.color;
c.a = 0f; // Старт с полной прозрачности
blackOverlay.color = c;
}
// Прячем кнопку "Начать заново" во время анимации, чтобы она не мешала скримеру
if (restartButton != null) restartButton.gameObject.SetActive(false);
}
// Через 2 секунды полностью останавливаем игру и показываем кнопку перезапуска
Invoke("ShowRestartButton", 2.0f);
}
void ShowRestartButton()
{
Time.timeScale = 0f;
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
if (restartButton != null) restartButton.gameObject.SetActive(true);
}
void RestartGame()
{
Time.timeScale = 1f;
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}