public override async UniTask InitializeAsync() { var slotData = new List <CGSlotData>(); await UniTask.WhenAll(CGSources.Select(InitializeLoaderAsync)); CGCount = slotData.Count; Grid.Initialize(viewerPanel, slotData); async UniTask InitializeLoaderAsync(ResourceLoaderConfiguration loaderConfig) { var loader = loaderConfig.CreateLocalizableFor <Texture2D>(providerManager, localizationManager); var resourcePaths = await loader.LocateAsync(string.Empty); var pathsBySlots = resourcePaths.OrderBy(p => p).GroupBy(CGPathToSlotId); foreach (var pathsBySlot in pathsBySlots) { AddSlotData(pathsBySlot, loader); } } string CGPathToSlotId(string cgPath) { if (cgPath.Contains(CGPrefix + "/")) { cgPath = cgPath.GetAfterFirst(CGPrefix + "/"); } if (!cgPath.Contains("_")) { return(cgPath); } if (!ParseUtils.TryInvariantInt(cgPath.GetAfter("_"), out _)) { return(cgPath); } return(cgPath.GetBeforeLast("_")); } void AddSlotData(IGrouping <string, string> pathsBySlot, IResourceLoader <Texture2D> loader) { var id = pathsBySlot.Key; if (slotData.Any(s => s.Id == id)) { return; } var data = new CGSlotData(id, pathsBySlot.OrderBy(p => p), loader); slotData.Add(data); } }
public void Bind(CGSlotData data) { UnloadCGTextures(); this.Data = data; Refresh(); }