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

            file.version = reader.ReadByte();

            RhsEntryType type;

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

                case RhsEntryType.Internal:
                    file.internalGuid = reader.ReadRhGuid();
                    break;

                case RhsEntryType.Ogg:
                    file.oggGuid = reader.ReadRhGuid();
                    break;

                case RhsEntryType.SongTitle:
                    file.songTitle = reader.ReadShortPrefixedString();
                    break;

                case RhsEntryType.TimingData:
                    file.timingData = TimingData.Deserialize(reader);
                    break;

                case RhsEntryType.PreviewStart:
                    file.previewStart = reader.ReadSingle();
                    break;

                case RhsEntryType.PreviewLength:
                    file.previewLength = reader.ReadSingle();
                    break;

                case RhsEntryType.SongLengthOverride:
                    file.songLengthOverride = reader.ReadSingle();
                    break;

                case RhsEntryType.Png:
                    file.pngGuid = reader.ReadRhGuid();
                    break;

                case RhsEntryType.Artists:
                    file.artists.Add(Artist.Deserialize(reader));
                    break;

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

            return(file);
        }
Пример #2
0
        public static TimingData Deserialize(BinaryReader reader)
        {
            var data = new TimingData();

            data.unknown1 = reader.ReadByte();             // Always 0?
            var numEntries = reader.ReadInt32();

            data.offsetMultiplier = reader.ReadInt64();
            data.entries          = reader.ReadList(TimingDataEntry.Deserialize, numEntries - 1);
            data.lastEntry        = LastTimingDataEntry.Deserialize(reader);

            return(data);
        }
Пример #3
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);
        }