Afterparty/Assets/Scripts/Quest Environment/Q4/FurniturePlacementZone.cs
2026-01-11 17:04:23 +03:00

100 lines
3.5 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
namespace Quest_Environment.Q4
{
[RequireComponent(typeof(Collider))]
public class FurniturePlacementZone : MonoBehaviour, IInteractable
{
[Tooltip("The ID of the furniture that belongs in this zone.")]
[SerializeField] private string targetFurnitureId;
[Tooltip("The furniture object to show when placed.")]
[SerializeField] private GameObject placedFurniturePrefab;
[Tooltip("The GameObject with an Outline component that acts as a visual indicator.")]
[SerializeField] private GameObject zoneIndicator;
private bool _isOccupied = false;
private Outline _indicatorOutline; // *** НОВОЕ ПОЛЕ для хранения компонента
void Start()
{
// *** ИЗМЕНЕНИЕ: Находим и кэшируем компонент Outline
if (zoneIndicator != null)
{
_indicatorOutline = zoneIndicator.GetComponent<Outline>();
}
ResetZone();
}
public void Interact()
{
if (QuestManager.Instance?.currentQuest is Q4_PlaceFurnitureQuest furnitureQuest)
{
if (!_isOccupied && furnitureQuest.HeldFurnitureId == targetFurnitureId)
{
InteractionHandler.Instance.NotifyInteraction(gameObject);
}
}
}
public string GetDescription()
{
if (QuestManager.Instance?.currentQuest is Q4_PlaceFurnitureQuest furnitureQuest)
{
if (!_isOccupied && furnitureQuest.HeldFurnitureId == targetFurnitureId)
{
return $"Поставить {targetFurnitureId}";
}
}
return "";
}
public void PlaceItem()
{
_isOccupied = true;
if (placedFurniturePrefab != null) placedFurniturePrefab.SetActive(true);
// *** ИЗМЕНЕНИЕ: Выключаем Outline через компонент
if (_indicatorOutline != null)
{
_indicatorOutline.enabled = false;
}
}
public void ResetZone()
{
_isOccupied = false;
if (placedFurniturePrefab != null) placedFurniturePrefab.SetActive(false);
// *** ИЗМЕНЕНИЕ: Выключаем Outline через компонент
if (_indicatorOutline != null)
{
_indicatorOutline.enabled = false;
}
}
void Update()
{
// Если у нас нет компонента подсветки или зона уже занята, ничего не делаем
if (_indicatorOutline == null || _isOccupied)
{
return;
}
bool shouldBeActive = false;
if (QuestManager.Instance?.currentQuest is Q4_PlaceFurnitureQuest furnitureQuest)
{
if (furnitureQuest.HeldFurnitureId == targetFurnitureId)
{
shouldBeActive = true;
}
}
// *** ИЗМЕНЕНИЕ: Включаем/выключаем сам компонент, а не весь GameObject
if (_indicatorOutline.enabled != shouldBeActive)
{
_indicatorOutline.enabled = shouldBeActive;
}
}
}
}