public void SetupProject(ProjectViewModel projectViewModel) { if (string.IsNullOrEmpty(InfoFilePath)) { throw new InvalidOperationException("Info file path not specified, use the -info argument"); } Project project = projectViewModel.Project; project.InfoFilePath = InfoFilePath; if (string.IsNullOrEmpty(SinglePackagePath) && string.IsNullOrEmpty(BankPackagePath) && string.IsNullOrEmpty(StreamPackagePath) && string.IsNullOrEmpty(LooseMediaPackagePath)) { throw new InvalidOperationException("At least one of the output file must be specified (-output, -output_stm, -output_bnk)"); } // -- Filter to keep only the item listed on command line -- IEnumerable <ContentItemViewModel> sourceItems = projectViewModel.ContentItems; if (Banks != null) { // Filter by bank names sourceItems = sourceItems.Where(ci => Banks.Contains(ci.FileName, new StringEqualityComparer(StringComparison.OrdinalIgnoreCase))); } // -- Collect loose files in included/excluded items -- HashSet <AK.Wwise.InfoFile.FileDescriptorType> looseMediaFiles = new HashSet <AK.Wwise.InfoFile.FileDescriptorType>(); if (ExcludedFilesInBanks != null) { looseMediaFiles.UnionWith(projectViewModel.ContentItems .Where(ci => ExcludedFilesInBanks.Contains(ci.FileName, new StringEqualityComparer(StringComparison.OrdinalIgnoreCase))) .SelectMany(ci => ci.ExcludedMemoryFiles)); } if (IncludedFilesInBanks != null) { looseMediaFiles.UnionWith(projectViewModel.ContentItems .Where(ci => IncludedFilesInBanks.Contains(ci.FileName, new StringEqualityComparer(StringComparison.OrdinalIgnoreCase))) .SelectMany(ci => ci.IncludedMemoryFiles)); } if (looseMediaFiles.Count() > 0) { sourceItems = sourceItems.Concat(looseMediaFiles.Select(i => new ContentItemViewModel(i))); } if (Languages != null) { sourceItems = sourceItems.Where(ci => Languages.Contains(ci.Language, new StringEqualityComparer(StringComparison.OrdinalIgnoreCase))); } // -- Create Packages --- // Single package if (!string.IsNullOrEmpty(SinglePackagePath)) { Package package = new Package(); package.Name = SinglePackagePath; package.Items.AddRange(sourceItems .Select(i => new PackageContentItem(i.Id, i.Language, i.FileName))); project.ManualPackagingInfo.Packages.Add(package); } // Bank package if (!string.IsNullOrEmpty(BankPackagePath)) { Package package = new Package(); package.Name = BankPackagePath; package.Items.AddRange(sourceItems .Where(i => i.FileType == FileType.SoundBank) .Select(i => new PackageContentItem(i.Id, i.Language, i.FileName) { InclusionMode = InclusionMode.Bank })); project.ManualPackagingInfo.Packages.Add(package); } // Stream package if (!string.IsNullOrEmpty(StreamPackagePath)) { Package package = new Package(); package.Name = StreamPackagePath; package.Items.AddRange(sourceItems .Where(i => i.FileType == FileType.StreamedFile) .Select(i => new PackageContentItem(i.Id, i.Language, i.FileName))); project.ManualPackagingInfo.Packages.Add(package); } // Loose files package if (!string.IsNullOrEmpty(LooseMediaPackagePath)) { Package package = new Package(); package.Name = LooseMediaPackagePath; package.Items.AddRange(sourceItems .Where(i => i.FileType == FileType.LooseMedia) .Select(i => new PackageContentItem(i.Id, i.Language, i.FileName))); project.ManualPackagingInfo.Packages.Add(package); } projectViewModel.ManualPackagingInfo.BlockSize = BlockSize; }