Пример #1
0
 private void AddOrganizedFile(FileLUT.IncludedFile in_file, ref ulong io_uDataOffset)
 {
     System.Diagnostics.Debug.Assert(!in_file.Included);
     io_uDataOffset += ComputePaddingSize(in_file.uBlockSize, io_uDataOffset);
     // Starting block is expressed in terms of this file's own block size.
     System.Diagnostics.Debug.Assert(io_uDataOffset % in_file.uBlockSize == 0);
     in_file.uStartingBlock = (uint)(io_uDataOffset / in_file.uBlockSize);
     m_arOrganizedFileEntries.Add(new OrganizedFile(in_file.szPath, in_file.uBlockSize));
     in_file.Included = true;
     io_uDataOffset  += in_file.uFileSize;
 }
Пример #2
0
        public void OrganizeFiles(
            ulong in_uDataOffset,
            IEnumerable <FilePackageGenerator.Context.PackageItem> in_ordered,
            Dictionary <string, uint> in_mapLanguages,
            IProgressNotificationsDispatcher in_notifDispatcher)
        {
            // Build list of files based on specified file order.
            if (in_ordered != null)
            {
                foreach (FilePackageGenerator.Context.PackageItem item in in_ordered)
                {
                    string   language = "SFX";
                    string   name     = string.Empty;
                    UInt64   itemId   = 0;
                    FileType fileType = FileType.SoundBank;
                    if (item.ExternalSourceInfo != null)
                    {
                        fileType = FileType.ExternalSource;
                        itemId   = item.ExternalSourceInfo.Id;
                        name     = item.ExternalSourceInfo.Name;
                    }
                    else if (item.Descriptor != null)
                    {
                        language = item.Descriptor.Language;
                        itemId   = item.Descriptor.Id;
                        name     = item.Descriptor.ShortName;
                        if (item.Descriptor.GetType() == typeof(AK.Wwise.InfoFile.SoundBanksInfoStreamedFiles))
                        {
                            fileType = FileType.StreamedAudio;
                        }
                        else if (item.Descriptor.GetType() == typeof(AK.Wwise.InfoFile.SoundBanksInfoMediaFilesNotInAnyBank))
                        {
                            fileType = FileType.LooseMedia;
                        }
                    }

                    // Select proper LUT.
                    FileLUT lut = m_arFileLUTs[CategoryForType(fileType)];

                    // Find file (binary search: files in LUTs are sorted in ID/LanguageID.
                    uint uLanguageID;
                    if (in_mapLanguages.TryGetValue(language, out uLanguageID))
                    {
                        int iFileIndex = lut.FindEntry(itemId, uLanguageID);
                        if (iFileIndex >= 0)
                        {
                            FileLUT.IncludedFile file = lut.GetAt(iFileIndex);

                            // File was laid out.
                            // Set starting block, mark as ready.
                            AddOrganizedFile(file, ref in_uDataOffset);
                        }
                    }
                    else
                    {
                        // Invalid language.
                        in_notifDispatcher.NotifyLogMsg("WARNING: File " + name + " specified in the layout has invalid language + " + language + ".", Severity.Warning);
                    }
                }
            }

            // Default logic: add files of all LUTs in order.

            // Set each file's starting block.
            foreach (FileLUT lut in m_arFileLUTs.Values)
            {
                foreach (FileLUT.IncludedFile file in lut)
                {
                    if (!file.Included)
                    {
                        AddOrganizedFile(file, ref in_uDataOffset);
                    }
                }
            }
        }