Exemple #1
0
        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];
        }
Exemple #2
0
        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];
        }
Exemple #3
0
        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;
            }
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }