/// <summary> /// Предназначен для инициализации аудио-фонотеки и первичной загрузки ресурсов /// </summary> public void UpdateLibrary() { Dictionary <EAppMusicAssets, AppSoundAsset> musicToAssetsDict = new Dictionary <EAppMusicAssets, AppSoundAsset>(); Dictionary <EAppSfxAssets, AppSoundAsset> sfxToAssetsDict = new Dictionary <EAppSfxAssets, AppSoundAsset>(); foreach (var musicAssetInfo in AppAudioLibraryConsts.MusicAssetToAssetInfoSmd) { AssetMetadata assetMetadata = LinkedResourceManager.GetAssetMetadata(musicAssetInfo.Value.AssetPackName, musicAssetInfo.Value.AssetName); if (assetMetadata != null) { musicToAssetsDict.Add(musicAssetInfo.Key, new AppSoundAsset(assetMetadata)); } } foreach (var soundAssetInfo in AppAudioLibraryConsts.SfxAssetToAssetName) { AssetMetadata assetMetadata = LinkedResourceManager.GetAssetMetadata( AppAudioLibraryConsts.SFX_SMD_PACKAGE_NAME, soundAssetInfo.Value); if (assetMetadata != null) { sfxToAssetsDict.Add(soundAssetInfo.Key, new AppSoundAsset(assetMetadata)); } } CurrentAudioLibrary = new AppAudioLibrary(musicToAssetsDict, sfxToAssetsDict); LoadSfxPacks(); }
/// <summary> /// Выгрузить из памяти пакеты ресурсов со звуковыми эффектами /// </summary> private void UnloadSfxPacks() { foreach (var loadedSfxAssetPack in LoadedSfxAssetPacks) { LinkedResourceManager.UnloadAssetPack(loadedSfxAssetPack); } }
/// <summary> /// Начать воспроизведение фоновой музыки /// </summary> /// <param name="parMusicAsset">Тип фоновой музыки</param> /// <param name="parIsLooped">Зациклить воспроизведение?</param> public void PlayBgMusic(EAppMusicAssets parMusicAsset, bool parIsLooped) { //выгрузим старый ресурс фоновой музыки if (PlayingBackgroundMusic != null) { AppSoundManagerMediator.Send( new SoundManagerMessage(ESoundManagerMessageType.SoundReset, PlayingBackgroundMusic.LinkedAppSoundAsset), AppSoundManagerMediator.ViewSoundManagerColleague); while (true) { SoundManagerRequestB requestBIsPlaying = new SoundManagerRequestB(ESoundManagerRequestType.IsSoundPlaying, PlayingBackgroundMusic.LinkedAppSoundAsset); AppSoundManagerMediator.Request(requestBIsPlaying, AppSoundManagerMediator.ViewSoundManagerColleague); if (!requestBIsPlaying.RequestDataBool) { break; } } LinkedResourceManager.GetAssetInfo(PlayingBackgroundMusic.LinkedAppSoundAsset.LinkedAssetMetadata, out string assetPackName, out string assetName); if (assetPackName != null && assetName != null) { //выгрузка LinkedResourceManager.UnloadAssetPack(assetPackName); } } if (ActualAppModel.GetGameplaySettingsData().IsMusicEnabled) { //загружаемый новый ресурс фоновой музыки if (CurrentAudioLibrary.Music.TryGetValue(parMusicAsset, out AppSoundAsset soundAsset)) { LinkedResourceManager.GetAssetInfo(soundAsset.LinkedAssetMetadata, out string assetPackName, out string assetName); if (assetPackName != null && assetName != null) { //загрузка LinkedResourceManager.LoadAssetPack(assetPackName); //воспроизведение AppSoundManagerMediator.Send( new SoundManagerMessageB(ESoundManagerMessageType.SoundPlay, soundAsset, parIsLooped), AppSoundManagerMediator.ViewSoundManagerColleague); PlayingBackgroundMusic = new PlayingBackgroundMusicData(soundAsset, parMusicAsset); } } } }
/// <summary> /// Загрузить пакеты ресурсов со звуковыми эффектами. Предназначен для вызова после инициализации /// </summary> public void LoadSfxPacks() { UnloadSfxPacks(); foreach (var appSoundAssetPair in CurrentAudioLibrary.SoundEffects) { LinkedResourceManager.GetAssetInfo(appSoundAssetPair.Value.LinkedAssetMetadata, out string assetPackName, out string assetName); if (!LoadedSfxAssetPacks.Contains(assetPackName)) { LoadedSfxAssetPacks.Add(assetPackName); LinkedResourceManager.LoadAssetPack(assetPackName); } } }