Files
5.24BuYu/Assets/MyGame/aa/UI/Home/Sub/Rank/RankLineItem.cs
T
2026-10-08 07:25:02 +08:00

142 lines
5.4 KiB
C#

using Assets.MyGame.Scripts.Net;
using Assets.MyGame.Scripts.Net.API.GameConfig_SubClass;
using Assets.MyGame.Scripts.Net.API.UserData_SubClass;
using System.Collections.Generic;
using TMPro;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
public class RankLineItem : MonoBehaviour
{
public GameObject obj_rankNum;
public TextMeshProUGUI userName;
public TextMeshProUGUI userLevel;
public TextMeshProUGUI userScore;
public Image avatar;
public Image avatarFrame;
public BackPackPropItem backPackPropItemPrefab;
public Transform backPackPropItemRarent;
private string myAvatarName;
private string myAvatarFrameName;
private void OnEnable()
{
GameManager.Instance.OnAvatarChanged += OnAvatarChanged;
GameManager.Instance.OnAvatarFrameChanged += OnAvatarFrameChanged;
}
private void OnDisable()
{
if (GameManager.Instance != null)
{
GameManager.Instance.OnAvatarChanged -= OnAvatarChanged;
GameManager.Instance.OnAvatarFrameChanged -= OnAvatarFrameChanged;
}
}
private void OnAvatarChanged(Sprite sprite)
{
if (!string.IsNullOrEmpty(myAvatarName) && sprite != null)
{
var cached = GameManager.Instance.GetAvatarSprite(myAvatarName);
if (cached != null) avatar.sprite = cached;
}
}
private void OnAvatarFrameChanged(Sprite sprite)
{
if (avatarFrame == null) return;
if (!string.IsNullOrEmpty(myAvatarFrameName))
{
var cached = GameManager.Instance.GetAvatarFrameSprite(myAvatarFrameName);
if (cached != null) avatarFrame.sprite = cached;
}
}
public void Init(int rankNum, string name, string level, string score, Sprite sprite, string avatarUrl, string avatarFrameUrl = null, List<GiftConfig> giftItems = null)
{
myAvatarName = avatarUrl;
myAvatarFrameName = avatarFrameUrl;
foreach (Transform item in obj_rankNum.transform)
item.gameObject.SetActive(false);
switch (rankNum)
{
case 1:
obj_rankNum.transform.GetChild(0).gameObject.SetActive(true);
break;
case 2:
obj_rankNum.transform.GetChild(1).gameObject.SetActive(true);
break;
case 3:
obj_rankNum.transform.GetChild(2).gameObject.SetActive(true);
break;
default:
var obj = obj_rankNum.transform.GetChild(3).gameObject;
obj.SetActive(true);
obj.GetComponentInChildren<TextMeshProUGUI>().text = rankNum.ToString();
break;
}
userName.text = name.Length > 4 ? name.Substring(0, 2) + "**" + name.Substring(name.Length - 2) : name;
userLevel.text = level;
userScore.text = score;
if (sprite != null) avatar.sprite = sprite;
// 头像框
if (avatarFrame != null)
{
if (!string.IsNullOrEmpty(avatarFrameUrl))
{
var frameSprite = GameManager.Instance.GetAvatarFrameSprite(avatarFrameUrl);
if (frameSprite != null) avatarFrame.sprite = frameSprite;
avatarFrame.gameObject.SetActive(frameSprite != null);
}
else
{
avatarFrame.gameObject.SetActive(false);
}
}
if (giftItems != null && giftItems.Count > 0)
{
// 先清空旧奖励道具
for (int i = backPackPropItemRarent.childCount - 1; i >= 0; i--)
Destroy(backPackPropItemRarent.GetChild(i).gameObject);
foreach (var gift in giftItems)
{
int count = gift.isRandom ? gift.minCount : gift.count;
var data = new BackPackPropItemData { count = count, giftType = gift.type };
// 服务端排行奖励items实际下发type=0(非约定值3),只要带otherId就按道具处理;金币(1)/钻石(2)用本地sprite
bool isProp = gift.type != 1 && gift.type != 2 && !string.IsNullOrEmpty(gift.otherId);
if (isProp)
{
data.giftType = 3;
// 图标来源优先级:本地道具表propConfig → 后端下发的product → 固定结构/uploads/编号.png兜底
var match = GameManager.Instance?.gameConfig?.propConfig?.Find(p => p.number == gift.otherId);
if (match != null && !string.IsNullOrEmpty(match.imageUrl))
{
data.url = APIManager.baseURL + match.imageUrl;
data.propEnum = (PropEnum)match.type;
}
else if (gift.product != null && !string.IsNullOrEmpty(gift.product.imageUrl))
{
data.url = APIManager.baseURL + gift.product.imageUrl;
data.propEnum = (PropEnum)gift.product.type;
}
else
{
data.url = APIManager.baseURL + "/uploads/" + gift.otherId + ".png";
}
}
GameObject obj = Instantiate(backPackPropItemPrefab.gameObject, backPackPropItemRarent);
var tempItem = obj.GetComponent<BackPackPropItem>();
tempItem.Init(data);
}
}
}
}