86 lines
2.9 KiB
C#
86 lines
2.9 KiB
C#
|
|
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;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|