109 lines
4.2 KiB
C#
109 lines
4.2 KiB
C#
using System.Collections.Generic;
|
||
using Logic.Action;
|
||
using Logic.Multilingual;
|
||
using RuntimeData;
|
||
using TH1_Core.Events;
|
||
using TH1_Core.Managers;
|
||
using TH1_Logic.Core;
|
||
using TMPro;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
|
||
namespace TH1_UI.View.Info
|
||
{
|
||
public class UIInfoCultureCardMono : MonoBehaviour
|
||
{
|
||
public Image Icon;
|
||
public TextMeshProUGUI Name;
|
||
public TextMeshProUGUI Desc;
|
||
public GameObject LockGroup;
|
||
public TextMeshProUGUI LockDesc;
|
||
public GameObject AlreadyBuy;
|
||
public UIInfoCultureCardBuyButtonMono BuyButtonMono;
|
||
|
||
private CultureCardInfo _cardInfo;
|
||
|
||
public void Init(CultureCardInfo cardInfo, CivEnum civEnum, ForceEnum forceEnum)
|
||
{
|
||
_cardInfo = cardInfo;
|
||
if (_cardInfo == null) return;
|
||
|
||
// 如果BuyButtonMono未在Inspector中赋值,自动从子节点查找
|
||
if (BuyButtonMono == null)
|
||
BuyButtonMono = GetComponentInChildren<UIInfoCultureCardBuyButtonMono>(true);
|
||
|
||
// 名称
|
||
MultilingualManager.Instance.SetUIText(Name, _cardInfo.Name);
|
||
MultilingualManager.Instance.SetUIText(Desc, _cardInfo.Description);
|
||
// 图标(支持阵营变体)
|
||
if (Icon != null)
|
||
{
|
||
var sprite = _cardInfo.GetIcon(civEnum, forceEnum);
|
||
if (sprite != null)
|
||
Icon.sprite = sprite;
|
||
IconSizingUtility.SetIconSize(Icon, _cardInfo.IconViewSizeType, false);
|
||
}
|
||
// 费用
|
||
if (BuyButtonMono != null && BuyButtonMono.Cost != null)
|
||
BuyButtonMono.Cost.text = _cardInfo.Cost.ToString();
|
||
|
||
// 绑定购买按钮
|
||
if (BuyButtonMono != null && BuyButtonMono.BuyButton != null)
|
||
{
|
||
BuyButtonMono.BuyButton.onClick.RemoveAllListeners();
|
||
BuyButtonMono.BuyButton.onClick.AddListener(OnBuyClick);
|
||
}
|
||
}
|
||
|
||
private void OnBuyClick()
|
||
{
|
||
if (_cardInfo == null) return;
|
||
var player = Main.MapData.PlayerMap.SelfPlayerData;
|
||
var actionId = new CommonActionId { ActionType = CommonActionType.BuyCultureCard, CultureCardType = _cardInfo.CardType};
|
||
var action = ActionLogicFactory.GetActionLogic(actionId);
|
||
var param = new CommonActionParams(Main.MapData, playerData: player, mainObjectType: MainObjectType.Player);
|
||
param.RefreshParams();
|
||
// check can 能过就能买成功
|
||
if (!action.CheckCan(param)) return;
|
||
action.CompleteExecute(param);
|
||
|
||
EventManager.Publish(new UpdateUIInfoHeroCultureCards());
|
||
}
|
||
|
||
public void UpdateInfo(PlayerData player)
|
||
{
|
||
if (_cardInfo == null || player == null) return;
|
||
|
||
bool alreadyOwned = player.PlayerCultureInfo.CultureCardList.Contains(_cardInfo.CardType);
|
||
|
||
// 已拥有:显示AlreadyBuy,隐藏BuyButton
|
||
if (AlreadyBuy != null) AlreadyBuy.SetActive(alreadyOwned);
|
||
if (BuyButtonMono != null)
|
||
{
|
||
BuyButtonMono.gameObject.SetActive(!alreadyOwned);
|
||
if (!alreadyOwned)
|
||
BuyButtonMono.UpdateVisual(_cardInfo.Cost, _cardInfo.GetPlayerCostResource(player), _cardInfo.BuyCostType);
|
||
}
|
||
|
||
// 前置卡检查
|
||
bool prerequisiteMet = _cardInfo.CheckPrerequisiteCardsOwned(player);
|
||
if (LockGroup != null) LockGroup.SetActive(!prerequisiteMet);
|
||
|
||
if (!prerequisiteMet && LockDesc != null)
|
||
{
|
||
// 显示未拥有的前置卡名称
|
||
var missingNames = new List<string>();
|
||
foreach (var prereq in _cardInfo.PrerequisiteCards)
|
||
{
|
||
if (!player.PlayerCultureInfo.CultureCardList.Contains(prereq))
|
||
{
|
||
if (Table.Instance.CultureCardDataAssets.GetCultureCardInfo(prereq, out var prereqInfo))
|
||
missingNames.Add(MultilingualManager.Instance.GetMultilingualTextSafe(prereqInfo.Name));
|
||
}
|
||
}
|
||
LockDesc.text = string.Join(", ", missingNames);
|
||
}
|
||
}
|
||
}
|
||
}
|