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