Загрузка данных
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);
}
}
}
}