72 lines
2.1 KiB
C#
72 lines
2.1 KiB
C#
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());
|
|
}
|
|
}
|
|
}
|
|
} |