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 ) )); }
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); }
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 )); }
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 )); }
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) )); }
private Pipeline.Telemetry.V0.SessionType?SessionType(Contrib.Data.Shared sharedData) => sharedData.SessionType switch {