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;
void Start()
{
if (deathScreen != null) deathScreen.SetActive(false);
if (restartButton != null) restartButton.onClick.AddListener(RestartGame);
audioSource = GetComponent<AudioSource>();
if (Camera.main != null) playerCam = Camera.main.transform;
}
void Update()
{
// Если Олег погиб, плавно разворачиваем его камеру прямо в лицо монстру
if (isDead && playerCam != null && monsterLookTarget != null)
{
// Направляем взгляд камеры на уровень груди/головы монстра
Vector3 targetDir = (monsterLookTarget.position + Vector3.up * 1.5f) - playerCam.position;
Quaternion targetRot = Quaternion.LookRotation(targetDir);
playerCam.rotation = Quaternion.Slerp(playerCam.rotation, targetRot, 10f * Time.unscaledDeltaTime);
}
}
// Метод запускается в момент поимки
public void Trigger3DDeath(GameObject player, GameObject monster)
{
if (isDead) return;
isDead = true;
monsterLookTarget = monster.transform;
// 1. Отключаем скрипт ходьбы и мыши игрока, чтобы он замер от ужаса
if (player.TryGetComponent(out UnityStandardAssets.Characters.FirstPerson.FirstPersonController controller))
{
controller.enabled = false;
}
// 2. Включаем крик монстра
if (audioSource != null) audioSource.Play();
// 3. Через 2 секунды (пока монстр проигрывает 3D-анимацию атаки перед глазами) включаем экран смерти
Invoke("ShowDeathScreen", 2.0f);
}
void ShowDeathScreen()
{
// Замораживаем физику и показываем мышку для кнопки
Time.timeScale = 0f;
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
if (deathScreen != null) deathScreen.SetActive(true);
}
void RestartGame()
{
Time.timeScale = 1f;
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}