Files
CaptainDiceDubloons_IOS_unity/Assets/ChillConnect/Helper/TextureHelper.cs
T
2026-05-20 12:01:19 +08:00

350 lines
10 KiB
C#

using FairyGUI;
using UnityEngine;
using System.Collections.Generic;
using System;
using System.IO;
using UnityEngine.Events;
using System.Collections;
using UnityEngine.Networking;
using ChillConnect;
using SGModule.Net;
public class TextureHelper
{
private static Dictionary<string, NTexture> nTexturesDic = new();
private static Dictionary<int, NTexture> avatarNTexturesDic = new();
private static Dictionary<int, NTexture> galleryNTexturesDic = new Dictionary<int, NTexture>();
public static void GetNTexture(string path, string name, UnityAction<NTexture> action)
{
if (!nTexturesDic.TryGetValue(path + name, out NTexture spr))
{
try
{
LoadKit.Instance.LoadSprite(path, name, sprite =>
{
if (sprite != null)
{
spr = new NTexture(sprite);
action?.Invoke(spr);
nTexturesDic.TryAdd(path + name, spr);
}
});
}
catch (Exception e)
{
Debug.LogError(e);
}
}
else
{
action?.Invoke(spr);
}
}
#region 加载Texture
private static IEnumerator GetLocalTexture(string imagePath, Action<Texture> action)
{
var file = $"{CommonHelper.GetAppSavePath()}/{imagePath}";
var fileInfo = new FileInfo(file);
if (!fileInfo.Exists)
{
action?.Invoke(null);
yield break;
}
var avatarPath = $"file://{file}";
var uwr = UnityWebRequestTexture.GetTexture(avatarPath);
yield return uwr.SendWebRequest();
if (uwr.result is UnityWebRequest.Result.ConnectionError or UnityWebRequest.Result.ProtocolError)
{
action?.Invoke(null);
yield break;
}
var texture2D = DownloadHandlerTexture.GetContent(uwr);
action?.Invoke(texture2D);
}
public static void GetCardIcon(bool isLogo = false, UnityAction<NTexture> action = null)
{
var cardIconPath = "logo_default";
// var paymentTypeVo = GameHelper.GetPaymentTypeVO();
// if (isLogo)
// {
// cardIconPath = paymentTypeVo.logo_id;
// }
// else
// {
// cardIconPath = paymentTypeVo.card_name;
// }
GetNTexture("Atlas.Pay", cardIconPath, action);
}
private static IEnumerator GetTextureFromNet(string type, int imgId, string imgUrl, Action<bool> action = null)
{
string imagePath = $"{CommonHelper.GetAppSavePath()}/{type}/{imgId}.jpg";
FileInfo fileInfo = new FileInfo(imagePath);
if (fileInfo.Exists)
{
action?.Invoke(true);
yield break;
}
var avatarRequest = UnityWebRequest.Get(imgUrl);
yield return avatarRequest.SendWebRequest();
if (avatarRequest.result == UnityWebRequest.Result.ConnectionError ||
avatarRequest.result == UnityWebRequest.Result.ProtocolError)
{
action?.Invoke(false);
}
else
{
var avatarData = avatarRequest.downloadHandler.data;
var dirPath = Path.GetDirectoryName(imagePath);
if (!Directory.Exists(dirPath))
{
Directory.CreateDirectory(dirPath);
}
if (fileInfo.Exists) yield break;
Stream stream = fileInfo.Create();
stream.Write(avatarData, 0, avatarData.Length);
stream.Close();
stream.Dispose();
action?.Invoke(true);
}
}
#endregion
public static void GetItemIcon(int itemId, UnityAction<NTexture> action = null)
{
var itemIconPath = "Atlas.Item";
string name = itemId.ToString();
if (!true)
{
if (itemId is 101 or 111)
{
name = "102";
}
}
else
{
if (itemId is 102 or 106)
{
name += "_normal";
}
}
GetNTexture(itemIconPath, name, action);
}
#region 头像相关
public static void SetAvatarToLoader(int avatarId, GLoader _GLoader, bool IsNeedDefAvatar = true)
{
if (!avatarNTexturesDic.TryGetValue(avatarId, out NTexture spr))
{
try
{
Sprite sprite = null;
if (avatarId == 0)
{
if (!PlayerPrefsKit.ReadBool("IsLogin"))
{
avatarId = 1;
SetAvatarToLoader(avatarId, _GLoader);
return;
}
else
{
if (PlayerPrefsKit.ReadString("AvatarUrl").IsNullOrWhiteSpace())
{
_GLoader.url = "ui://pmf3wbjicxrg4";
return;
}
else
{
GetSelfFaceBookAvatar(texture =>
{
if (_GLoader != null)
{
if (texture != null)
{
_GLoader.texture = texture;
}
else
{
_GLoader.url = "ui://pmf3wbjicxrg4";
}
}
});
return;
}
}
}
else if (avatarId > 100)
{
if (IsNeedDefAvatar)
{
_GLoader.url = "ui://pmf3wbjicxrg4";
}
GetFaceBookAvatar(avatarId, (e) =>
{
if (_GLoader != null)
{
if (e == null)
{
_GLoader.url = "ui://pmf3wbjicxrg4";
}
else
{
_GLoader.texture = e;
}
}
});
return;
}
else
{
LoadKit.Instance.LoadSprite("Atlas.Avatar", avatarId.ToString(), (spr) =>
{
sprite = spr;
var spr1 = new NTexture(sprite);
_GLoader.texture = spr1;
avatarNTexturesDic.Add(avatarId, spr1);
});
}
}
catch (System.Exception e)
{
UnityEngine.Debug.LogError(e);
}
}
else
{
_GLoader.texture = spr;
}
}
private static IEnumerator GetAvatarLocal(int avatarId, Action<Texture> action)
{
yield return GetLocalTexture($"Avatar/{avatarId}.jpg", action);
}
#endregion
#region FaceBook头像相关
public static void GetFaceBookAvatar(int avatarId, Action<NTexture> action)
{
if (!avatarNTexturesDic.TryGetValue(avatarId, out NTexture spr))
{
HallManager.Instance.StartCoroutine(GetAvatarLocal(avatarId, texture =>
{
if (texture == null)
{
action?.Invoke(null);
return;
}
spr = new NTexture(texture);
if (avatarNTexturesDic.ContainsKey(avatarId))
{
avatarNTexturesDic.Add(avatarId, spr);
}
action?.Invoke(spr);
}));
}
else
{
action?.Invoke(spr);
}
}
public static void GetSelfFaceBookAvatar(Action<NTexture> action)
{
if (!avatarNTexturesDic.TryGetValue(0, out NTexture spr))
{
}
else
{
action?.Invoke(spr);
}
}
#endregion
//public static IEnumerator GetGalleryFromNet(int imageID, Action<bool> action = null)
//{
// if (imageID == 0)
// {
// action?.Invoke(true);
// }
// else
// {
// string picInfoUrl = $"{NetworkKit.Instance.GetLoginModel().CdnURL}gallery/{imageID}.jpg";
// yield return GetTextureFromNet("Gallery", imageID, picInfoUrl, action);
// }
//}
public static string GetBankIconUrl(string icon_name)
{
return string.Format("ui://G002_main/{0}", icon_name);
}
public static void GetGalleryLocal(int imageID, Action<NTexture> action)
{
// if (!galleryNTexturesDic.TryGetValue(imageID, out NTexture spr))
// {
// var path = $"Gallery/{imageID}";
// var asset = Resources.Load($"Atlas/{path}");
// if (asset)
// {
// }
// else
// {
// CrazyAsyKit.StartCoroutine(GetGalleryFromNet(imageID, (bool isSuccess) =>
// {
// if (isSuccess)
// {
// CrazyAsyKit.StartCoroutine(GetLocalTexture($"{path}.jpg", texture =>
// {
// if (texture == null)
// {
// action?.Invoke(null);
// return;
// }
// var spr1 = new NTexture(texture);
// galleryNTexturesDic.TryAdd(imageID, spr1);
// action?.Invoke(spr1);
// }));
// }
// else
// {
// action?.Invoke(null);
// }
// }));
// }
// }
// else
// {
// action?.Invoke(spr);
// }
}
}