Files
WarGame/Assets/Scripts/UI/ShopCardUI.cs

86 lines
2.9 KiB
C#
Raw Normal View History

2026-09-30 23:45:58 +01:00
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;
}
}
}