| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.Networking;
- using UnityEngine.UI;
- namespace AppUI.Manager.Role
- {
- /// <summary>
- /// 角色管理器,AppUI中涉及角色信息的界面都通过这个类来获取角色信息(昵称和头像),以保证信息的一致性
- /// </summary>
- public class RoleManager
- {
- public readonly static string prefix = "Wonderfitter/";
- public const int NullAvatarID = int.MinValue;
- /// <summary>AppUI 预设头像在 <see cref="AvatarGroup"/> 中的起始 avatarID(index 0 → 7 → avatar_01)。</summary>
- public const int AppUIPresetAvatarIdBase = 7;
- /// <summary>AppUI 可选预设数量,与 <see cref="GetAvatarListLen"/> 中 7+32 一致。</summary>
- public const int AppUIPresetAvatarCount = 32;
- /// <summary><see cref="AvatarGroup"/> 网格下标 → 服务端 <c>user_info.avatarID</c>。</summary>
- public static int PresetGridIndexToAvatarId(int gridIndex) => AppUIPresetAvatarIdBase + gridIndex;
- public static bool IsAppUIPresetAvatarId(int avatarId) =>
- avatarId >= AppUIPresetAvatarIdBase && avatarId < AppUIPresetAvatarIdBase + AppUIPresetAvatarCount;
- // 腾讯云 COS 域名后缀
- private const string COS_DOMAIN_SUFFIX = ".myqcloud.com";
- /// <summary>
- /// 判断是否是 COS 资源
- /// </summary>
- public static bool IsCosResource(string url)
- {
- if (string.IsNullOrEmpty(url))
- return false;
- // 简单字符串匹配 host 是否包含 cos 域名
- return url.IndexOf(COS_DOMAIN_SUFFIX, StringComparison.OrdinalIgnoreCase) >= 0;
- }
- public static bool IsRoleAvatar(int id)
- {
- return id >= 1 && id <= 6;
- }
- public static int GetAvatarListLen()
- {
- return 7 + 32;
- }
- public static void SetAvatarToImage(Image image, int avatarID, string avatarUrl)
- {
- SetAvatarToImage(image, image, avatarID, avatarUrl);
- }
- public static void SetAvatarToImage(Image image, MonoBehaviour coroutineStarter, int avatarID, string avatarUrl)
- {
- if (avatarID == NullAvatarID)
- {
- if (image) image.sprite = null;
- }
- else if (avatarID < 0) coroutineStarter.StartCoroutine(LoadAvatar(avatarUrl, image));
- else
- {
- string path = "";
- if (avatarID < 7)
- {
- //Player1-6是PK模式的默认头像,AppUI也沿用这个资源,所以路径不变
- path += "Textures/Avatar/Player" + avatarID;
- }
- else {
- //AppUI的资源路径和PK模式不一样,avatarID需要-7才能对应上
- //因为新头像 下标从1开始,所以avatarID - 6 刚好对应上新头像的资源命名
- path += prefix + "Textures/Avatar/images/avatar_" + (avatarID - 6).ToString("00");
- }
- if (image) image.sprite = Resources.Load<Sprite>(path);
- }
- }
- //缓存网络图片,避免重复加载
- private static Dictionary<string, Sprite> remoteAvatarMap = new Dictionary<string, Sprite>();
- private static IEnumerator LoadAvatar(string url, Image image)
- {
- if (string.IsNullOrWhiteSpace(url))
- {
- if (image) image.sprite = null;
- yield break;
- }
- if (remoteAvatarMap.ContainsKey(url))
- {
- if (image) image.sprite = remoteAvatarMap[url];
- yield break;
- }
- if (image) image.sprite = null;
- else yield break;
- using (UnityWebRequest uwr = new UnityWebRequest(url, UnityWebRequest.kHttpVerbGET))
- {
- uwr.downloadHandler = new DownloadHandlerTexture();
- yield return uwr.SendWebRequest();
- if (uwr.result != UnityWebRequest.Result.Success) yield break;
- Texture2D texture = DownloadHandlerTexture.GetContent(uwr);
- Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
- remoteAvatarMap[url] = sprite;
- if (image) image.sprite = sprite;
- }
- }
- }
- }
|