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


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 (gameObject.name == "GasCan")
        {
            if (player.TryGetComponent(out PickUpSystem pickup))
            {
                pickup.hasGasCan = true; 
                if (pickup.uiPrompt != null) pickup.uiPrompt.SetActive(false);

                if (objectiveText != null)
                {
                    objectiveText.text = "Задачи:\n<s>- Найти фонарик у машины</s>\n<s>- Найти ключ от шкафчика</s>\n<s>- Найти канистру с бензином</s>\n- ЗАПРАВИТЬ МАШИНУ!";
                }
                Destroy(gameObject); 
            }
            return;
        }

        // 3. ЛОГИКА ДЛЯ ФОНАРИКА В РУКИ
        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- Заправить машину";
                }
            }
        }
        // 4. ЛОГИКА ДЛЯ ДВЕРЕЙ И ШКАФЧИКА
        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(); }
            }
        }

        // ЛОГИКА ДЛЯ ЗАПРАВКИ МАШИНЫ
        if (TryGetComponent(out CarFuelSystem car))
        {
            car.Refuel(player);
        }
    }
}