Загрузка данных


using UnityEngine;

public class Interactable : MonoBehaviour
{
    public enum Type { PickUp, Door }
    [Header("Настройки предмета")]
    public Type objectType; 

    [Header("Для дверей (если тип Door)")]
    public bool isClosed = true;
    public float openAngle = 90f;

    public void Activate(GameObject player)
    {
        // 1. Проверяем, если игрок нажал Е на КЛЮЧЕ
        if (gameObject.name == "RoomKey")
        {
            if (player.TryGetComponent(out PickUpSystem pickup))
            {
                pickup.hasKey = true; // Записываем в карман
                Destroy(gameObject); // Уничтожаем ключ со сцены
                Debug.Log("Ключ взят через Interactable!");
            }
            return; // Прерываем код, чтобы ключ не лез в руки
        }

        // 2. Логика для обычных подбираемых предметов (Фонарик, Канистра)
        if (objectType == Type.PickUp)
        {
            if (player.TryGetComponent(out PickUpSystem pickup)) pickup.GrabObject(gameObject);
        }
        // 3. Логика для дверей и запертого шкафчика
        else if (objectType == Type.Door)
        {
            // Если этот объект лежит внутри родителя с именем "LockedCupboard"
            if (transform.parent != null && transform.parent.name == "LockedCupboard")
            {
                if (player.TryGetComponent(out PickUpSystem pickup))
                {
                    // Если ключа в кармане нет — шкаф не сдвинется
                    if (!pickup.hasKey)
                    {
                        Debug.Log("Заперто! Олегу сначала нужно найти RoomKey в спальне.");
                        return; 
                    }
                }
            }

            // Открываем дверь/шкаф
            isClosed = !isClosed;
            float targetAngle = isClosed ? 0f : openAngle;
            transform.localRotation = Quaternion.Euler(0f, targetAngle, 0f);
            if (TryGetComponent(out AudioSource audio)) audio.Play();
        }
    }
}