Unity_1lab/1 laba/Assets/Scripts/OpenableObject.cs
2025-09-15 19:16:35 +03:00

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());
}
}
}
}