133 lines
3.2 KiB
C#
133 lines
3.2 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
using UnityEngine.UI;
|
|
using TcgEngine;
|
|
|
|
namespace TcgEngine.UI
|
|
{
|
|
/// <summary>
|
|
/// Displays an avatar
|
|
/// </summary>
|
|
|
|
public class AvatarUI : MonoBehaviour
|
|
{
|
|
public UnityAction<AvatarData> onClick;
|
|
|
|
private Image avatar_img;
|
|
private Button avatar_button;
|
|
private Sprite default_icon;
|
|
|
|
[Header("Dynamic Art Path")]
|
|
[SerializeField] private string avatar_path;
|
|
|
|
private AvatarData avatar;
|
|
|
|
void Awake()
|
|
{
|
|
avatar_img = GetComponent<Image>();
|
|
avatar_button = GetComponent<Button>();
|
|
default_icon = avatar_img.sprite;
|
|
|
|
if (avatar_button != null)
|
|
avatar_button.onClick.AddListener(OnClick);
|
|
|
|
if (!string.IsNullOrEmpty(avatar_path))
|
|
{
|
|
LoadAvatarSprite();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 在 Inspector 中修改值时自动重新加载
|
|
/// </summary>
|
|
private void OnValidate()
|
|
{
|
|
if (Application.isPlaying && !string.IsNullOrEmpty(avatar_path))
|
|
{
|
|
LoadAvatarSprite();
|
|
}
|
|
}
|
|
|
|
public void SetAvatar(AvatarData avatar)
|
|
{
|
|
this.avatar = avatar;
|
|
avatar_img.enabled = true;
|
|
avatar_img.sprite = default_icon;
|
|
|
|
if (avatar != null)
|
|
{
|
|
avatar_img.sprite = avatar.GetAvatar();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置头像图片,使用本地图片路径
|
|
/// </summary>
|
|
public void SetAvatarPath(string path)
|
|
{
|
|
avatar_path = path;
|
|
LoadAvatarSprite();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取当前头像路径
|
|
/// </summary>
|
|
public string GetAvatarPath()
|
|
{
|
|
return avatar_path;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 加载头像图片
|
|
/// </summary>
|
|
private void LoadAvatarSprite()
|
|
{
|
|
if (!string.IsNullOrEmpty(avatar_path))
|
|
{
|
|
Sprite dynamicSprite = SpriteLoader.Get()?.LoadSprite(avatar_path);
|
|
if (dynamicSprite != null)
|
|
{
|
|
avatar_img.sprite = dynamicSprite;
|
|
}
|
|
else
|
|
{
|
|
Debug.LogWarning($"AvatarUI 头像图片加载失败: {avatar_path}");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Debug.LogWarning($"AvatarUI avatar_path为空");
|
|
}
|
|
}
|
|
|
|
public void SetDefaultAvatar()
|
|
{
|
|
this.avatar = null;
|
|
avatar_img.enabled = true;
|
|
avatar_img.sprite = default_icon;
|
|
}
|
|
|
|
public void SetImage(Sprite sprite)
|
|
{
|
|
avatar_img.sprite = sprite;
|
|
}
|
|
|
|
public void Hide()
|
|
{
|
|
this.avatar = null;
|
|
avatar_img.enabled = false;
|
|
}
|
|
|
|
public AvatarData GetAvatar()
|
|
{
|
|
return avatar;
|
|
}
|
|
|
|
private void OnClick()
|
|
{
|
|
onClick?.Invoke(avatar);
|
|
}
|
|
}
|
|
} |