internal void FillTimingInfo(DriverInfo driverInfo, AcsVehicleInfo acVehicleInfo, SimulatorDataSet fullDataSet) { driverInfo.Timing.LastLapTime = CreateTimeSpan(acVehicleInfo.lastLapTimeMS); driverInfo.Timing.CurrentLapTime = CreateTimeSpan(acVehicleInfo.currentLapTimeMS); driverInfo.Timing.CurrentSector = -1; if (_sectorLength == null || (fullDataSet.SessionInfo.SessionType == SessionType.Race && driverInfo.CompletedLaps == 0)) { return; } int currentSector = (int)driverInfo.LapDistance / _sectorLength.Value; TimeSpan[] splits = GetCurrentSplitTimes(driverInfo.DriverName); if (splits == null || splits.Length <= currentSector) { return; } splits[currentSector] = driverInfo.Timing.CurrentLapTime; driverInfo.Timing.CurrentSector = currentSector + 1; driverInfo.Timing.LastSector1Time = splits[0]; driverInfo.Timing.LastSector2Time = splits[1] - splits[0]; driverInfo.Timing.LastSector3Time = splits[2] - splits[1]; driverInfo.Timing.CurrentSectorTime = splits[currentSector]; }
internal void FillTimingInfo(DriverInfo driverInfo, AcsVehicleInfo acVehicleInfo) { driverInfo.Timing.LastLapTime = CreateTimeSpan(acVehicleInfo.lastLapTimeMS); driverInfo.Timing.CurrentLapTime = CreateTimeSpan(acVehicleInfo.currentLapTimeMS); driverInfo.Timing.CurrentSector = -1; if (_sectorLength == null) { return; } int currentSector = (int)driverInfo.LapDistance / _sectorLength.Value; TimeSpan[] splits = GetCurrentSplitTimes(driverInfo.DriverName); if (splits == null || splits.Length <= currentSector) { return; } splits[currentSector] = driverInfo.Timing.CurrentLapTime; driverInfo.Timing.CurrentSector = currentSector + 1; driverInfo.Timing.LastSector1Time = splits[0]; driverInfo.Timing.LastSector2Time = splits[1] - splits[0]; driverInfo.Timing.LastSector3Time = splits[2] - splits[1]; driverInfo.Timing.CurrentSectorTime = splits[currentSector]; }
internal void AddDriversData(SimulatorDataSet data, AssettoCorsaShared acData) { if (acData.AcsSecondMonitor.numVehicles < 1) { return; } data.DriversInfo = new DriverInfo[acData.AcsSecondMonitor.numVehicles]; DriverInfo playersInfo = null; for (int i = 0; i < acData.AcsSecondMonitor.numVehicles; i++) { AcsVehicleInfo acVehicleInfo = acData.AcsSecondMonitor.vehicle[i]; DriverInfo driverInfo = CreateDriverInfo(acData, acVehicleInfo, data); driverInfo.CurrentLapValid = acVehicleInfo.currentLapInvalid == 0 && (data.SessionInfo.SessionType != SessionType.Race || driverInfo.CompletedLaps > 0); if (driverInfo.IsPlayer) { playersInfo = driverInfo; driverInfo.CurrentLapValid &= acData.AcsPhysics.numberOfTyresOut != 4; } data.DriversInfo[i] = driverInfo; if (driverInfo.Position == 1) { data.SessionInfo.LeaderCurrentLap = driverInfo.CompletedLaps + 1; data.LeaderInfo = driverInfo; } AddLappingInformation(data, acData, driverInfo); FillTimingInfo(driverInfo, acVehicleInfo, data); } CheckValidityByPlayer(playersInfo); _lastPlayer = playersInfo; if (playersInfo != null) { data.PlayerInfo = playersInfo; } }
private DriverInfo CreateDriverInfo(AssettoCorsaShared acData, AcsVehicleInfo acVehicleInfo, SimulatorDataSet dataSet) { DriverInfo driverInfo = new DriverInfo { DriverName = StringExtensions.FromArray(acVehicleInfo.driverName), CompletedLaps = acVehicleInfo.lapCount, CarName = FormatACName(StringExtensions.FromArray(acVehicleInfo.carModel)), }; driverInfo.InPits = acVehicleInfo.isCarInPit == 1 || acVehicleInfo.isCarInPitlane == 1; driverInfo.IsPlayer = acVehicleInfo.carId == 0; driverInfo.Position = dataSet.SessionInfo.SessionType == SessionType.Race ? acVehicleInfo.carRealTimeLeaderboardPosition + 1 : acVehicleInfo.carLeaderboardPosition; driverInfo.Speed = Velocity.FromMs(acVehicleInfo.speedMS); driverInfo.LapDistance = acData.AcsStatic.trackSPlineLength * acVehicleInfo.spLineLength; driverInfo.TotalDistance = acVehicleInfo.lapCount * acData.AcsStatic.trackSPlineLength + acVehicleInfo.spLineLength * acData.AcsStatic.trackSPlineLength; driverInfo.FinishStatus = FromAcStatus(acVehicleInfo.finishedStatus); driverInfo.WorldPosition = new Point3D(Distance.FromMeters(acVehicleInfo.worldPosition.x), Distance.FromMeters(acVehicleInfo.worldPosition.y), Distance.FromMeters(acVehicleInfo.worldPosition.z)); ComputeDistanceToPlayer(_lastPlayer, driverInfo, acData); return(driverInfo); }
private DriverInfo CreateDriverInfo(AssettoCorsaShared acData, AcsVehicleInfo acVehicleInfo, SimulatorDataSet dataSet) { DriverInfo driverInfo = new DriverInfo { DriverName = acVehicleInfo.driverName.FromArray(), CompletedLaps = acVehicleInfo.lapCount, CarName = FormatACName(name: acVehicleInfo.carModel.FromArray()), InPits = (acVehicleInfo.isCarInPit == 1 || acVehicleInfo.isCarInPitlane == 1) && (dataSet.SessionInfo.SessionType != SessionType.Race || acVehicleInfo.lapCount > 0), IsPlayer = acVehicleInfo.carId == 0, Position = dataSet.SessionInfo.SessionType == SessionType.Race ? acVehicleInfo.carRealTimeLeaderboardPosition + 1 : acVehicleInfo.carLeaderboardPosition, Speed = Velocity.FromMs(acVehicleInfo.speedMS), LapDistance = acData.AcsStatic.trackSPlineLength * acVehicleInfo.spLineLength, TotalDistance = acVehicleInfo.lapCount * acData.AcsStatic.trackSPlineLength + acVehicleInfo.spLineLength * acData.AcsStatic.trackSPlineLength, FinishStatus = FromAcStatus(acVehicleInfo.finishedStatus), WorldPosition = new Point3D(Distance.FromMeters(acVehicleInfo.worldPosition.x), Distance.FromMeters(acVehicleInfo.worldPosition.y), Distance.FromMeters(acVehicleInfo.worldPosition.z)), }; driverInfo.CarClassId = driverInfo.CarName; driverInfo.CarClassName = driverInfo.CarName; ComputeDistanceToPlayer(_lastPlayer, driverInfo, acData); return(driverInfo); }