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[] groups = { new List(), new List(), new List(), new List() }; 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); } } }