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); }
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); }