private static bool ImportAndRefresh(string filePath) { Logger.LogMessage("Importing from path \"" + filePath + "\""); CopyBanks(filePath); if (!LoadAllBanks()) { return(false); } List <FMODAsset> existingAssets = new List <FMODAsset>(); GatherExistingAssets(existingAssets); List <FMODAsset> newAssets = new List <FMODAsset>(); GatherNewAssets(filePath, newAssets); var assetsToDelete = existingAssets.Except(newAssets, new FMODAssetGUIDComparer()); var assetsToAdd = newAssets.Except(existingAssets, new FMODAssetGUIDComparer()); var assetsToMoveFrom = existingAssets.Intersect(newAssets, new FMODAssetGUIDComparer()); var assetsToMoveTo = newAssets.Intersect(existingAssets, new FMODAssetGUIDComparer()); var assetsToMove = assetsToMoveFrom.Except(assetsToMoveTo, new FMODAssetPathComparer()); if (!assetsToDelete.Any() && !assetsToAdd.Any() && !assetsToMove.Any()) { Logger.LogMessage("Banks updated. Events list unchanged " + System.DateTime.Now.ToString(@"[hh:mm tt]")); } else { string assetsToDeleteFormatted = ""; foreach (var asset in assetsToDelete) { assetsToDeleteFormatted += eventToAssetPath(asset.path) + "\n"; } string assetsToAddFormatted = ""; foreach (var asset in assetsToAdd) { assetsToAddFormatted += eventToAssetPath(asset.path) + "\n"; } string assetsToMoveFormatted = ""; foreach (var asset in assetsToMove) { var fromPath = assetsToMoveFrom.First(a => a.id == asset.id).path; var toPath = assetsToMoveTo.First(a => a.id == asset.id).path; assetsToMoveFormatted += fromPath + " moved to " + toPath + "\n"; } string deletionMessage = (assetsToDelete.Count() == 0 ? "No assets removed" : "Removed assets: " + assetsToDelete.Count()) + "\n" + (assetsToAdd.Count() == 0 ? "No assets added" : "Added assets: " + assetsToAdd.Count()) + "\n" + (assetsToMove.Count() == 0 ? "No assets moved" : "Moved assets: " + assetsToMove.Count()) + "\n" + ((assetsToDelete.Count() != 0 || assetsToAdd.Count() != 0 || assetsToMove.Count() != 0) ? "\nSee console for details" : ""); Logger.LogMessage("Details " + System.DateTime.Now.ToString(@"[hh:mm tt]") + "\n\n" + (assetsToDelete.Count() == 0 ? "No assets removed" : "Removed Assets:\n" + assetsToDeleteFormatted) + "\n" + (assetsToAdd.Count() == 0 ? "No assets added" : "Added Assets:\n" + assetsToAddFormatted) + "\n" + (assetsToMove.Count() == 0 ? "No assets moved" : "Moved Assets:\n" + assetsToMoveFormatted) + "\n" + "________________________________"); if (!EditorUtility.DisplayDialog("FMOD Studio Importer", deletionMessage, "Continue", "Cancel")) { return(false); // User clicked cancel } } ImportAssets(assetsToAdd); DeleteMissingAssets(assetsToDelete); MoveExistingAssets(assetsToMove, assetsToMoveFrom, assetsToMoveTo); AssetDatabase.Refresh(); return(true); }
/// <summary> /// Initializes this instance. /// </summary> private void Initialize() { if (isInitialized && this.system != null && this.system.IsValid()) { return; } isInitialized = true; Logger.LogMessage("Initializing FMOD"); // Do these hacks before calling ANY fmod functions! if (!UnityUtil.ForceLoadLowLevelBinary()) { Logger.LogError("Unable to load low level binary!"); } Logger.LogMessage("Creating FMOD System"); Logger.ErrorCheck(FMOD.Studio.System.Create(out system)); if (system == null) { Logger.LogError("Unable to create FMOD System!"); return; } Logger.LogMessage("System.initialize (" + system + ")"); FMOD.Studio.InitFlags flags = FMOD.Studio.InitFlags.Normal; #if FMOD_LIVEUPDATE flags |= FMOD.Studio.INITFLAGS.LIVEUPDATE; #endif FMOD.Result result = FMOD.Result.Ok; system.GetLowLevelSystem(out lowLevelSystem); UpdateDSPBufferSize(); result = system.Initialize(1024, flags, FMOD.InitFlags.Normal, global::System.IntPtr.Zero); if (result == FMOD.Result.ErrorNetSocket) { #if false && FMOD_LIVEUPDATE UnityUtil.LogWarning("LiveUpdate disabled: socket in already in use"); flags &= ~FMOD.Studio.INITFLAGS.LIVEUPDATE; result = system.init(1024, flags, FMOD.INITFLAGS.NORMAL, (System.IntPtr)null); #else Logger.LogError("Unable to initalize with LiveUpdate: socket is already in use"); #endif } else if (result == FMOD.Result.ErrorHeaderMismatch) { Logger.LogError("Version mismatch between C# script and FMOD binary, restart Unity and reimport the integration package to resolve this issue."); } else { Logger.ErrorCheck(result); } LoadPlugins(); LoadAllBanks(); }