private void ParseV16(ReplayReader reader) { RecordingIntervalMs = reader.ReadDouble(); WeatherId = reader.ReadString(); TrackId = reader.ReadString(); TrackConfiguration = reader.ReadString(); CarsNumber = reader.ReadInt32(); reader.ReadInt32(); // current recording index var frames = reader.ReadInt32(); NumberOfFrames = frames; var trackObjectsNumber = reader.ReadInt32(); var minSunAngle = default(float?); var maxSunAngle = default(float?); for (var i = 0; i < frames; i++) { float sunAngle = reader.ReadHalf(); reader.Skip(2 + trackObjectsNumber * 12); if (!minSunAngle.HasValue) { minSunAngle = sunAngle; } maxSunAngle = sunAngle; } if (minSunAngle.HasValue && Game.ConditionProperties.GetSeconds(minSunAngle.Value) > Game.ConditionProperties.GetSeconds(maxSunAngle.Value)) { SunAngleFrom = maxSunAngle; SunAngleTo = minSunAngle; } else { SunAngleFrom = minSunAngle; SunAngleTo = maxSunAngle; } CarId = reader.ReadString(); DriverName = reader.ReadString(); NationCode = reader.ReadString(); DriverTeam = reader.ReadString(); CarSkinId = reader.ReadString(); const string postfix = "__AC_SHADERS_PATCH_v1__"; reader.Seek(-postfix.Length - 8, SeekOrigin.End); if (Encoding.ASCII.GetString(reader.ReadBytes(postfix.Length)) == postfix) { var start = reader.ReadUInt32(); var version = reader.ReadUInt32(); if (version == 1) { reader.Seek(start, SeekOrigin.Begin); while (true) { var nameLength = reader.ReadInt32(); if (nameLength > 255) { break; } var name = Encoding.ASCII.GetString(reader.ReadBytes(nameLength)); // Logging.Debug("Extra section: " + name); var sectionLength = reader.ReadInt32(); if (!ReadExtendedSection(reader, name, sectionLength)) { reader.Skip(sectionLength); } } } } AllowToOverrideTime = CustomTime == null && WeatherManager.Instance.GetById(WeatherId)?.IsWeatherTimeUnusual() == true; }