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(); 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(); 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(out var image)) image.sprite = Tools.GetSpriteFromBase64(cachedIcon.Data); else if (obj.TryGetComponent(out var spriteRenderer)) spriteRenderer.sprite = Tools.GetSpriteFromBase64(cachedIcon.Data); } Destroy(obj); } } }