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] Эвакуационный шлюз открыт! Игра завершена!"); } } }