public void Process() { while (true) { var bytes = reader.Read(); if (bytes.Length > 0) { int index = 0; var packetBase = new PacketBaseDecoder(); packetBase.Decode(ref bytes, ref index); if (packetBase.packetType.UInt() == 0 && bytes.Length == 559) { var telem = new TelemetryDataDecoder(); index = 0; telem.Decode(ref bytes, ref index); packets.Push(telem); } if (packetBase.packetType.UInt() == 1 && bytes.Length == 308) { var race = new RaceDataDecoder(); index = 0; race.Decode(ref bytes, ref index); packets.Push(race); } if (packetBase.packetType.UInt() == 2 && bytes.Length == 1136) { var participants = new ParticipantsDataDecoder(); index = 0; participants.Decode(ref bytes, ref index); packets.Push(participants); } if (packetBase.packetType.UInt() == 3 && bytes.Length == 1063) { var timing = new TimingsDataDecoder(); index = 0; timing.Decode(ref bytes, ref index); packets.Push(timing); } if (packetBase.packetType.UInt() == 4 && bytes.Length == 24) { var gamestate = new GameStateDataDecoder(); index = 0; gamestate.Decode(ref bytes, ref index); packets.Push(gamestate); } if (packetBase.packetType.UInt() == 7 && bytes.Length == 1040) { var timestats = new TimeStatsDataDecoder(); index = 0; timestats.Decode(ref bytes, ref index); packets.Push(timestats); } if (packetBase.packetType.UInt() == 8 && bytes.Length == 1164) { var vehicleName = new ParticipantVehicleNamesDataDecoder(); index = 0; vehicleName.Decode(ref bytes, ref index); packets.Push(vehicleName); } if (packetBase.packetType.UInt() == 8 && bytes.Length == 1452) { var className = new VehicleClassNamesDataDecoder(); index = 0; className.Decode(ref bytes, ref index); packets.Push(className); } } } }
public Test() { var packetBase = new PacketBaseDecoder(); IReader reader = new UDPNonBlockingReader(5606); while (true) { var bytes = reader.Read(); if (bytes.Length > 0) { int index = 0; packetBase.Decode(ref bytes, ref index); //Console.WriteLine("Packet Type " + packetBase.packetType.UInt()); if (packetBase.packetType.UInt() == 8 && packetBase.partialPacketIndex.UInt() == 2) { Console.WriteLine("Packet Type " + packetBase.packetType.UInt()); Console.WriteLine("Packet number " + packetBase.partialPacketNumber.UInt()); Console.WriteLine("Packet index " + packetBase.partialPacketIndex.UInt()); var className = new VehicleClassNamesDataDecoder(); index = 0; className.Decode(ref bytes, ref index); for (int i = 0; i < 60; ++i) { Console.WriteLine("class index " + i + " " + className.classInfo.ClassInfoArray(i).classIndex.UInt()); Console.WriteLine("name " + i + " " + className.classInfo.ClassInfoArray(i).name.String(0)); } } if (packetBase.packetType.UInt() == 8 && packetBase.partialPacketIndex.UInt() == 1) // disabled // if (packetBase.packetType.UInt() == 8000 && packetBase.partialPacketIndex.UInt() == 1) { Console.WriteLine("Packet Type " + packetBase.packetType.UInt()); Console.WriteLine("Packet number " + packetBase.partialPacketNumber.UInt()); Console.WriteLine("Packet index " + packetBase.partialPacketIndex.UInt()); var vehicleName = new ParticipantVehicleNamesDataDecoder(); index = 0; vehicleName.Decode(ref bytes, ref index); for (int i = 0; i < 16; ++i) { Console.WriteLine("index " + i + " " + vehicleName.vehicles.VehicleInfoArray(i).index.UInt()); Console.WriteLine("class " + i + " " + vehicleName.vehicles.VehicleInfoArray(i).vehicleClass.UInt()); Console.WriteLine("name " + i + " " + vehicleName.vehicles.VehicleInfoArray(i).name.String(0)); } } //if (packetBase.packetType.UInt() == 7 && bytes.Length == 1040) // disable if (packetBase.packetType.UInt() == 7000 && bytes.Length == 1040) { Console.WriteLine("Packet Type " + packetBase.packetType.UInt()); var timestats = new TimeStatsDataDecoder(); index = 0; timestats.Decode(ref bytes, ref index); Console.WriteLine("participants Changed Timestamp " + timestats.participantsChangedTimestamp.UInt()); for (int i = 0; i < 32; ++i) { Console.WriteLine("fastest lap time " + i + " " + timestats.stats.ParticipantsStatsArray(i).fastestLapTime.TimeStamp()); Console.WriteLine("fastest sector 1 time " + i + " " + timestats.stats.ParticipantsStatsArray(i).fastestSector1Time.TimeStamp()); Console.WriteLine("fastest sector 2 time " + i + " " + timestats.stats.ParticipantsStatsArray(i).fastestSector2Time.TimeStamp()); Console.WriteLine("fastest sector 3 time " + i + " " + timestats.stats.ParticipantsStatsArray(i).fastestSector3Time.TimeStamp()); Console.WriteLine("last lap time " + i + " " + timestats.stats.ParticipantsStatsArray(i).lastLapTime.TimeStamp()); Console.WriteLine("last sector time " + i + " " + timestats.stats.ParticipantsStatsArray(i).lastSectorTime.TimeStamp()); Console.WriteLine("participant Online Rep " + i + " " + timestats.stats.ParticipantsStatsArray(i).participantOnlineRep.UInt()); Console.WriteLine("MP Participant Index " + i + " " + timestats.stats.ParticipantsStatsArray(i).MPParticipantIndex.UShort()); } } // if (packetBase.packetType.UInt() == 4 && bytes.Length == 24) // disable if (packetBase.packetType.UInt() == 4000 && bytes.Length == 24) { Console.WriteLine("Packet Type " + packetBase.packetType.UInt()); var gamestate = new GameStateDataDecoder(); index = 0; gamestate.Decode(ref bytes, ref index); Console.WriteLine("build version number " + gamestate.buildVersionNumber.UShort()); Console.WriteLine("game state " + gamestate.gameState.GameState()); Console.WriteLine("session state " + gamestate.gameState.SessionState()); Console.WriteLine("ambient Temperature " + gamestate.ambientTemperature.Int()); Console.WriteLine("track Temperature " + gamestate.trackTemperature.Int()); Console.WriteLine("rain Density " + gamestate.rainDensity.UInt()); Console.WriteLine("snow Density " + gamestate.snowDensity.UInt()); Console.WriteLine("wind Speed " + gamestate.windSpeed.Int()); Console.WriteLine("wind DirectionX " + gamestate.windDirectionX.Int()); Console.WriteLine("wind DirectionY " + gamestate.windDirectionY.Int()); } // if (packetBase.packetType.UInt() == 2 && bytes.Length == 1136) //disabled if (packetBase.packetType.UInt() == 2000 && bytes.Length == 1136) { Console.WriteLine("Packet Type " + packetBase.packetType.UInt()); var participants = new ParticipantsDataDecoder(); index = 0; participants.Decode(ref bytes, ref index); Console.WriteLine("participants Changed Timestamp " + participants.participantsChangedTimestamp.UInt()); // I get a bunch of different names here not sure how this works for (int i = 0; i < 16; ++i) { Console.WriteLine("name " + i + " " + participants.name.String(i)); } for (int i = 0; i < 16; ++i) { Console.WriteLine("nationality " + i + " " + participants.nationality.UInt(i)); } for (int i = 0; i < 16; ++i) { Console.WriteLine("index " + i + " " + participants.index.UShort(i)); } } //if (packetBase.packetType.UInt() == 1 && bytes.Length == 308) //disable if (packetBase.packetType.UInt() == 10000 && bytes.Length == 308) { Console.WriteLine("Packet Type " + packetBase.packetType.UInt()); var race = new RaceDataDecoder(); index = 0; race.Decode(ref bytes, ref index); Console.WriteLine("world Fastest Lap Time " + race.worldFastestLapTime.TimeStamp()); Console.WriteLine("personel Fastest Lap Time " + race.personalFastestLapTime.TimeStamp()); Console.WriteLine("personal Fastest Sector1 Time " + race.personalFastestSector1Time.TimeStamp()); Console.WriteLine("personal Fastest Sector2 Time " + race.personalFastestSector2Time.TimeStamp()); Console.WriteLine("personal Fastest Sector3 Time " + race.personalFastestSector3Time.TimeStamp()); Console.WriteLine("world Fastest Sector1 Time " + race.worldFastestSector1Time.TimeStamp()); Console.WriteLine("world Fastest Sector2 Time " + race.worldFastestSector2Time.TimeStamp()); Console.WriteLine("world Fastest Sector3 Time " + race.worldFastestSector3Time.TimeStamp()); Console.WriteLine("track length " + race.trackLength.Float()); Console.WriteLine("track location " + race.trackLocation.String(0)); Console.WriteLine("track variation " + race.trackVariation.String(0)); Console.WriteLine("translated Track Location " + race.translatedTrackLocation.String(0)); Console.WriteLine("translated Track Variation " + race.translatedTrackVariation.String(0)); Console.WriteLine("is timed event " + race.lapsTimeInEvent.IsTimedEvent()); Console.WriteLine("laps " + race.lapsTimeInEvent.Laps()); Console.WriteLine("Time in Event " + race.lapsTimeInEvent.TimeInEvent()); Console.WriteLine("enforced Pit Stop Lap " + race.enforcedPitStopLap.Int()); } //if (packetBase.packetType.UInt() == 0 && bytes.Length == 559) // disabled if (packetBase.packetType.UInt() == 5555 && bytes.Length == 1063) { var telem = new TelemetryDataDecoder(); index = 0; telem.Decode(ref bytes, ref index); Console.WriteLine("participant index " + telem.viewedParticipantIndex.Int()); Console.WriteLine("unfiltered throttle " + telem.unfilteredThrottle.UInt()); Console.WriteLine("unfiltered brake " + telem.unfilteredBrake.UInt()); Console.WriteLine("unfiltered steering " + telem.unfilteredSteering.Int()); Console.WriteLine("unfiltered clutch " + telem.unfilteredClutch.UInt()); Console.WriteLine("car flags " + telem.carFlags.CarFlags()); Console.WriteLine("oil temp celsius " + telem.oilTempCelsius.Short()); Console.WriteLine("oil pressure kpa " + telem.oilPressureKPa.UShort()); Console.WriteLine("water Temp Celsius " + telem.waterTempCelsius.Short()); Console.WriteLine("water Pressure Kpa " + telem.waterPressureKpa.UShort()); Console.WriteLine("fuel pressure kpa " + telem.fuelPressureKpa.UShort()); Console.WriteLine("fuel capacity " + telem.fuelCapacity.UInt()); Console.WriteLine("brake " + telem.brake.UInt()); Console.WriteLine("throttle " + telem.throttle.UInt()); Console.WriteLine("clutch " + telem.clutch.UInt()); // between 1 full to 0 empty Console.WriteLine("fuel level " + telem.fuelLevel.Float()); Console.WriteLine("speed " + telem.speed.Float()); Console.WriteLine("rpm " + telem.rpm.UShort()); Console.WriteLine("max rpm " + telem.maxRpm.UShort()); Console.WriteLine("steering " + telem.steering.Int()); Console.WriteLine("gear " + telem.gearNumGears.Gear()); Console.WriteLine("num gear " + telem.gearNumGears.NumGears()); Console.WriteLine("boost amount " + telem.boostAmount.UInt()); Console.WriteLine("odometer KM " + telem.odometerKM.Float()); Console.WriteLine("orientation 0 " + telem.orientation.Float(0)); Console.WriteLine("orientation 1 " + telem.orientation.Float(1)); Console.WriteLine("orientation 2 " + telem.orientation.Float(2)); Console.WriteLine("local velocity 0 " + telem.localVelocity.Float(0)); Console.WriteLine("local velocity 1 " + telem.localVelocity.Float(1)); Console.WriteLine("local velocity 2 " + telem.localVelocity.Float(2)); Console.WriteLine("world velocity 0 " + telem.worldVelocity.Float(0)); Console.WriteLine("world velocity 1 " + telem.worldVelocity.Float(1)); Console.WriteLine("local velocity 2 " + telem.worldVelocity.Float(2)); Console.WriteLine("angular velocity 0 " + telem.angularVelocity.Float(0)); Console.WriteLine("angular velocity 1 " + telem.angularVelocity.Float(1)); Console.WriteLine("angular velocity 2 " + telem.angularVelocity.Float(2)); Console.WriteLine("local acceleration 0 " + telem.localAcceleration.Float(0)); Console.WriteLine("local acceleration 1 " + telem.localAcceleration.Float(1)); Console.WriteLine("local acceleration 2 " + telem.localAcceleration.Float(2)); Console.WriteLine("world acceleration 0 " + telem.worldAcceleration.Float(0)); Console.WriteLine("world acceleration 1 " + telem.worldAcceleration.Float(1)); Console.WriteLine("world acceleration 2 " + telem.worldAcceleration.Float(2)); Console.WriteLine("extents centre 0 " + telem.extentsCentre.Float(0)); Console.WriteLine("extents centre 1 " + telem.extentsCentre.Float(1)); Console.WriteLine("extents centre 2 " + telem.extentsCentre.Float(2)); Console.WriteLine("tyre flags 0 " + telem.tyreFlags.TyreFlag(0)); Console.WriteLine("tyre flags 1 " + telem.tyreFlags.TyreFlag(1)); Console.WriteLine("tyre flags 2 " + telem.tyreFlags.TyreFlag(2)); Console.WriteLine("tyre flags 3 " + telem.tyreFlags.TyreFlag(3)); Console.WriteLine("terrain 0 " + telem.terrain.Terrain(0)); Console.WriteLine("terrain 1 " + telem.terrain.Terrain(1)); Console.WriteLine("terrain 2 " + telem.terrain.Terrain(2)); Console.WriteLine("terrain 3 " + telem.terrain.Terrain(3)); Console.WriteLine("tyre y 0 " + telem.tyreY.Float(0)); Console.WriteLine("tyre y 1 " + telem.tyreY.Float(1)); Console.WriteLine("tyre y 2 " + telem.tyreY.Float(2)); Console.WriteLine("tyre y 3 " + telem.tyreY.Float(3)); Console.WriteLine("tyre rps 0 " + telem.tyreRPS.Float(0)); Console.WriteLine("tyre rps 1 " + telem.tyreRPS.Float(1)); Console.WriteLine("tyre rps 2 " + telem.tyreRPS.Float(2)); Console.WriteLine("tyre rps 3 " + telem.tyreRPS.Float(3)); Console.WriteLine("tyre temp 0 " + telem.tyreTemp.UInt(0)); Console.WriteLine("tyre temp 1 " + telem.tyreTemp.UInt(1)); Console.WriteLine("tyre temp 2 " + telem.tyreTemp.UInt(2)); Console.WriteLine("tyre temp 3 " + telem.tyreTemp.UInt(3)); Console.WriteLine("tyre height above ground 0 " + telem.tyreHeightAboveGround.Float(0)); Console.WriteLine("tyre height above ground 1 " + telem.tyreHeightAboveGround.Float(1)); Console.WriteLine("tyre height above ground 2 " + telem.tyreHeightAboveGround.Float(2)); Console.WriteLine("tyre height above ground 3 " + telem.tyreHeightAboveGround.Float(3)); Console.WriteLine("tyre wear 0 " + telem.tyreWear.UInt(0)); Console.WriteLine("tyre wear 1 " + telem.tyreWear.UInt(1)); Console.WriteLine("tyre wear 2 " + telem.tyreWear.UInt(2)); Console.WriteLine("tyre wear 3 " + telem.tyreWear.UInt(3)); Console.WriteLine("brake damage 0 " + telem.brakeDamage.UInt(0)); Console.WriteLine("brake damage 1 " + telem.brakeDamage.UInt(1)); Console.WriteLine("brake damage 2 " + telem.brakeDamage.UInt(2)); Console.WriteLine("brake damage 3 " + telem.brakeDamage.UInt(3)); Console.WriteLine("suspension damage 0 " + telem.suspensionDamage.UInt(0)); Console.WriteLine("suspension damage 1 " + telem.suspensionDamage.UInt(1)); Console.WriteLine("suspension damage 2 " + telem.suspensionDamage.UInt(2)); Console.WriteLine("suspension damage 3 " + telem.suspensionDamage.UInt(3)); Console.WriteLine("brake temp celsius 0 " + telem.brakeTempCelsius.Short(0)); Console.WriteLine("brake temp celsius 1 " + telem.brakeTempCelsius.Short(1)); Console.WriteLine("brake temp celsius 2 " + telem.brakeTempCelsius.Short(2)); Console.WriteLine("brake temp celsius 3 " + telem.brakeTempCelsius.Short(3)); Console.WriteLine("tyre tread temp 0 " + telem.tyreTreadTemp.UShort(0)); Console.WriteLine("tyre tread temp 1 " + telem.tyreTreadTemp.UShort(1)); Console.WriteLine("tyre tread temp 2 " + telem.tyreTreadTemp.UShort(2)); Console.WriteLine("tyre tread temp 3 " + telem.tyreTreadTemp.UShort(3)); Console.WriteLine("tyre layer temp 0 " + telem.tyreLayerTemp.UShort(0)); Console.WriteLine("tyre layer temp 1 " + telem.tyreLayerTemp.UShort(1)); Console.WriteLine("tyre layer temp 2 " + telem.tyreLayerTemp.UShort(2)); Console.WriteLine("tyre layer temp 3 " + telem.tyreLayerTemp.UShort(3)); Console.WriteLine("tyre carcass temp 0 " + telem.tyreCarcassTemp.UShort(0)); Console.WriteLine("tyre carcass temp 1 " + telem.tyreCarcassTemp.UShort(1)); Console.WriteLine("tyre carcass temp 2 " + telem.tyreCarcassTemp.UShort(2)); Console.WriteLine("tyre carcass temp 3 " + telem.tyreCarcassTemp.UShort(3)); Console.WriteLine("tyre rim temp 0 " + telem.tyreRimTemp.UShort(0)); Console.WriteLine("tyre rim temp 1 " + telem.tyreRimTemp.UShort(1)); Console.WriteLine("tyre rim temp 2 " + telem.tyreRimTemp.UShort(2)); Console.WriteLine("tyre rim temp 3 " + telem.tyreRimTemp.UShort(3)); Console.WriteLine("tyre internal air temp 0 " + telem.tyreInternalAirTemp.UShort(0)); Console.WriteLine("tyre internal air temp 1 " + telem.tyreInternalAirTemp.UShort(1)); Console.WriteLine("tyre internal air temp 2 " + telem.tyreInternalAirTemp.UShort(2)); Console.WriteLine("tyre internal air temp 3 " + telem.tyreInternalAirTemp.UShort(3)); Console.WriteLine("tyre temp left 0 " + telem.tyreTempLeft.UShort(0)); Console.WriteLine("tyre temp left 1 " + telem.tyreTempLeft.UShort(1)); Console.WriteLine("tyre temp left 2 " + telem.tyreTempLeft.UShort(2)); Console.WriteLine("tyre temp left 3 " + telem.tyreTempLeft.UShort(3)); Console.WriteLine("tyre temp centre 0 " + telem.tyreTempCenter.UShort(0)); Console.WriteLine("tyre temp centre 1 " + telem.tyreTempCenter.UShort(1)); Console.WriteLine("tyre temp centre 2 " + telem.tyreTempCenter.UShort(2)); Console.WriteLine("tyre temp centre 3 " + telem.tyreTempCenter.UShort(3)); Console.WriteLine("tyre temp right 0 " + telem.tyreTempRight.UShort(0)); Console.WriteLine("tyre temp right 1 " + telem.tyreTempRight.UShort(1)); Console.WriteLine("tyre temp right 2 " + telem.tyreTempLeft.UShort(2)); Console.WriteLine("tyre temp right 3 " + telem.tyreTempRight.UShort(3)); Console.WriteLine("wheel local position y 0 " + telem.wheelLocalPositionY.Float(0)); Console.WriteLine("wheel local position y 1 " + telem.wheelLocalPositionY.Float(1)); Console.WriteLine("wheel local position y 2 " + telem.wheelLocalPositionY.Float(2)); Console.WriteLine("wheel local position y 3 " + telem.wheelLocalPositionY.Float(3)); Console.WriteLine("ride height 0 " + telem.rideHeight.Float(0)); Console.WriteLine("ride height 1 " + telem.rideHeight.Float(1)); Console.WriteLine("ride height 2 " + telem.rideHeight.Float(2)); Console.WriteLine("ride height 3 " + telem.rideHeight.Float(3)); Console.WriteLine("suspension travel 0 " + telem.suspensionTravel.Float(0)); Console.WriteLine("suspension travel 1 " + telem.suspensionTravel.Float(1)); Console.WriteLine("suspension travel 2 " + telem.suspensionTravel.Float(2)); Console.WriteLine("suspension travel 3 " + telem.suspensionTravel.Float(3)); Console.WriteLine("suspension velocity 0 " + telem.suspensionVelocity.Float(0)); Console.WriteLine("suspension velocity 1 " + telem.suspensionVelocity.Float(1)); Console.WriteLine("suspension velocity 2 " + telem.suspensionVelocity.Float(2)); Console.WriteLine("suspension velocity 3 " + telem.suspensionVelocity.Float(3)); Console.WriteLine("suspension ride height 0 " + telem.suspensionRideHeight.UShort(0)); Console.WriteLine("suspension ride height 1 " + telem.suspensionRideHeight.UShort(1)); Console.WriteLine("suspension ride height 2 " + telem.suspensionRideHeight.UShort(2)); Console.WriteLine("suspension ride height 3 " + telem.suspensionRideHeight.UShort(3)); Console.WriteLine("air pressure 0 " + telem.airPressure.UShort(0)); Console.WriteLine("air pressure 1 " + telem.airPressure.UShort(1)); Console.WriteLine("air pressure 2 " + telem.airPressure.UShort(2)); Console.WriteLine("air pressure 3 " + telem.airPressure.UShort(3)); Console.WriteLine("engine speed " + telem.engineSpeed.Float()); Console.WriteLine("engine torque " + telem.engineTorque.Float()); Console.WriteLine("wings 0 " + telem.wings.UInt(0)); Console.WriteLine("wings 1 " + telem.wings.UInt(1)); Console.WriteLine("handbrake " + telem.handBrake.UInt()); Console.WriteLine("aero damage " + telem.aeroDamage.UInt()); Console.WriteLine("engine damage " + telem.engineDamage.UInt()); Console.WriteLine("joy pad " + telem.joyPad0.UInt()); Console.WriteLine("d pad " + telem.dPad.UInt()); Console.WriteLine("d pad " + telem.dPad.UInt()); Console.WriteLine("tyre compond 0 " + telem.tyreCompound.String(0)); Console.WriteLine("tyre compond 1 " + telem.tyreCompound.String(1)); Console.WriteLine("tyre compond 2 " + telem.tyreCompound.String(2)); Console.WriteLine("tyre compond 3 " + telem.tyreCompound.String(3)); Console.WriteLine("turbo boost pressure " + telem.turboBoostPressure.Float()); Console.WriteLine("full position 0 " + telem.fullPosition.Float(0)); Console.WriteLine("full position 1 " + telem.fullPosition.Float(1)); Console.WriteLine("full position 2 " + telem.fullPosition.Float(2)); Console.WriteLine("brake bias " + telem.brakeBias.UInt()); Console.WriteLine("tick count " + telem.tickCount.UInt()); } // if (packetBase.packetType.UInt() == 3 && bytes.Length == 1063) // disabled if (packetBase.packetType.UInt() == 5555 && bytes.Length == 1063) { var timing = new TimingsDataDecoder(); index = 0; timing.Decode(ref bytes, ref index); Console.WriteLine("num participants " + timing.numParticipants.Int()); // No idea what this is but all participant packets have one Console.WriteLine("changed timestamp " + timing.participantsChangedTimestamp.UInt()); Console.WriteLine("split time ahead " + timing.splitTimeAhead.Float()); Console.WriteLine("split time behind " + timing.splitTimeBehind.Float()); Console.WriteLine("split time " + timing.splitTime.Float()); // Not sure which one is which Console.WriteLine("world position 0 " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).worldPosition.Short(0)); Console.WriteLine("world position 1 " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).worldPosition.Short(1)); Console.WriteLine("world position 2 " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).worldPosition.Short(2)); // Direction you are facing seems to go between 520-0 Console.WriteLine("orientation 0 " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).orientation.Short(0)); // these two might have something to do with pitch of the car? Console.WriteLine("orientation 1 " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).orientation.Short(1)); Console.WriteLine("orientation 2 " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).orientation.Short(2)); Console.WriteLine("current lap distance " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).currentLapDistance.UShort()); Console.WriteLine("Is Active " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).racePosition.IsActive()); Console.WriteLine("Race Position " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).racePosition.RacePosition()); Console.WriteLine("Sector " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).sector.Sector()); Console.WriteLine("Extra world x " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).sector.XExtraPrecision()); Console.WriteLine("Extra world z " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).sector.ZExtraPrecision()); Console.WriteLine("Flag Colours " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).highestFlag.FlagColours()); Console.WriteLine("Flag Reason " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).highestFlag.FlagReason()); Console.WriteLine("Pit Mode " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).pitModeSchedule.PitMode()); Console.WriteLine("Pit Schedule " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).pitModeSchedule.PitSchedule()); // Car Index is broken waiting on patch Console.WriteLine("Car Index " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).carIndex.UShort()); Console.WriteLine("Race State " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).raceState.RaceState()); Console.WriteLine("Invalid Lap " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).raceState.InvalidLap()); Console.WriteLine("Current Lap " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).currentLap.UInt()); Console.WriteLine("Current Time " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).currentTime.TimeStamp()); Console.WriteLine("Current Sector Time " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).currentSectorTime.TimeStamp()); Console.WriteLine("Participant Index " + timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).participantIndex.UShort()); } } } }