Exemple #1
0
        private Session?Session(Contrib.Data.Shared sharedData)
        {
            var maybeSessionType  = SessionType(sharedData);
            var maybeSessionPhase = SessionPhase(sharedData);

            if (maybeSessionType is null || maybeSessionPhase is null)
            {
                return(null);
            }
            var maybeSessionLength  = CurrentSessionLength(sharedData);
            var sessionRequirements = SessionRequirements(sharedData);

            var(elapsedTime, timeRemaining, waitTime) = RemainingTime(sharedData);

            return(new Session
                   (
                       Type: maybeSessionType.Value,
                       Phase: maybeSessionPhase.Value,
                       Length: maybeSessionLength,
                       Requirements: sessionRequirements,
                       PitSpeedLimit: ISpeed.FromMPS(sharedData.SessionPitSpeedLimit),
                       PitLaneOpen: sharedData.PitWindowStatus > 0,
                       ElapsedTime: elapsedTime,
                       TimeRemaining: timeRemaining,
                       WaitTime: waitTime,
                       StartLights: StartLights(sharedData.StartLights),
                       BestLap: null,           // TODO
                       BestSectors: null,       // TODO
                       Flags: new SessionFlags( // TODO
                           Track: Pipeline.Telemetry.V0.TrackFlags.None,
                           Sectors: new Pipeline.Telemetry.V0.SectorFlags[0],
                           Leader: Pipeline.Telemetry.V0.LeaderFlags.None
                           )
                   ));
        }
Exemple #2
0
 private Pipeline.Telemetry.V0.GameState GameState(Contrib.Data.Shared sharedData)
 {
     if (sharedData.GameInMenus > 0)
     {
         return(Pipeline.Telemetry.V0.GameState.Menu);
     }
     if (sharedData.GameInReplay > 0)
     {
         return(Pipeline.Telemetry.V0.GameState.Replay);
     }
     return(Pipeline.Telemetry.V0.GameState.Driving);
 }
Exemple #3
0
        private TrackLayout?Track(Contrib.Data.Shared sharedData)
        {
            if (sharedData.LayoutLength < 0)
            {
                return(null);
            }
            var layoutLength = IDistance.FromM(sharedData.LayoutLength);
            var sectors      = ValuesPerSector(sharedData.SectorStartFactors, i => DistanceFraction.FromTotal(layoutLength, i));

            return(new TrackLayout(
                       SectorsEnd: sectors
                       ));
        }
Exemple #4
0
        private Event?Event(Contrib.Data.Shared sharedData)
        {
            var track = Track(sharedData);

            if (track == null)
            {
                return(null);
            }
            return(new Event(
                       Track: track,
                       FuelRate: sharedData.FuelUseActive >= 0 ? sharedData.FuelUseActive : 0
                       ));
        }
Exemple #5
0
 internal GameTelemetry Transform(Contrib.Data.Shared sharedData)
 {
     if (sharedData.VersionMajor != Contrib.Constant.VersionMajor)
     {
         throw new ArgumentException("Incompatible major version");
     }
     return(new GameTelemetry(
                GameState: GameState(sharedData),
                UsingVR: sharedData.GameUsingVr > 0,
                Event: Event(sharedData),
                Session: Session(sharedData),
                Vehicles: Vehicles(sharedData),
                FocusedVehicle: FocusedVehicle(sharedData),
                Player: Player(sharedData)
                ));
 }
Exemple #6
0
 private Pipeline.Telemetry.V0.SessionType?SessionType(Contrib.Data.Shared sharedData) =>
 sharedData.SessionType switch
 {