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


using UnityEngine;
using TMPro;

public class Interactable : MonoBehaviour
{
    // Добавили отдельный тип Car специально для машины!
    public enum Type { PickUp, Door, Car } 
    [Header("Настройки предмета")]
    public Type objectType; 

    [Header("Для дверей и шкафчиков")]
    public bool isClosed = true;
    public float openAngle = 90f;
    public bool isLockedCupboard = false; 

    [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)
    {
        if (player.TryGetComponent(out PickUpSystem pickup) == false) return;

        // 1. ПРОВЕРКА КЛЮЧА
        if (gameObject.name.Contains("Key"))
        {
            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.Contains("Can") || gameObject.name.Contains("Gas"))
        {
            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)
        {
            pickup.GrabObject(gameObject);
            if (gameObject.GetComponent<PhysicalFlashlight>() != null && objectiveText != null)
            {
                objectiveText.text = "Задачи:\n<s>- Найти фонарик у машины</s>\n- Найти ключ от шкафчика\n- Найти канистру с бензином\n- Заправить машину";
            }
        }
        // 4. ЛОГИКА ОБЫЧНЫХ ДВЕРЕЙ И ШКАФЧИКА (Машина сюда больше не зайдет и крутиться не будет!)
        else if (objectType == Type.Door)
        {
            if (isLockedCupboard && !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(); }
            }
        }
        // 5. ЛОГИКА ДЛЯ МАШИНЫ (Срабатывает четко и без вращения объекта)
        else if (objectType == Type.Car)
        {
            if (TryGetComponent(out CarFuelSystem car))
            {
                car.Refuel(player);
            }
        }
    }
}