TH1/Unity/Assets/Scripts/TH1_UI/View/Info/UIInfoCultureCardMono.cs
2026-06-05 22:50:45 +08:00

109 lines
4.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}
}
}