using System.Collections; using UnityEngine; namespace NavKeypad { public class OpenableObject : MonoBehaviour { [SerializeField] protected float openOrCloseTime = 1f; [SerializeField] private bool isLockedByKeypad = false; // Новый флаг protected float openOrCloseLerp; protected bool isOpen = true; public bool IsLockedByKeypad => isLockedByKeypad; // Геттер для проверки public virtual IEnumerator Close() { while (openOrCloseLerp > 0f) { openOrCloseLerp -= Time.deltaTime / openOrCloseTime; yield return null; } openOrCloseLerp = 0f; } public virtual IEnumerator Open() { while (openOrCloseLerp < 1f) { openOrCloseLerp += Time.deltaTime / openOrCloseTime; yield return null; } openOrCloseLerp = 1f; } public void OpenOrClose() { if (isLockedByKeypad && isOpen) // Блокируем, если дверь под кодом и закрыта { Debug.LogWarning("Эта дверь заблокирована и открывается только через код!"); return; } isOpen = !isOpen; StopAllCoroutines(); if (isOpen) { StartCoroutine(Close()); } else { StartCoroutine(Open()); } } // Метод для открытия двери через Keypad public void UnlockAndOpen() { if (isLockedByKeypad) { isLockedByKeypad = false; // Разблокируем Debug.Log("Дверь разблокирована кодом!"); } if (isOpen) // Если дверь закрыта, открываем { isOpen = false; StopAllCoroutines(); StartCoroutine(Open()); } } } }