Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
        }