Files

82 lines
3.1 KiB
C#
Raw Permalink Normal View History

using UnityEngine;
// Вешается на КАЖДЫЙ пустой участок земли, который ты вручную расставляешь
// на карте вокруг Ратуши (или где угодно). На объекте обязательно должен
// быть Collider2D (Box или Circle) для определения клика/наведения.
//
// НАСТРОЙКА В UNITY:
// 1. GameObject -> Create Empty, назови "BuildSlot" (можно продублировать Ctrl+D под нужное число)
// 2. Add Component -> Box Collider 2D, подгони размер под будущее здание
// 3. Add Component -> Sprite Renderer -- поставь спрайт-заглушку "пустой участок"
// (забор/колышки с верёвкой -- когда появится арт от дизайнеров)
// 4. Add Component -> Build Slot (этот скрипт)
// 5. Слой (Layer) объекта поставь "BuildSlot" -- используется BuildManager для поиска слотов
public class BuildSlot : MonoBehaviour
{
[Tooltip("Занят ли этот участок постройкой прямо сейчас")]
public bool isOccupied = false;
[Tooltip("Ссылка на здание, которое сейчас стоит на этом участке (если занят)")]
public GameObject occupyingBuilding;
private SpriteRenderer sr;
private Color emptyColor;
void Awake()
{
sr = GetComponent<SpriteRenderer>();
if (sr != null) emptyColor = sr.color;
}
public void Occupy(GameObject building)
{
isOccupied = true;
occupyingBuilding = building;
// Прячем визуал пустого участка, раз на нём теперь стоит здание
if (sr != null) sr.enabled = false;
}
public void Free()
{
isOccupied = false;
occupyingBuilding = null;
if (sr != null)
{
sr.enabled = true;
sr.color = emptyColor;
}
}
// Подсветка при наведении -- вызывается из BuildManager во время режима строительства
public void SetHighlight(Color color)
{
if (sr != null && !isOccupied)
sr.color = color;
}
public void ClearHighlight()
{
if (sr != null && !isOccupied)
sr.color = emptyColor;
}
}
// Вешается АВТОМАТИЧЕСКИ на построенное здание (кодом, не руками).
// Когда здание уничтожается любым способом (Destroy в коде, удаление
// в редакторе Inspector/Hierarchy, снос при апгрейде и т.д.) --
// OnDestroy сработает и освободит слот обратно.
public class BuildingSlotLink : MonoBehaviour
{
public BuildSlot linkedSlot;
void OnDestroy()
{
if (linkedSlot != null)
{
linkedSlot.Free();
}
}
}