106 lines
4.4 KiB
C#
106 lines
4.4 KiB
C#
using Logic.Multilingual;
|
||
using RuntimeData;
|
||
using TH1_Logic.Core;
|
||
using TH1_Logic.MatchConfig;
|
||
using TMPro;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
|
||
namespace TH1_UI.View.Info
|
||
{
|
||
public class UIInfoCultureTaskMono : MonoBehaviour
|
||
{
|
||
public Image Icon;
|
||
public TextMeshProUGUI Desc;
|
||
public TextMeshProUGUI CultureValue;
|
||
public TextMeshProUGUI ExecuteCountText;
|
||
public GameObject CompletedGroup;
|
||
public GameObject CompletedGroupPer;
|
||
public GameObject ValueGroup;
|
||
public GameObject AwardTitle;
|
||
public GameObject AwardTitlePer;
|
||
|
||
private MomentItemBase _momentItem;
|
||
private MomentSubData _momentSubData;
|
||
private CultureTaskInfo _cultureTaskInfo;
|
||
|
||
public void Init(MomentItemBase momentItem)
|
||
{
|
||
_momentItem = momentItem;
|
||
if (_momentItem == null) return;
|
||
|
||
var subType = _momentItem.GetMomentSubType();
|
||
Table.Instance.CultureCardDataAssets.GetCultureTaskInfo(subType, out _cultureTaskInfo);
|
||
Table.Instance.MomentDataAssets.GetMomentSubData(subType, out _momentSubData);
|
||
|
||
// 描述
|
||
if (Desc != null)
|
||
{
|
||
if (_cultureTaskInfo != null)
|
||
MultilingualManager.Instance.SetUIText(Desc, _cultureTaskInfo.Description);
|
||
else if (_momentSubData != null)
|
||
MultilingualManager.Instance.SetUIText(Desc, _momentSubData.Desc);
|
||
else
|
||
Desc.text = _momentItem.GetFallbackDesc();
|
||
}
|
||
|
||
// 图标
|
||
if (Icon != null && _cultureTaskInfo != null && _cultureTaskInfo.Icon != null)
|
||
Icon.sprite = _cultureTaskInfo.Icon;
|
||
else if (Icon != null && _momentSubData != null && _momentSubData.Icon != null)
|
||
Icon.sprite = _momentSubData.Icon;
|
||
|
||
// 文化值
|
||
if (CultureValue != null)
|
||
CultureValue.text = (_cultureTaskInfo != null ? _cultureTaskInfo.CultureValue : _momentItem.PlayerCultureValue).ToString();
|
||
|
||
// 默认隐藏CompletedGroupPer,由UpdateInfo根据条件决定是否显示
|
||
if (CompletedGroupPer != null)
|
||
CompletedGroupPer.SetActive(false);
|
||
}
|
||
|
||
public void UpdateInfo(PlayerData player)
|
||
{
|
||
if (_momentItem == null) return;
|
||
|
||
bool isEveryTime = _momentSubData != null && _momentSubData.EveryTime;
|
||
bool oneTimeCompleted = _momentItem.IsExecute;
|
||
bool everyTimeCompleted = isEveryTime && _momentItem.ExecuteCount >= _momentSubData.MaxTime;
|
||
string progressText = _momentItem.GetProgressText(Main.MapData, player);
|
||
bool hasCustomProgress = !string.IsNullOrEmpty(progressText);
|
||
|
||
// 一次性显示AwardTitle;EveryTime且未达MaxTime显示AwardTitlePer;达到MaxTime两者都不显示
|
||
if (AwardTitle != null) AwardTitle.SetActive(!isEveryTime && !oneTimeCompleted);
|
||
if (AwardTitlePer != null) AwardTitlePer.SetActive(isEveryTime && !everyTimeCompleted);
|
||
|
||
// 执行次数:仅EveryTime且未达MaxTime时显示,格式为 "当前次数/最大次数"
|
||
if (ExecuteCountText != null)
|
||
{
|
||
if (hasCustomProgress && !oneTimeCompleted)
|
||
{
|
||
ExecuteCountText.gameObject.SetActive(true);
|
||
ExecuteCountText.text = progressText;
|
||
}
|
||
else if (isEveryTime && !everyTimeCompleted)
|
||
{
|
||
ExecuteCountText.gameObject.SetActive(true);
|
||
ExecuteCountText.text = _momentItem.ExecuteCount + "/" + _momentSubData.MaxTime;
|
||
}
|
||
else
|
||
{
|
||
ExecuteCountText.gameObject.SetActive(false);
|
||
}
|
||
}
|
||
|
||
// 已完成状态:
|
||
// 一次性已完成 → 显示CompletedGroup
|
||
// EveryTime已达MaxTime → 显示CompletedGroupPer
|
||
// 未完成 → 显示ValueGroup
|
||
bool completed = (!isEveryTime && oneTimeCompleted) || everyTimeCompleted;
|
||
if (CompletedGroup != null) CompletedGroup.SetActive(!isEveryTime && oneTimeCompleted);
|
||
if (CompletedGroupPer != null) CompletedGroupPer.SetActive(everyTimeCompleted);
|
||
if (ValueGroup != null) ValueGroup.SetActive(!completed);
|
||
}
|
||
}
|
||
}
|