Пример #1
0
        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);
            }
        }
Пример #2
0
 public void Bind(CGSlotData data)
 {
     UnloadCGTextures();
     this.Data = data;
     Refresh();
 }