TH1/Unity/Assets/Scripts/TH1_UI/View/Bottom/UIBottomRankingRowMono.cs
2025-12-31 16:43:01 +08:00

102 lines
3.2 KiB
C#

using System;
using System.Collections.Generic;
using Logic;
using Logic.Multilingual;
using RuntimeData;
using TH1_Core.Events;
using TH1_Core.Managers;
using TH1_Logic.Core;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems; // 需要引入此命名空间以处理指针事件
namespace TH1_UI.View.Info
{
public class UIBottomRankingRowMono : MonoBehaviour
{
public Image Medal;
public List<Sprite> MedalSprite;
public Color NormalRankTextColor;
public List<Color> MedalRankTextColor;
public Image BG;
public Sprite NormalBG;
public Sprite SelfBG;
public Button Button;
public Image Avatar;
public TextMeshProUGUI Rank;
public TextMeshProUGUI ForceName;
public TextMeshProUGUI City;
public TextMeshProUGUI Score;
public Material GrayScaleMat;
private void Awake()
{
}
public void SetContent(int rk, PlayerData player)
{
if (!Table.Instance.PlayerDataAssets.GetPlayerInfo(player, out var playerInfo)) return;
var selfPlayer = Main.MapData.PlayerMap.SelfPlayerData;
Rank.text = (rk + 1).ToString();
BG.sprite = player == Main.MapData.PlayerMap.SelfPlayerData ? SelfBG : NormalBG;
Medal.gameObject.SetActive(rk < 3);
Rank.color = NormalRankTextColor;
if (rk is >= 0 and < 3)
{
Medal.sprite = MedalSprite[rk];
Rank.color = MedalRankTextColor[rk];
}
Button.onClick.RemoveAllListeners();
//死亡的对手,未相遇也会呈现真名和avatar
if (!player.Alive)
{
MultilingualManager.Instance.SetUIText(ForceName, playerInfo.ForceName);
ForceName.color = Color.gray;
Avatar.sprite = playerInfo.LeaderAvatar;
Avatar.material = GrayScaleMat;
}
//未相遇的对手
else if (!selfPlayer.MeetPlayers.Contains(player.Id))
{
name = "???";
ForceName.color = NormalRankTextColor;
Avatar.sprite = Table.Instance.PlayerDataAssets.CommonPlayerAvatar;
Avatar.material = null;
}
//常规对手
else
{
MultilingualManager.Instance.SetUIText(ForceName, playerInfo.ForceName);
ForceName.color = NormalRankTextColor;
Avatar.sprite = playerInfo.LeaderAvatar;
Avatar.material = null;
var tt = player.Id;
Button.onClick.AddListener(() =>
{
var infoUI = new ShowUIInfoDiplomacy() { Pid = tt };
EventManager.Publish(infoUI);
});
}
City.text = Main.MapData.GetCityCount(player.Id).ToString();
Score.text = player.PlayerScore.ToString();
}
}
}