Пример #1
0
        public static RhsCacheEntry Deserialize(BinaryReader reader)
        {
            var entry = new RhsCacheEntry();

            // TODO: Remove duplicate logic for parsing cache entry types
            CacheEntryType type;

            while ((type = (CacheEntryType)reader.ReadByte()) != CacheEntryType.EndOfEntry)
            {
                switch (type)
                {
                case CacheEntryType.Rhs:
                    entry.rhsGuid = reader.ReadRhGuid();
                    break;

                case CacheEntryType.Internal:
                    entry.internalGuid = reader.ReadRhGuid();
                    break;

                case CacheEntryType.Ogg:
                    entry.oggGuid = reader.ReadRhGuid();
                    break;

                case CacheEntryType.Png:
                    entry.pngGuid = reader.ReadRhGuid();
                    break;

                case CacheEntryType.ChartName:
                    entry.songTitle = reader.ReadShortPrefixedString();
                    break;

                case CacheEntryType.TimingData:
                    entry.timingData = TimingData.Deserialize(reader);
                    break;

                case CacheEntryType.Artists:
                    entry.artists.Add(Artist.Deserialize(reader));
                    break;

                case CacheEntryType.SongLengthOverride:
                    entry.songLengthOverride = reader.ReadSingle();
                    break;

                case CacheEntryType.PreviewStart:
                    entry.previewStart = reader.ReadSingle();
                    break;

                case CacheEntryType.PreviewLength:
                    entry.previewLength = reader.ReadSingle();
                    break;

                case CacheEntryType.DisplayArtist:
                    entry.displayArtist = reader.ReadShortPrefixedString();
                    break;

                default:
                    throw new Exception("Unknown cache entry type: " + type);
                }
            }

            return(entry);
        }