/// <summary> /// Loads an FMOD Bank from the given asset. /// </summary> public static Bank IngestBank(ModAsset asset) { Logger.Log(LogLevel.Verbose, "Audio.IngestBank", asset.PathVirtual); ingestedModBankPaths.Add(asset.PathVirtual); Bank bank; if (patch_Banks.ModCache.TryGetValue(asset, out bank)) { return(bank); } RESULT loadResult; if (CoreModule.Settings.UnpackFMODBanks) { loadResult = system.loadBankFile(asset.GetCachedPath(), LOAD_BANK_FLAGS.NORMAL, out bank); } else { IntPtr handle; modBankAssets[handle = (IntPtr)(++modBankHandleLast)] = asset; BANK_INFO info = new BANK_INFO() { size = patch_Banks.SizeOfBankInfo, userdata = handle, userdatalength = 0, opencallback = ModBankOpen, closecallback = ModBankClose, readcallback = ModBankRead, seekcallback = ModBankSeek }; loadResult = system.loadBankCustom(info, LOAD_BANK_FLAGS.NORMAL, out bank); } if (loadResult == RESULT.ERR_EVENT_ALREADY_LOADED) { Logger.Log(LogLevel.Warn, "Audio.IngestBank", $"Cannot load {asset.PathVirtual} due to conflicting events!"); return(null); } loadResult.CheckFMOD(); if (Everest.Content.TryGet <AssetTypeGUIDs>(asset.PathVirtual + ".guids", out ModAsset assetGUIDs)) { IngestGUIDs(assetGUIDs); } patch_Banks.ModCache[asset] = bank; bank.getID(out Guid id); cachedBankPaths[id] = $"bank:/mods/{asset.PathVirtual.Substring("Audio/".Length)}"; return(bank); }
public static Bank IngestBank(ModAsset asset) { Logger.Log(LogLevel.Verbose, "Audio.IngestBank", asset.PathVirtual); Bank bank; if (patch_Banks.ModCache.TryGetValue(asset, out bank)) { return(bank); } if (CoreModule.Settings.UnpackFMODBanks) { system.loadBankFile(asset.GetCachedPath(), LOAD_BANK_FLAGS.NORMAL, out bank).CheckFMOD(); } else { IntPtr handle; modBankAssets[handle = (IntPtr)(++modBankHandleLast)] = asset; BANK_INFO info = new BANK_INFO() { size = patch_Banks.SizeOfBankInfo, userdata = handle, userdatalength = 0, opencallback = ModBankOpen, closecallback = ModBankClose, readcallback = ModBankRead, seekcallback = ModBankSeek }; system.loadBankCustom(info, LOAD_BANK_FLAGS.NORMAL, out bank).CheckFMOD(); } ModAsset assetGUIDs; if (Everest.Content.TryGet <AssetTypeGUIDs>(asset.PathVirtual + ".guids", out assetGUIDs)) { IngestGUIDs(assetGUIDs); } patch_Banks.ModCache[asset] = bank; return(bank); }