using TMPro; using UnityEngine; using UnityEngine.UI; using WarGame.Data; using WarGame.Managers; namespace WarGame.UI { public class ShopCardUI : MonoBehaviour { [Header("UI References")] [SerializeField] private TMP_Text unitNameText; [SerializeField] private TMP_Text classTypeText; [SerializeField] private TMP_Text costText; [SerializeField] private TMP_Text statsSummaryText; [SerializeField] private TMP_Text tacticsInfoText; [SerializeField] private Image portraitImage; [SerializeField] private Button buyButton; private UnitDataSO currentUnitData; public void Setup(UnitDataSO unitData) { currentUnitData = unitData; if (unitData == null) return; if (unitNameText != null) unitNameText.text = unitData.unitName; if (classTypeText != null) classTypeText.text = unitData.unitClass.ToString(); if (costText != null) costText.text = $"{unitData.goldCost} Gold"; if (portraitImage != null && unitData.unitPortrait != null) { portraitImage.sprite = unitData.unitPortrait; portraitImage.gameObject.SetActive(true); } if (statsSummaryText != null) { statsSummaryText.text = $"HP: {unitData.maxHealth:0} | ATK: {unitData.attackDamage:0} | DEF: {unitData.defenseArmor:0} | SPD: {unitData.moveSpeed:0.0}"; } if (tacticsInfoText != null) { string tacticsStr = "Tactics: "; if (unitData.unlockedTactics.Count > 0) { for (int i = 0; i < unitData.unlockedTactics.Count; i++) { var t = unitData.unlockedTactics[i]; tacticsStr += $"[Lv.{t.requiredLevel}: {t.tacticType}] "; } } else { tacticsStr += "None"; } tacticsInfoText.text = tacticsStr; } if (buyButton != null) { buyButton.onClick.RemoveAllListeners(); buyButton.onClick.AddListener(OnBuyClicked); } UpdateInteractability(); } private void OnBuyClicked() { if (currentUnitData == null || BattleManager.Instance == null) return; BattleManager.Instance.BuyAndDeployUnit(currentUnitData); } public void UpdateInteractability() { if (buyButton == null || BattleManager.Instance == null || currentUnitData == null) return; bool canAfford = BattleManager.Instance.CanAffordUnit(currentUnitData); bool isPrep = BattleManager.Instance.CurrentBattleState == BattleState.Preparation; buyButton.interactable = canAfford && isPrep; } } }