Esempio n. 1
0
        /// <summary>
        /// Загружает пакет ресурсов в память
        /// </summary>
        /// <param name="parAssetPack">Пакет ресурсов</param>
        /// <param name="parCustomAssetBuilder">Определенный строитель-загрузчик</param>
        /// <param name="parAssetPackName">Имя пакета ресурсов</param>
        public void LoadAssetPack(AssetPack parAssetPack, AssetDataAbstractBuilder parCustomAssetBuilder = null,
                                  string parAssetPackName = null)
        {
            AssetDataAbstractBuilder actualAssetDataBuilder = parCustomAssetBuilder ?? StandardAssetBuilder;

            //проверим, если этот пакет уже загружен
            parAssetPackName = parAssetPackName ?? AvailableAssetPacks.FirstOrDefault(parX => parX.Value == parAssetPack).Key;
            if (LoadedAssetPacks.ContainsKey(parAssetPackName))
            {
                //выгрузим его сначала
                UnloadAssetPack(LoadedAssetPacks[parAssetPackName]);
                Console.WriteLine("Unloading asset pack because it has been already loaded in memory");
            }

            //а затем снова загрузим
            Dictionary <string, AssetDataParent> assetPackData = new Dictionary <string, AssetDataParent>();

            foreach (var contentData in parAssetPack.Content)
            {
                assetPackData.Add(contentData.Key, actualAssetDataBuilder.LoadAssetData <AssetDataParent>(contentData.Value));
                Console.WriteLine($"Loaded data {contentData.Key} in asset pack {parAssetPackName}");
            }

            LoadedAssetPacks.Add(parAssetPackName, new AssetPackLoadedData(assetPackData));
        }
Esempio n. 2
0
        /// <summary>
        /// Возвращает загруженные данные ресурсов пакета, загружает пакет если необходимо
        /// </summary>
        /// <param name="parAssetPackKey">Имя пакета ресурсов</param>
        /// <returns></returns>
        public Dictionary <string, AssetDataParent> GetLoadedAssetPackContent(string parAssetPackKey)
        {
            if (!LoadedAssetPacks.ContainsKey(parAssetPackKey))
            {
                LoadAssetPack(parAssetPackKey);
            }

            return(LoadedAssetPacks[parAssetPackKey].Content);
        }
Esempio n. 3
0
        /// <summary>
        /// Выгрузить пакет ресурсов из памяти
        /// </summary>
        /// <param name="parAssetPackLoadedData">Данные о загруженном в память пакете ресурсов</param>
        /// <param name="parAssetPackName">Название пакета ресурсов</param>
        public void UnloadAssetPack(AssetPackLoadedData parAssetPackLoadedData, string parAssetPackName = null)
        {
            parAssetPackName = parAssetPackName ??
                               LoadedAssetPacks.FirstOrDefault(parX => parX.Value == parAssetPackLoadedData).Key;

            parAssetPackLoadedData.Dispose();

            LoadedAssetPacks.Remove(parAssetPackName);

            Console.WriteLine($"Asset pack {parAssetPackName} was unloaded");
        }
Esempio n. 4
0
 /// <summary>
 /// Выгрузить пакет ресурсов из памяти
 /// </summary>
 /// <param name="parAssetPackName">Название пакета ресурсов</param>
 /// <exception cref="ArgumentException">Пакет ресурсов не был загружен</exception>
 public void UnloadAssetPack(string parAssetPackName)
 {
     if (LoadedAssetPacks.TryGetValue(parAssetPackName, out AssetPackLoadedData assetPack))
     {
         UnloadAssetPack(assetPack, parAssetPackName);
     }
     else
     {
         throw new ArgumentException("Asset pack with the specified name is not loaded");
     }
 }
Esempio n. 5
0
 /// <summary>
 /// Получить данные ресурса
 /// </summary>
 /// <param name="parAssetPackName">Название пакета ресурсов</param>
 /// <param name="parAssetName">Название нужного ресурса</param>
 /// <typeparam name="T">Желаемый преобразованный тип ресурса</typeparam>
 /// <returns>Данные ресурса</returns>
 /// <exception cref="ArgumentException">Ресурс не может быть найден в базе загруженных ресурсов</exception>
 public T GetAssetData <T>(string parAssetPackName, string parAssetName) where T : AssetDataParent
 {
     if (LoadedAssetPacks.TryGetValue(parAssetPackName, out var assetPack))
     {
         if (assetPack.Content.TryGetValue(parAssetName, out var targetAsset))
         {
             return(targetAsset as T);
         }
         else
         {
             throw new ArgumentException(
                       $"Cannot find asset {parAssetName} in the asset pack in database: {parAssetPackName}");
         }
     }
     else
     {
         throw new ArgumentException($"Cannot find asset pack in database: {parAssetPackName}");
     }
 }