using UnityEngine;
using UnityEngine.InputSystem;
///
/// Финальный терминал аварийной эвакуации на 2-м уровне.
/// При взаимодействии по клавише [E] запускает процедуру открытия эвакуационного шлюза и победный экран.
///
public class FinalExitTerminal : MonoBehaviour
{
[Header("Настройки")]
public float interactionDistance = 3.5f;
public Light statusLight;
public MeshRenderer screenRenderer;
private bool isActivated = false;
private static Transform cachedPlayer;
private void Start()
{
LocatePlayer();
if (statusLight != null)
{
statusLight.color = new Color(1f, 0.4f, 0.1f); // Оранжевый аварийный
}
var col = GetComponent();
if (col == null)
{
var sc = gameObject.AddComponent();
sc.isTrigger = true;
sc.radius = interactionDistance;
}
}
private Transform LocatePlayer()
{
if (cachedPlayer != null) return cachedPlayer;
var pm = Object.FindAnyObjectByType();
if (pm != null) { cachedPlayer = pm.transform; return cachedPlayer; }
var pTag = GameObject.FindWithTag("Player");
if (pTag != null) { cachedPlayer = pTag.transform; return cachedPlayer; }
return null;
}
private void Update()
{
if (isActivated) return;
if (Time.timeScale == 0f) return;
Transform player = LocatePlayer();
if (player == null) return;
float dist = Vector3.Distance(transform.position, player.position);
if (dist <= interactionDistance)
{
var keyboard = Keyboard.current;
if (keyboard != null && (keyboard.eKey.wasPressedThisFrame || keyboard.enterKey.wasPressedThisFrame))
{
ActivateExit();
}
}
}
private void OnTriggerStay(Collider other)
{
if (isActivated) return;
if (Time.timeScale == 0f) return;
if (other.CompareTag("Player") || other.GetComponentInParent() != null)
{
var keyboard = Keyboard.current;
if (keyboard != null && (keyboard.eKey.wasPressedThisFrame || keyboard.enterKey.wasPressedThisFrame))
{
ActivateExit();
}
}
}
public void ActivateExit()
{
if (isActivated) return;
// Проверяем, жив ли босс
var boss = Object.FindAnyObjectByType();
if (boss != null && boss.CurrentState != TitanBossAI.BossState.Dead)
{
GameAudioSynthesizer.PlayErrorCode();
Debug.Log("[FinalExit] ОШИБКА: Шлюз заблокирован протоколом карантина! Устраните Альфа-Мутанта.");
return;
}
isActivated = true;
if (statusLight != null)
{
statusLight.color = new Color(0.2f, 1f, 0.4f); // Зеленый
statusLight.intensity = 4.0f;
}
GameAudioSynthesizer.PlaySuccessChime();
var victoryUI = Object.FindAnyObjectByType(FindObjectsInactive.Include);
if (victoryUI != null)
{
victoryUI.ShowVictoryScreen();
}
else
{
Debug.Log("[FinalExit] Эвакуационный шлюз открыт! Игра завершена!");
}
}
}