/// <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)); }
/// <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); }
/// <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"); }
/// <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"); } }
/// <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}"); } }