Beispiel #1
0
        private bool ReadExtendedSection(ReplayReader reader, string name, int length)
        {
            if (name == @"CONFIG_RACE")
            {
                RaceIniConfig = Encoding.ASCII.GetString(reader.ReadBytes(length));
                CustomTime    = Game.ConditionProperties.GetSeconds(
                    IniFile.Parse(RaceIniConfig)["LIGHTING"].GetDoubleNullable("__CM_UNCLAMPED_SUN_ANGLE")
                    ?? IniFile.Parse(RaceIniConfig)["LIGHTING"].GetDouble("SUN_ANGLE", 80d)).RoundToInt();
                return(true);
            }

            return(false);
        }
Beispiel #2
0
        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;
        }