/// <summary> /// Reads the STF file. /// </summary> /// <returns>The statistics.</returns> /// <param name="path">Path.</param> public TrackRecordsEntity Read(string path) { TrackRecordsEntity trackRecordEntity = new TrackRecordsEntity(); using (NfsFileReader reader = new NfsFileReader(path, FileMode.Open)) { reader.ReaderEndianness = Endianness.BigEndian; trackRecordEntity.LapRecords = new LapRecordEntity[31]; for (int i = 0; i < 31; i++) { LapRecordEntity record = new LapRecordEntity(); record.PlayerName = reader.ReadString(9); record.CarId = (short)(reader.ReadInt16() & 0x00FF); record.Time = reader.ReadInt32(Endianness.LittleEndian); record.RaceType = reader.ReadInt16(); reader.ReadBytes(3); // Clean the name int endIndex = record.PlayerName.IndexOf('\0'); if (endIndex > 0) { record.PlayerName = record.PlayerName.Substring(0, endIndex); } record.PlayerName = record.PlayerName.Replace("\t", ""); trackRecordEntity.LapRecords[i] = record; } } return(trackRecordEntity); }
/// <summary> /// Converts the current <see cref="TrackRecordsEntity"/> into a <see cref="TrackRecords"/>. /// </summary> /// <returns>The <see cref="TrackRecords"/>.</returns> /// <param name="entity">The current <see cref="TrackRecordsEntity"/>.</param> internal static TrackRecords ToDomainModel(this TrackRecordsEntity entity) { TrackRecords model = new TrackRecords { BestLapRecord = entity.LapRecords[0].ToDomainModel(), RecordsFor2Laps = entity.LapRecords.Skip(1).Take(10).ToDomainModels().ToList(), RecordsFor4Laps = entity.LapRecords.Skip(11).Take(10).ToDomainModels().ToList(), RecordsFor8Laps = entity.LapRecords.Skip(21).Take(10).ToDomainModels().ToList(), }; return(model); }
/// <summary> /// Converts the current <see cref="TrackRecords"/> into a <see cref="TrackRecordsEntity"/>. /// </summary> /// <returns>The <see cref="TrackRecordsEntity"/>.</returns> /// <param name="model">The current <see cref="TrackRecords"/>.</param> internal static TrackRecordsEntity ToEntity(this TrackRecords model) { TrackRecordsEntity entity = new TrackRecordsEntity { LapRecords = new LapRecord[] { model.BestLapRecord } .Concat(model.RecordsFor2Laps) .Concat(model.RecordsFor4Laps) .Concat(model.RecordsFor8Laps) .ToEntities().ToArray() }; return(entity); }
/// <summary> /// Writes the STF file. /// </summary> /// <param name="path">Path.</param> /// <param name="statsFileEntity">Stats file entity.</param> public void Write(string path, TrackRecordsEntity statsFileEntity) { using (NfsFileWriter writer = new NfsFileWriter(path, FileMode.OpenOrCreate)) { writer.WriterEndianness = Endianness.BigEndian; for (int i = 0; i < 31; i++) { LapRecordEntity record = statsFileEntity.LapRecords[i]; writer.WriteString(record.PlayerName, 8, '\t'); writer.WriteInt16(record.CarId); writer.WriteInt32(record.Time, Endianness.LittleEndian); writer.WriteInt16(record.RaceType); writer.WriteBytes(new byte[] { 0, 0, 0 }); } } }