Exemple #1
0
        public static ReplayFile ReadFile(string filePath)
        {
            ReplayFile replayFile = new ReplayFile();

            using (_reader = new ReplayReader(File.Open(filePath, FileMode.Open)))
            {
                replayFile.Passed               = true;
                replayFile.Mode                 = _reader.ReadByte();
                replayFile.Version              = _reader.ReadInt32();
                replayFile.BeatmapHash          = _reader.ReadString();
                replayFile.PlayerName           = _reader.ReadString();
                replayFile.ReplayHash           = _reader.ReadString();
                replayFile.Count300             = _reader.ReadUInt16();
                replayFile.Count100             = _reader.ReadUInt16();
                replayFile.Count50              = _reader.ReadUInt16();
                replayFile.CountGeki            = _reader.ReadUInt16();
                replayFile.CountKatu            = _reader.ReadUInt16();
                replayFile.CountMiss            = _reader.ReadUInt16();
                replayFile.Score                = _reader.ReadInt32();
                replayFile.MaxCombo             = _reader.ReadUInt16();
                replayFile.FullCombo            = _reader.ReadBoolean();
                replayFile.UsedMods             = _reader.ReadInt32();
                replayFile.PerformanceGraphData = _reader.ReadString();
                replayFile.ReplayDate           = _reader.ReadDateTime();
                replayFile.Replay               = _reader.ReadByteArray();
                if (replayFile.Version >= 20140721)
                {
                    replayFile.Long0 = _reader.ReadInt64();
                }
            }

            return(replayFile);
        }
        public override void ReadObjectsIdsAndNames()
        {
            var entitiesCount = ReplayReader.ReadByte();
            var idToNames     = new Dictionary <int, string>();

            for (var i = 0; i < entitiesCount; i++)
            {
                var id   = ReplayReader.ReadInt32();
                var name = ReplayReader.ReadString();

                idToNames.Add(id, name);
            }
            InstantiateOrDestroyGameObjectsAtDeltaReplay(idToNames);
        }
        public override void ReadObjectsIdsAndNames()
        {
            var entitiesCount = ReplayReader.ReadInt32();
            var idToNames     = new Dictionary <int, (string, Vector3, Quaternion)>();

            for (var i = 0; i < entitiesCount; i++)
            {
                var id   = ReplayReader.ReadInt32();
                var name = ReplayReader.ReadString();
                var pos  = ReplayReader.ReadVector3();
                var rot  = ReplayReader.ReadQuaternion();
                idToNames.Add(id, (name, pos, rot));
            }

            InstantiateOrDestroyGameObjectsAtReplay(idToNames);
        }
Exemple #4
0
        private ReplayDetails(string filename)
        {
            try {
                using (var reader = new ReplayReader(filename)) {
                    var version = reader.ReadInt32();
                    Version = version;

                    if (version == 16)
                    {
                        ParseV16(reader);
                    }
                    else
                    {
                        ParseGeneric(version, reader);
                    }
                }

                ParseError = null;
            } catch (Exception e) {
                Logging.Warning(e);
                ParseError = e.Message;
            }
        }
Exemple #5
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;
        }