using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Vanguard.Board3D;
using Vanguard.Shared.Protocol;
namespace Vanguard.UI.Overlays
{
///
/// Кликабельные блоки зон: рука, колода, дроп, душа, урон, защита, триггер.
/// Своя панель снизу слева, противника — сверху справа.
///
public sealed class ZoneBlockStripView
{
private static readonly BoardZone[] Zones =
{
BoardZone.Hand,
BoardZone.Deck,
BoardZone.Drop,
BoardZone.Soul,
BoardZone.Damage,
BoardZone.Guardian,
BoardZone.Trigger,
};
private readonly Dictionary _labels =
new Dictionary();
private Text _header;
public RectTransform Root { get; private set; }
public event Action ZoneClicked;
public void Build(
Transform parent,
string name,
Vector2 anchor,
Vector2 pivot,
Vector2 position,
Vector2 size)
{
var prefabRoot = OverlayPrefabs.Instantiate("ZoneBlockStrip", parent);
if (prefabRoot != null)
{
Root = prefabRoot;
Root.name = name;
ApplyLayout(anchor, pivot, position, size);
WireButtons();
return;
}
Root = UiKit.CreatePanel(parent, name, new Color(0.02f, 0.035f, 0.055f, 0.82f));
ApplyLayout(anchor, pivot, position, size);
UiKit.AddVerticalLayout(Root, 8, 4);
_header = UiKit.CreateText(
Root,
"Header",
string.Empty,
14,
new Color(0.86f, 0.91f, 1f),
TextAnchor.MiddleLeft);
_header.fontStyle = FontStyle.Bold;
UiKit.MakeLiteral(_header);
UiKit.SetPreferredHeight(_header, 20f);
CreateRow("Row1");
CreateRow("Row2");
CreateZoneButtons();
WireButtons();
}
private void CreateZoneButtons()
{
for (var i = 0; i < Zones.Length; i++)
{
var zone = Zones[i];
var row = Root.Find(i < 4 ? "Row1" : "Row2");
UiKit.CreateButton(
row,
"Zone_" + zone,
string.Empty,
null,
13);
}
}
private void ApplyLayout(
Vector2 anchor,
Vector2 pivot,
Vector2 position,
Vector2 size)
{
Root.anchorMin = anchor;
Root.anchorMax = anchor;
Root.pivot = pivot;
Root.anchoredPosition = position;
Root.sizeDelta = size;
var image = Root.GetComponent();
if (image != null)
image.raycastTarget = false;
}
private void WireButtons()
{
_header = Root.Find("Header")?.GetComponent();
if (_header != null)
{
_header.fontStyle = FontStyle.Bold;
UiKit.MakeLiteral(_header);
}
for (var i = 0; i < Zones.Length; i++)
{
var zone = Zones[i];
var row = i < 4 ? "Row1" : "Row2";
var button = Root.Find(row + "/Zone_" + zone)?.GetComponent