Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        /// <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 });
                }
            }
        }