Exemple #1
0
        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;
        }