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); }
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; } }
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; }