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


using UnityEngine;
using TMPro; // Подключаем систему текста

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

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

    [Header("Звуки шкафчика/двери")]
    public AudioClip openSound;  
    public AudioClip closeSound; 

    private AudioSource audioSource;
    private TextMeshProUGUI objectiveText; // Ссылка на задачи на экране

    void Start()
    {
        audioSource = GetComponent<AudioSource>();
        if (audioSource == null) audioSource = gameObject.AddComponent<AudioSource>();
        
        audioSource.playOnAwake = false;
        audioSource.spatialBlend = 1f;

        // Автоматически находим текстовый блок задач на экране по его имени
        GameObject obj = GameObject.Find("ObjectiveText");
        if (obj != null) objectiveText = obj.GetComponent<TextMeshProUGUI>();
    }

    public void Activate(GameObject player)
    {
        // 1. ЛОГИКА ДЛЯ КЛЮЧА
        if (gameObject.name == "RoomKey")
        {
            if (player.TryGetComponent(out PickUpSystem pickup))
            {
                pickup.hasKey = true; 
                if (pickup.uiPrompt != null) pickup.uiPrompt.SetActive(false);
                
                // ОБНОВЛЯЕМ ЗАДАЧУ: Вычеркиваем ключ
                if (objectiveText != null)
                {
                    objectiveText.text = "Задачи:\n<s>- Найти фонарик у машины</s>\n<s>- Найти ключ от шкафчика</s>\n- Найти канистру с бензином\n- Заправить машину";
                }

                Destroy(gameObject); 
            }
            return; 
        }

        // 2. ЛОГИКА ДЛЯ ПРЕДМЕТОВ В РУКИ (Фонарик, Канистра)
        if (objectType == Type.PickUp)
        {
            if (player.TryGetComponent(out PickUpSystem pickup))
            {
                pickup.GrabObject(gameObject);

                // ПРОВЕРКА: Если подобрали фонарик
                if (gameObject.GetComponent<PhysicalFlashlight>() != null && objectiveText != null)
                {
                    objectiveText.text = "Задачи:\n<s>- Найти фонарик у машины</s>\n- Найти ключ от шкафчика\n- Найти канистру с бензином\n- Заправить машину";
                }
                // ПРОВЕРКА: Если подобрали канистру
                if (gameObject.name == "GasCan" && objectiveText != null)
                {
                    objectiveText.text = "Задачи:\n<s>- Найти фонарик у машины</s>\n<s>- Найти ключ от шкафчика</s>\n<s>- Найти канистру с бензином</s>\n- ЗАПРАВИТЬ МАШИНУ!";
                }
            }
        }
        // 3. ЛОГИКА ДЛЯ ДВЕРЕЙ И ШКАФЧИКА
        else if (objectType == Type.Door)
        {
            bool isLocked = gameObject.name == "LockedCupboard" || (transform.parent != null && transform.parent.name == "LockedCupboard");

            if (isLocked)
            {
                if (player.TryGetComponent(out PickUpSystem pickup))
                {
                    if (!pickup.hasKey)
                    {
                        Debug.Log("Шкафчик заперт!");
                        return; 
                    }
                }
            }

            isClosed = !isClosed;
            float targetAngle = isClosed ? 0f : openAngle;
            transform.localRotation = Quaternion.Euler(0f, targetAngle, 0f);
            
            if (audioSource != null)
            {
                if (!isClosed && openSound != null) { audioSource.clip = openSound; audioSource.Play(); }
                else if (isClosed && closeSound != null) { audioSource.clip = closeSound; audioSource.Play(); }
            }
        }
    }
}