Files
DepthsOfGreed/Assets/Scripts/HandbookUI/BuildMenuController.cs
T

49 lines
2.7 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace DepthsOfGreed.HandbookUI
{
public sealed class BuildMenuController : MonoBehaviour
{
[SerializeField] private Button[] categoryButtons;
[SerializeField] private TowerCardView[] cardSlots;
public TestPlacementController Placement { get; set; }
private readonly List<HandbookTowerEntry>[] groups = { new List<HandbookTowerEntry>(), new List<HandbookTowerEntry>(), new List<HandbookTowerEntry>(), new List<HandbookTowerEntry>() };
private int selected = -1;
private TowerCardView revealed;
public int SelectedCategory => selected;
public void Initialize(HandbookTowerCatalog catalog)
{
foreach (var card in cardSlots) card.Initialize(this);
foreach (var group in groups) group.Clear();
if (catalog.towers != null) foreach (var entry in catalog.towers) if (entry) groups[(int)entry.menuGroup].Add(entry);
for (int i = 0; i < categoryButtons.Length; i++) { int n = i; categoryButtons[i].onClick.AddListener(() => SelectCategory(n)); }
SelectCategory(0);
}
public void SelectCategory(int index)
{
if (index < 0 || index >= groups.Length || index == selected) return;
selected = index; ResetCards(); Bind();
for (int i = 0; i < categoryButtons.Length; i++)
{
categoryButtons[i].image.color = Color.white; var colors = categoryButtons[i].colors;
colors.normalColor = i == index ? new Color(1, 0.76f, 0.35f) : new Color(0.87f, 0.84f, 0.75f);
colors.highlightedColor = i == index ? new Color(1, 0.86f, 0.55f) : new Color(0.97f, 0.94f, 0.85f);
colors.selectedColor = colors.normalColor; categoryButtons[i].colors = colors;
}
}
private void Bind()
{
if (groups[selected].Count > cardSlots.Length) Debug.LogError("Handbuch: Mehr Einträge als vorbereitete Baukarten; weitere Slots im Inspector ergänzen.", this);
for (int i = 0; i < cardSlots.Length; i++) { bool visible = i < groups[selected].Count; cardSlots[i].gameObject.SetActive(visible); if (visible) cardSlots[i].Bind(groups[selected][i]); }
}
public void ToggleCard(TowerCardView card)
{
if (revealed == card) { card.SetBack(false); revealed = null; return; }
if (revealed) revealed.SetBack(false); revealed = card; card.SetBack(true);
}
public void ResetCards() { revealed = null; foreach (var card in cardSlots) card.SetBack(false, true); }
public void ResetForClose() { ResetCards(); selected = -1; SelectCategory(0); }
}
}