TH1/Unity/Assets/Scripts/TH1_UI/View/Info/UIInfoCultureTaskMono.cs
2026-05-27 22:46:45 +08:00

106 lines
4.4 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 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);
// 一次性显示AwardTitleEveryTime且未达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);
}
}
}