TH1/Unity/Assets/Scripts/TH1_UI/View/Outside/UIOutsideLibraryGridItemMono.cs
2026-06-26 13:57:48 +08:00

142 lines
4.0 KiB
C#

using System;
using System.Collections.Generic;
using Animancer;
using Logic;
using Logic.Action;
using Logic.AI;
using Logic.Audio;
using Logic.Config;
using Logic.Multilingual;
using ParadoxNotion;
using RuntimeData;
using Steamworks;
using TH1_Core.Events;
using TH1_Core.Managers;
using TH1_Logic.Action;
using TH1_Logic.Config;
using TH1_Logic.Core;
using TH1_Logic.Net;
using TH1_Logic.Steam;
using TH1_UI.View.Announce;
using TH1Resource;
using TMPro;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
using ConfigManager = TH1_Logic.Config.ConfigManager;
namespace TH1_UI.View.Outside
{
public class UIOutsideLibraryGridItemMono : MonoBehaviour
{
public Button Button;
public Image HeroAvatar;
public Image WonderAvatar;
public TextMeshProUGUI Name;
public Transform StarGroup;
public List<Image> Stars;
public Sprite StarImg;
public Sprite StarImgGray;
//关闭时执行的委托
public ViDelegateAssisstant.Dele OnBtnCloseClick;
//开始游戏时执行的委托(目前委托内容就是执行controller的Close())
public ViDelegateAssisstant.Dele OnStartGame;
public void SetHeroContent(GiantType giantType,Action<GiantType> onClick)
{
//if (!Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(new UnitFullType(UnitType.Giant, giantType, 0), out var unitInfo)) return;
if (!Table.Instance.LibraryDataAssets.GetLibraryInfoByGiant(giantType, out var info)) return;
HeroAvatar.gameObject.SetActive(true);
WonderAvatar.gameObject.SetActive(false);
HeroAvatar.sprite = info.Illust;
SetUITextOrRaw(Name,info.Name);
var showAchievements = UIOutsideLibraryAchievementVisibility.ShouldShowHeroAchievements(giantType);
if (StarGroup != null) StarGroup.gameObject.SetActive(showAchievements);
if (showAchievements)
{
var hasAchievement = AchievementDataManager.Instance.GetSmallIdByGiantType(giantType, out var smallid);
for (uint k = 1;k <= 3;k++)
{
if(Stars.Count < k)continue;
bool isFinished = hasAchievement && AchievementDataManager.Instance.IsFinished(2, smallid, k);
Stars[(int)k - 1].sprite = isFinished ? StarImg : StarImgGray;
}
}
var giantTypeCopy = giantType;
Button.onClick.RemoveAllListeners();
Button.onClick.AddListener(()=>onClick.Invoke(giantTypeCopy));
}
public void SetWonderContent(Empire empire,WonderTypeEnum wonderType,Action<Empire,WonderTypeEnum> onClick)
{
Table.Instance.GridAndResourceDataAssets.GetWonderInfoByType(wonderType, empire, out var wonderInfo);
HeroAvatar.gameObject.SetActive(false);
WonderAvatar.gameObject.SetActive(true);
WonderAvatar.sprite = wonderInfo.Sprite;
MultilingualManager.Instance.SetUIText(Name,wonderInfo.Name);
if (StarGroup != null) StarGroup.gameObject.SetActive(true);
var hasAchievement = AchievementDataManager.Instance.GetSmallIdByWonderAndEmpire(empire,wonderType, out var smallid);
for (uint k = 1;k <= 3;k++)
{
if(Stars.Count < k)continue;
bool isFinished = hasAchievement && AchievementDataManager.Instance.IsFinished(3, smallid, k);
Stars[(int)k - 1].sprite = isFinished ? StarImg : StarImgGray;
}
var empireCopy = empire;
var wonderTypeCopy = wonderType;
Button.onClick.RemoveAllListeners();
Button.onClick.AddListener(()=>onClick.Invoke(empireCopy,wonderTypeCopy));
}
private static void SetUITextOrRaw(TextMeshProUGUI text, string value)
{
if (text == null) return;
var multilingual = text.gameObject.GetComponent<MultilingualTextMono>();
if (string.IsNullOrEmpty(value))
{
if (multilingual != null)
{
multilingual.ID = 0;
multilingual.Ban = true;
}
text.text = string.Empty;
return;
}
if (uint.TryParse(value, out _))
{
if (multilingual != null) multilingual.Ban = false;
MultilingualManager.Instance.SetUIText(text, value);
}
else
{
if (multilingual != null)
{
multilingual.ID = 0;
multilingual.Ban = true;
}
text.text = value;
}
}
}
}