51 lines
2.1 KiB
C#
51 lines
2.1 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Newtonsoft.Json.Linq;
|
|
using UnityEngine;
|
|
using UnityEngine.Networking;
|
|
using UnityEngine.UI;
|
|
|
|
public class CustomIconLoader : MonoBehaviour
|
|
{
|
|
public static async void Init(WaitingForCustomIcon[] objects)
|
|
{
|
|
var iconsToDownload = new HashSet<string>();
|
|
foreach (var obj in objects)
|
|
if (!BazookaManager.Instance.iconCache.Any(icon => icon.ID == obj.ID))
|
|
iconsToDownload.Add(obj.ID);
|
|
|
|
if (iconsToDownload.Count != 0)
|
|
{
|
|
var ids = string.Join(",", iconsToDownload.Select(id => $"\"{id}\""));
|
|
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.ICON_MARKETPLACE_ICON_ENDPOINT + $"?ids=[{ids}]");
|
|
request.SetRequestHeader("Requester", "BerryDashClient");
|
|
request.SetRequestHeader("ClientVersion", Application.version);
|
|
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
|
|
await request.SendWebRequest();
|
|
if (request.downloadHandler.text == null)
|
|
{
|
|
return;
|
|
}
|
|
var jsonResponse = JObject.Parse(request.downloadHandler.text);
|
|
if ((bool)jsonResponse["success"])
|
|
{
|
|
var icons = jsonResponse["data"].ToObject<MarketplaceIconWithData[]>();
|
|
foreach (var icon in icons) BazookaManager.Instance.iconCache.Add(new MarketplaceIcon { ID = icon.ID, Data = icon.Data });
|
|
}
|
|
Debug.Log($"Downloaded {iconsToDownload.Count} custom icons");
|
|
}
|
|
|
|
foreach (var obj in objects)
|
|
{
|
|
var cachedIcon = BazookaManager.Instance.iconCache.FirstOrDefault(icon => icon.ID == obj.ID);
|
|
if (cachedIcon != null)
|
|
{
|
|
if (obj.TryGetComponent<Image>(out var image))
|
|
image.sprite = Tools.GetSpriteFromBase64(cachedIcon.Data);
|
|
else if (obj.TryGetComponent<SpriteRenderer>(out var spriteRenderer))
|
|
image.sprite = Tools.GetSpriteFromBase64(cachedIcon.Data);
|
|
}
|
|
Destroy(obj);
|
|
}
|
|
}
|
|
} |