public override void LoadBytes(byte[] bytes)
        {
            ByteArrayManager BAM = new ByteArrayManager(bytes);

            base.LoadBytes(BAM.NextBytes(24)); //Load header

            int t = 0;
            List <CarTelemetryData> TelDatas = new List <CarTelemetryData>();

            for (t = 1; t <= 22; t++)
            {
                TelDatas.Add(CarTelemetryData.Create(BAM.NextBytes(58)));
            }
            FieldTelemetryData = TelDatas.ToArray();

            //Button status
            ButtonStatus = BitConverter.ToInt32(BAM.NextBytes(4), 0);

            //MFD Panel Index
            MfdPanelIndex = BAM.NextByte();

            //Secndary player mfd panel index
            SecondaryPlayerMfdPanelIndex = BAM.NextByte();

            //Suggested gear
            SuggestedGear = BAM.NextByte();
        }
Example #2
0
        public override void LoadBytes(byte[] bytes)
        {
            ByteArrayManager bam = new ByteArrayManager(bytes);

            base.LoadBytes(bam.NextBytes(24));


            List <CarStatusData> csds = new List <CarStatusData>();
            int t = 1;

            for (t = 1; t <= 22; t++)
            {
                csds.Add(CarStatusData.CreateFromBytes(bam.NextBytes(60)));
            }
            FieldCarStatusData = csds.ToArray();
        }
        public override void LoadBytes(byte[] bytes)
        {
            ByteArrayManager BAM = new ByteArrayManager(bytes);

            //Load header
            base.LoadBytes(BAM.NextBytes(24));

            this.NumPlayers   = BAM.NextByte();
            this.LobbyPlayers = new LobbyInfoData[22];

            for (int i = 0; i < 22; i++)
            {
                var lobbyInfoData = new LobbyInfoData
                {
                    AiControlled = BAM.NextByte() == 1,
                    TeamId       = CodemastersToolkit.GetTeamFromTeamId(BAM.NextByte()),
                    Nationality  = BAM.NextByte(),
                    Name         = ""
                };

                for (var t = 1; t <= 48; t++)
                {
                    var currentChar = Convert.ToChar(BAM.NextByte());
                    lobbyInfoData.Name += currentChar.ToString();
                }

                var readyStatusByte = BAM.NextByte();
                lobbyInfoData.ReadyStatus = readyStatusByte == 0 ? ReadyStatus.NotReady :
                                            readyStatusByte == 1 ? ReadyStatus.Ready : ReadyStatus.Spectating;

                this.LobbyPlayers[i] = lobbyInfoData;
            }
        }
            public static MarshallZone Create(byte[] bytes)
            {
                MarshallZone     ReturnInstance = new MarshallZone();
                ByteArrayManager BAM            = new ByteArrayManager(bytes);

                //Get zone start
                ReturnInstance.ZoneStart = BitConverter.ToSingle(BAM.NextBytes(4), 0);

                //Get zone flag
                byte nb = BAM.NextByte();

                if (nb == 0)
                {
                    ReturnInstance.ZoneFlag = FiaFlag.None;
                }
                else if (nb == 1)
                {
                    ReturnInstance.ZoneFlag = FiaFlag.Green;
                }
                else if (nb == 2)
                {
                    ReturnInstance.ZoneFlag = FiaFlag.Blue;
                }
                else if (nb == 3)
                {
                    ReturnInstance.ZoneFlag = FiaFlag.Yellow;
                }
                else if (nb == 4)
                {
                    ReturnInstance.ZoneFlag = FiaFlag.Red;
                }

                return(ReturnInstance);
            }
Example #5
0
        public override void LoadBytes(byte[] bytes)
        {
            ByteArrayManager BAM = new ByteArrayManager(bytes);

            base.LoadBytes(BAM.NextBytes(23)); //Load header

            int t = 0;
            List <CarTelemetryData> TelDatas = new List <CarTelemetryData>();

            for (t = 1; t <= 20; t++)
            {
                TelDatas.Add(CarTelemetryData.Create(BAM.NextBytes(66)));
            }
            FieldTelemetryData = TelDatas.ToArray();

            //I skipped the field "ButtonStatus".  Doesn't seem needed.
        }
Example #6
0
        public override void LoadBytes(byte[] bytes)
        {
            ByteArrayManager BAM = new ByteArrayManager(bytes);

            base.LoadBytes(BAM.NextBytes(23));

            NumberOfActiveCars = BAM.NextByte();

            List <ParticipantData> PDs = new List <ParticipantData>();
            int t = 1;

            for (t = 1; t <= 20; t++)
            {
                PDs.Add(ParticipantData.Create(BAM.NextBytes(54)));
            }
            FieldParticipantData = PDs.ToArray();
        }
        public override void LoadBytes(byte[] bytes)
        {
            ByteArrayManager BAM = new ByteArrayManager(bytes);

            //Get header
            base.LoadBytes(BAM.NextBytes(24));



            //Get the next 20 data packages
            List <LapData> LDs = new List <LapData>();
            int            t   = 1;

            for (t = 1; t <= 22; t++)
            {
                LDs.Add(LapData.Create(BAM.NextBytes(53)));
            }
            FieldLapData = LDs.ToArray();
        }
        public override void LoadBytes(byte[] bytes)
        {
            ByteArrayManager BAM = new ByteArrayManager(bytes);

            //Get header
            base.LoadBytes(BAM.NextBytes(24));

            //Get number of cars
            NumberOfCars = BAM.NextByte();

            //Get Final Classification Data
            List <FinalClassificationData> fcdata = new List <FinalClassificationData>();

            // int t = 0;
            for (int t = 0; t < 22; t++)
            {
                fcdata.Add(FinalClassificationData.Create(BAM.NextBytes(37)));
            }
            FieldClassificationData = fcdata.ToArray();
        }
            public static LapData Create(byte[] bytes)
            {
                LapData          ReturnInstance = new LapData();
                ByteArrayManager BAM            = new ByteArrayManager(bytes);

                ReturnInstance.LastLapTime    = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.CurrentLapTime = BitConverter.ToSingle(BAM.NextBytes(4), 0);

                ReturnInstance.Sector1TimeMilliseconds = BitConverter.ToUInt16(BAM.NextBytes(2), 0);
                ReturnInstance.Sector2TimeMilliseconds = BitConverter.ToUInt16(BAM.NextBytes(2), 0);


                ReturnInstance.BestLapTimeSeconds = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.BestLapNumber      = BAM.NextByte();

                ReturnInstance.BestLapSector1TimeMilliseconds = BitConverter.ToUInt16(BAM.NextBytes(2), 0);
                ReturnInstance.BestLapSector2TimeMilliseconds = BitConverter.ToUInt16(BAM.NextBytes(2), 0);
                ReturnInstance.BestLapSector3TimeMilliseconds = BitConverter.ToUInt16(BAM.NextBytes(2), 0);

                ReturnInstance.BestOverallSector1TimeMilliseconds = BitConverter.ToUInt16(BAM.NextBytes(2), 0);
                ReturnInstance.BestOverallSector1TimeLapNumber    = BAM.NextByte();
                ReturnInstance.BestOverallSector2TimeMilliseconds = BitConverter.ToUInt16(BAM.NextBytes(2), 0);
                ReturnInstance.BestOverallSector2TimeLapNumber    = BAM.NextByte();
                ReturnInstance.BestOverallSector3TimeMilliseconds = BitConverter.ToUInt16(BAM.NextBytes(2), 0);
                ReturnInstance.BestOverallSector3TimeLapNumber    = BAM.NextByte();

                ReturnInstance.LapDistance      = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.TotalDistance    = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.SafetyCarDelta   = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.CarPosition      = BAM.NextByte();
                ReturnInstance.CurrentLapNumber = BAM.NextByte();

                //Get pit status
                byte nb = BAM.NextByte();

                if (nb == 0)
                {
                    ReturnInstance.CurrentPitStatus = PitStatus.OnTrack;
                }
                else if (nb == 1)
                {
                    ReturnInstance.CurrentPitStatus = PitStatus.PitLane;
                }
                else if (nb == 2)
                {
                    ReturnInstance.CurrentPitStatus = PitStatus.PitArea;
                }

                //Get sector
                ReturnInstance.Sector = System.Convert.ToByte(BAM.NextByte() + 1);

                //Get current lap invalid
                nb = BAM.NextByte();
                if (nb == 0)
                {
                    ReturnInstance.CurrentLapInvalid = false;
                }
                else if (nb == 1)
                {
                    ReturnInstance.CurrentLapInvalid = true;
                }

                //Get penalties
                ReturnInstance.Penalties = BAM.NextByte();

                //Get grid position
                ReturnInstance.StartingGridPosition = BAM.NextByte();

                //Get driver status
                nb = BAM.NextByte();
                if (nb == 0)
                {
                    ReturnInstance.CurrentDriverStatus = DriverStatus.InGarage;
                }
                else if (nb == 1)
                {
                    ReturnInstance.CurrentDriverStatus = DriverStatus.FlyingLap;
                }
                else if (nb == 2)
                {
                    ReturnInstance.CurrentDriverStatus = DriverStatus.InLap;
                }
                else if (nb == 3)
                {
                    ReturnInstance.CurrentDriverStatus = DriverStatus.OutLap;
                }
                else if (nb == 4)
                {
                    ReturnInstance.CurrentDriverStatus = DriverStatus.OnTrack;
                }


                //Get result status
                nb = BAM.NextByte();
                if (nb == 0)
                {
                    ReturnInstance.FinalResultStatus = ResultStatus.Invalid;
                }
                else if (nb == 1)
                {
                    ReturnInstance.FinalResultStatus = ResultStatus.Inactive;
                }
                else if (nb == 2)
                {
                    ReturnInstance.FinalResultStatus = ResultStatus.Active;
                }
                else if (nb == 3)
                {
                    ReturnInstance.FinalResultStatus = ResultStatus.Finished;
                }
                else if (nb == 4)
                {
                    ReturnInstance.FinalResultStatus = ResultStatus.Disqualified;
                }
                else if (nb == 5)
                {
                    ReturnInstance.FinalResultStatus = ResultStatus.NotClassified;
                }
                else if (nb == 6)
                {
                    ReturnInstance.FinalResultStatus = ResultStatus.Retired;
                }

                return(ReturnInstance);
            }
        public override void LoadBytes(byte[] bytes)
        {
            ByteArrayManager BAM = new ByteArrayManager(bytes);

            //Update the header.
            base.LoadBytes(BAM.NextBytes(24));



            //Create car motion data
            int t = 1;
            List <CarMotionData> AllCarData = new List <CarMotionData>();

            for (t = 1; t <= 22; t++)
            {
                CarMotionData thiscardata = CarMotionData.Create(BAM.NextBytes(60));
                AllCarData.Add(thiscardata);
            }
            FieldMotionData = AllCarData.ToArray();


            //Get suspension position
            SuspensionPosition            = new WheelDataArray();
            SuspensionPosition.RearLeft   = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            SuspensionPosition.RearRight  = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            SuspensionPosition.FrontLeft  = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            SuspensionPosition.FrontRight = BitConverter.ToSingle(BAM.NextBytes(4), 0);

            //Get suspension velocity
            SuspensionVelocity            = new WheelDataArray();
            SuspensionVelocity.RearLeft   = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            SuspensionVelocity.RearRight  = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            SuspensionVelocity.FrontLeft  = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            SuspensionVelocity.FrontRight = BitConverter.ToSingle(BAM.NextBytes(4), 0);

            //Get suspension acceleration
            SuspensionAcceleration            = new WheelDataArray();
            SuspensionAcceleration.RearLeft   = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            SuspensionAcceleration.RearRight  = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            SuspensionAcceleration.FrontLeft  = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            SuspensionAcceleration.FrontRight = BitConverter.ToSingle(BAM.NextBytes(4), 0);

            //Get wheel speed
            WheelSpeed            = new WheelDataArray();
            WheelSpeed.RearLeft   = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            WheelSpeed.RearRight  = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            WheelSpeed.FrontLeft  = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            WheelSpeed.FrontRight = BitConverter.ToSingle(BAM.NextBytes(4), 0);

            //Get WheelSlip
            WheelSlip            = new WheelDataArray();
            WheelSlip.RearLeft   = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            WheelSlip.RearRight  = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            WheelSlip.FrontLeft  = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            WheelSlip.FrontRight = BitConverter.ToSingle(BAM.NextBytes(4), 0);

            //Get velocity X,Y,Z
            VelocityX = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            VelocityY = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            VelocityZ = BitConverter.ToSingle(BAM.NextBytes(4), 0);

            //Get angular velocity X,Y,Z
            AngularVelocityX = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            AngularVelocityY = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            AngularVelocityZ = BitConverter.ToSingle(BAM.NextBytes(4), 0);

            //Get angular acceleration X,Y,Z
            AngularAccelerationX = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            AngularAccelerationY = BitConverter.ToSingle(BAM.NextBytes(4), 0);
            AngularAccelerationZ = BitConverter.ToSingle(BAM.NextBytes(4), 0);

            //Get front wheel angle
            FrontWheelAngle = BitConverter.ToSingle(BAM.NextBytes(4), 0);
        }
            /// <summary>
            /// Takes 60 bytes to make.
            /// </summary>
            /// <param name="bytes"></param>
            /// <returns></returns>
            public static CarMotionData Create(byte[] bytes)
            {
                CarMotionData    ReturnInstance = new CarMotionData();
                ByteArrayManager BAM            = new ByteArrayManager(bytes);
                List <byte>      ToConvert      = new List <byte>();

                //Get position X,Y,Z
                ReturnInstance.PositionX = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.PositionY = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.PositionZ = BitConverter.ToSingle(BAM.NextBytes(4), 0);

                //Get Velocity X,Y,Z
                ReturnInstance.VelocityX = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.VelocityY = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.VelocityZ = BitConverter.ToSingle(BAM.NextBytes(4), 0);

                //Get forward direction X,Y,Z
                ReturnInstance.ForwardDirectionX = BitConverter.ToInt16(BAM.NextBytes(2), 0);
                ReturnInstance.ForwardDirectionY = BitConverter.ToInt16(BAM.NextBytes(2), 0);
                ReturnInstance.ForwardDirectionZ = BitConverter.ToInt16(BAM.NextBytes(2), 0);

                //Get right direction X,Y,Z
                ReturnInstance.RightDirectionX = BitConverter.ToInt16(BAM.NextBytes(2), 0);
                ReturnInstance.RightDirectionY = BitConverter.ToInt16(BAM.NextBytes(2), 0);
                ReturnInstance.RightDirectionZ = BitConverter.ToInt16(BAM.NextBytes(2), 0);

                //Get G Forces
                ReturnInstance.gForceLateral      = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.gForceLongitudinal = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.gForceVertical     = BitConverter.ToSingle(BAM.NextBytes(4), 0);

                //Get Yaw, Pitch, Role
                ReturnInstance.Yaw   = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.Pitch = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.Roll  = BitConverter.ToSingle(BAM.NextBytes(4), 0);

                return(ReturnInstance);
            }
Example #12
0
            /// <summary>
            /// Takes 56 bytes
            /// </summary>
            /// <param name="bytes"></param>
            /// <returns></returns>
            public static CarStatusData CreateFromBytes(byte[] bytes)
            {
                CarStatusData    ToReturn = new CarStatusData();
                ByteArrayManager bam      = new ByteArrayManager(bytes);

                byte nb = 0;

                //Traction control
                nb = bam.NextByte();
                if (nb == 0)
                {
                    ToReturn.TractionControlStatus = TractionControlLevel.Off;
                }
                else if (nb == 1)
                {
                    ToReturn.TractionControlStatus = TractionControlLevel.Low;
                }
                else if (nb == 2)
                {
                    ToReturn.TractionControlStatus = TractionControlLevel.High;
                }
                else
                {
                    ToReturn.TractionControlStatus = TractionControlLevel.Off;
                }

                //Anti-lock brakes
                if (bam.NextByte() == 1)
                {
                    ToReturn.AntiLockBrakesOn = true;
                }
                else
                {
                    ToReturn.AntiLockBrakesOn = false;
                }

                //Fuel mix
                nb = bam.NextByte();
                if (nb == 0)
                {
                    ToReturn.SelectedFuelMix = FuelMix.Lean;
                }
                else if (nb == 1)
                {
                    ToReturn.SelectedFuelMix = FuelMix.Standard;
                }
                else if (nb == 2)
                {
                    ToReturn.SelectedFuelMix = FuelMix.Rich;
                }
                else if (nb == 3)
                {
                    ToReturn.SelectedFuelMix = FuelMix.Max;
                }

                //Front Brake bias percentage
                ToReturn.FrontBrakeBiasPercentage = bam.NextByte();

                //Pit limiter
                if (bam.NextByte() == 1)
                {
                    ToReturn.PitLimiterOn = true;
                }
                else
                {
                    ToReturn.PitLimiterOn = false;
                }

                //Fuel in tank
                ToReturn.FuelLevel = BitConverter.ToSingle(bam.NextBytes(4), 0);

                //Fuel capacity
                ToReturn.FuelCapacity = BitConverter.ToSingle(bam.NextBytes(4), 0);

                //Fuel remaining laps
                ToReturn.FuelRemainingLaps = BitConverter.ToSingle(bam.NextBytes(4), 0);

                //Max RPM
                ToReturn.MaxRpm = BitConverter.ToUInt16(bam.NextBytes(2), 0);

                //Idle RPM
                ToReturn.IdleRpm = BitConverter.ToUInt16(bam.NextBytes(2), 0);

                //Max gears
                ToReturn.MaxGears = bam.NextByte();

                //DRS allowed
                nb = bam.NextByte();
                if (nb == 1)
                {
                    ToReturn.DrsAllowed = true;
                }
                else
                {
                    ToReturn.DrsAllowed = false;
                }

                //DRS activation distance
                ToReturn.DrsActivationDistance = BitConverter.ToUInt16(bam.NextBytes(2), 0);


                //Tyre Wear
                ToReturn.TyreWearPercentage            = new WheelDataArray();
                ToReturn.TyreWearPercentage.FrontLeft  = Convert.ToSingle(bam.NextByte());
                ToReturn.TyreWearPercentage.FrontRight = Convert.ToSingle(bam.NextByte());
                ToReturn.TyreWearPercentage.RearLeft   = Convert.ToSingle(bam.NextByte());
                ToReturn.TyreWearPercentage.RearRight  = Convert.ToSingle(bam.NextByte());

                //Tyre Compound
                nb = bam.NextByte();
                if (nb == 16)
                {
                    ToReturn.EquippedTyreCompound = TyreCompound.C5;
                }
                else if (nb == 17)
                {
                    ToReturn.EquippedTyreCompound = TyreCompound.C4;
                }
                else if (nb == 18)
                {
                    ToReturn.EquippedTyreCompound = TyreCompound.C3;
                }
                else if (nb == 19)
                {
                    ToReturn.EquippedTyreCompound = TyreCompound.C2;
                }
                else if (nb == 20)
                {
                    ToReturn.EquippedTyreCompound = TyreCompound.C1;
                }
                else if (nb == 7)
                {
                    ToReturn.EquippedTyreCompound = TyreCompound.Inter;
                }
                else if (nb == 8)
                {
                    ToReturn.EquippedTyreCompound = TyreCompound.Wet;
                }

                //Tyre visual compound
                ToReturn.EquippedVisualTyreCompoundId = bam.NextByte();

                //Tyre age in laps
                ToReturn.TyreAgeLaps = bam.NextByte();

                //Tyre damage
                ToReturn.TyreDamagePercentage            = new WheelDataArray();
                ToReturn.TyreDamagePercentage.FrontLeft  = Convert.ToSingle(bam.NextByte());
                ToReturn.TyreDamagePercentage.FrontRight = Convert.ToSingle(bam.NextByte());
                ToReturn.TyreDamagePercentage.RearLeft   = Convert.ToSingle(bam.NextByte());
                ToReturn.TyreDamagePercentage.RearRight  = Convert.ToSingle(bam.NextByte());

                //Front left wing damage
                ToReturn.FrontLeftWingDamagePercent = bam.NextByte();

                //Front right wing damage
                ToReturn.FrontRightWingDamagePercent = bam.NextByte();

                //Rear wing damage
                ToReturn.RearWingDamagePercent = bam.NextByte();

                //DRS failure
                nb = bam.NextByte();
                if (nb == 0)
                {
                    ToReturn.DrsFailure = false;
                }
                else
                {
                    ToReturn.DrsFailure = true;
                }

                //Engine damage
                ToReturn.EngineDamagePercent = bam.NextByte();

                //Gear box damage
                ToReturn.GearBoxDamagePercent = bam.NextByte();

                //FIA Vehicle Flag
                sbyte fiavf = Convert.ToSByte(bam.NextByte());

                if (fiavf == -1)
                {
                    ToReturn.VehicleFiaFlag = FiaFlag.Unknown;
                }
                else if (fiavf == 0)
                {
                    ToReturn.VehicleFiaFlag = FiaFlag.None;
                }
                else if (fiavf == 1)
                {
                    ToReturn.VehicleFiaFlag = FiaFlag.Green;
                }
                else if (fiavf == 2)
                {
                    ToReturn.VehicleFiaFlag = FiaFlag.Blue;
                }
                else if (fiavf == 3)
                {
                    ToReturn.VehicleFiaFlag = FiaFlag.Yellow;
                }
                else if (fiavf == 4)
                {
                    ToReturn.VehicleFiaFlag = FiaFlag.Red;
                }


                //Ers Store energy
                ToReturn.ErsStoredEnergyJoules = BitConverter.ToSingle(bam.NextBytes(4), 0);

                //Ers deploy mode
                nb = bam.NextByte();
                if (nb == 0)
                {
                    ToReturn.SelectedErsDeployMode = ErsDeployMode.None;
                }
                else if (nb == 1)
                {
                    ToReturn.SelectedErsDeployMode = ErsDeployMode.Medium;
                }
                else if (nb == 2)
                {
                    ToReturn.SelectedErsDeployMode = ErsDeployMode.Overtake;
                }
                else if (nb == 3)
                {
                    ToReturn.SelectedErsDeployMode = ErsDeployMode.HotLap;
                }

                //Ers Harvested this lap by MGUK
                ToReturn.ErsHarvestedThisLapByMGUK = BitConverter.ToSingle(bam.NextBytes(4), 0);

                //Ers harvested this lap by MGUH
                ToReturn.ErsHarvestedThisLapByMGUH = BitConverter.ToSingle(bam.NextBytes(4), 0);

                //Ers deployed this lap
                ToReturn.ErsDeployedThisLap = BitConverter.ToSingle(bam.NextBytes(4), 0);



                return(ToReturn);
            }
            public static CarTelemetryData Create(byte[] bytes)
            {
                CarTelemetryData ReturnInstance = new CarTelemetryData();

                ByteArrayManager BAM = new ByteArrayManager(bytes);

                //Get speed
                ReturnInstance.SpeedKph = BitConverter.ToUInt16(BAM.NextBytes(2), 0);
                double MPH = ReturnInstance.SpeedKph * 0.621371;

                ReturnInstance.SpeedMph = (ushort)MPH;

                //Get throttle
                ReturnInstance.Throttle = BitConverter.ToSingle(BAM.NextBytes(4), 0);

                //Get steer
                ReturnInstance.Steer = BitConverter.ToSingle(BAM.NextBytes(4), 0);

                //Get brake
                ReturnInstance.Brake = BitConverter.ToSingle(BAM.NextBytes(4), 0);

                //Get clutch
                ReturnInstance.Clutch = BAM.NextByte();

                //Get gear
                ReturnInstance.Gear = (sbyte)BAM.NextByte();

                //Get engine RMP
                ReturnInstance.EngineRpm = BitConverter.ToUInt16(BAM.NextBytes(2), 0);

                //Drs on or not
                byte nb = BAM.NextByte();

                if (nb == 0)
                {
                    ReturnInstance.DrsActive = false;
                }
                else if (nb == 1)
                {
                    ReturnInstance.DrsActive = true;
                }

                //Get engine rev lights percentage
                ReturnInstance.RevLightsPercentage = BAM.NextByte();

                //get brake temperature
                ReturnInstance.BrakeTemperature            = new WheelDataArray();
                ReturnInstance.BrakeTemperature.RearLeft   = (float)BitConverter.ToUInt16(BAM.NextBytes(2), 0);
                ReturnInstance.BrakeTemperature.RearRight  = (float)BitConverter.ToUInt16(BAM.NextBytes(2), 0);
                ReturnInstance.BrakeTemperature.FrontLeft  = (float)BitConverter.ToUInt16(BAM.NextBytes(2), 0);
                ReturnInstance.BrakeTemperature.FrontRight = (float)BitConverter.ToUInt16(BAM.NextBytes(2), 0);

                //get tyre surface temperature
                ReturnInstance.TyreSurfaceTemperature            = new WheelDataArray();
                ReturnInstance.TyreSurfaceTemperature.RearLeft   = (float)BAM.NextByte();
                ReturnInstance.TyreSurfaceTemperature.RearRight  = (float)BAM.NextByte();
                ReturnInstance.TyreSurfaceTemperature.FrontLeft  = (float)BAM.NextByte();
                ReturnInstance.TyreSurfaceTemperature.FrontRight = (float)BAM.NextByte();

                //get tyre Inner Temperature
                ReturnInstance.TyreInnerTemperature            = new WheelDataArray();
                ReturnInstance.TyreInnerTemperature.RearLeft   = (float)BAM.NextByte();
                ReturnInstance.TyreInnerTemperature.RearRight  = (float)BAM.NextByte();
                ReturnInstance.TyreInnerTemperature.FrontLeft  = (float)BAM.NextByte();
                ReturnInstance.TyreInnerTemperature.FrontRight = (float)BAM.NextByte();

                //Get engine temperature
                ReturnInstance.EngineTemperature = BitConverter.ToUInt16(BAM.NextBytes(2), 0);

                //Get tyre pressure
                ReturnInstance.TyrePressure            = new WheelDataArray();
                ReturnInstance.TyrePressure.RearLeft   = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.TyrePressure.RearRight  = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.TyrePressure.FrontLeft  = BitConverter.ToSingle(BAM.NextBytes(4), 0);
                ReturnInstance.TyrePressure.FrontRight = BitConverter.ToSingle(BAM.NextBytes(4), 0);

                //Get surface type
                ReturnInstance.SurfaceType_RearLeft   = CodemastersToolkit.GetSurfaceTypeFromSurfaceTypeId(BAM.NextByte());
                ReturnInstance.SurfaceType_RearRight  = CodemastersToolkit.GetSurfaceTypeFromSurfaceTypeId(BAM.NextByte());
                ReturnInstance.SurfaceType_FrontLeft  = CodemastersToolkit.GetSurfaceTypeFromSurfaceTypeId(BAM.NextByte());
                ReturnInstance.SurfaceType_FrontRight = CodemastersToolkit.GetSurfaceTypeFromSurfaceTypeId(BAM.NextByte());

                return(ReturnInstance);
            }
            public static FinalClassificationData Create(byte[] bytes)
            {
                FinalClassificationData ToReturn = new FinalClassificationData();
                ByteArrayManager        BAM      = new ByteArrayManager(bytes);

                //Finishing position
                ToReturn.FinishingPosition = BAM.NextByte();

                //Number of laps
                ToReturn.NumberOfLaps = BAM.NextByte();

                //Starting grid position
                ToReturn.StartingGridPosition = BAM.NextByte();

                //Points scored
                ToReturn.PointsScored = BAM.NextByte();

                //Number of pit stops
                ToReturn.NumberOfPitStops = BAM.NextByte();

                //Result status
                byte nb = BAM.NextByte();

                if (nb == 0)
                {
                    ToReturn.FinalResultStatus = ResultStatus.Invalid;
                }
                else if (nb == 1)
                {
                    ToReturn.FinalResultStatus = ResultStatus.Inactive;
                }
                else if (nb == 2)
                {
                    ToReturn.FinalResultStatus = ResultStatus.Active;
                }
                else if (nb == 3)
                {
                    ToReturn.FinalResultStatus = ResultStatus.Finished;
                }
                else if (nb == 4)
                {
                    ToReturn.FinalResultStatus = ResultStatus.Disqualified;
                }
                else if (nb == 5)
                {
                    ToReturn.FinalResultStatus = ResultStatus.NotClassified;
                }
                else if (nb == 6)
                {
                    ToReturn.FinalResultStatus = ResultStatus.Retired;
                }

                //Best lap time in seconds
                ToReturn.BestLapTimeSeconds = BitConverter.ToSingle(BAM.NextBytes(4), 0);

                //Total race time in seconds
                ToReturn.TotalRaceTimeSeconds = BitConverter.ToDouble(BAM.NextBytes(8), 0);

                //Penalties time in seconds
                ToReturn.PenaltiesTimeSeconds = BAM.NextByte();

                //Number of tyre stints
                ToReturn.NumberOfTyreStints = BAM.NextByte();

                // F1 Modern - 16 = C5, 17 = C4, 18 = C3, 19 = C2, 20 = C1
                // 7 = inter, 8 = wet
                // F1 Classic - 9 = dry, 10 = wet
                // F2 – 11 = super soft, 12 = soft, 13 = medium, 14 = hard
                // 15 = wet
                ToReturn.TyreStintsActual = new byte[8];
                for (int i = 0; i < 8; i++)
                {
                    ToReturn.TyreStintsActual[i] = BAM.NextByte();
                }

                // F1 visual (can be different from actual compound)
                // 16 = soft, 17 = medium, 18 = hard, 7 = inter, 8 = wet
                // F1 Classic – same as above
                // F2 – same as above
                ToReturn.TyreStintsVisual = new byte[8];
                for (int i = 0; i < 8; i++)
                {
                    ToReturn.TyreStintsVisual[i] = BAM.NextByte();
                }

                return(ToReturn);
            }
        }                                               //New to F1 2020. The index of the secondayr player's car (splitscreen).  255 if no second player.

        public virtual void LoadBytes(byte[] bytes)
        {
            ByteArrayManager BAM       = new ByteArrayManager(bytes);
            List <byte>      ToConvert = new List <byte>();

            //Get packet format.
            ToConvert.Add(BAM.NextByte());
            ToConvert.Add(BAM.NextByte());
            ushort i = BitConverter.ToUInt16(ToConvert.ToArray(), 0);

            PacketFormat = i;
            ToConvert.Clear();

            //Get major version
            GameMajorVersion = BAM.NextByte();

            //Get minor version
            GameMinorVersion = BAM.NextByte();

            //Get packet version
            PacketVersion = BAM.NextByte();

            //Get packet type
            byte PackVer = BAM.NextByte();

            if (PackVer == 0)
            {
                PacketType = PacketType.Motion;
            }
            else if (PackVer == 1)
            {
                PacketType = PacketType.Session;
            }
            else if (PackVer == 2)
            {
                PacketType = PacketType.Lap;
            }
            else if (PackVer == 3)
            {
                PacketType = PacketType.Event;
            }
            else if (PackVer == 4)
            {
                PacketType = PacketType.Participants;
            }
            else if (PackVer == 5)
            {
                PacketType = PacketType.CarSetup;
            }
            else if (PackVer == 6)
            {
                PacketType = PacketType.CarTelemetry;
            }
            else if (PackVer == 7)
            {
                PacketType = PacketType.CarStatus;
            }
            else if (PackVer == 8)
            {
                PacketType = PacketType.FinalClassification;
            }
            else if (PackVer == 9)
            {
                PacketType = PacketType.LobbyInfo;
            }


            //Get unique session ID
            ToConvert.Clear();
            ToConvert.Add(BAM.NextByte());
            ToConvert.Add(BAM.NextByte());
            ToConvert.Add(BAM.NextByte());
            ToConvert.Add(BAM.NextByte());
            ToConvert.Add(BAM.NextByte());
            ToConvert.Add(BAM.NextByte());
            ToConvert.Add(BAM.NextByte());
            ToConvert.Add(BAM.NextByte());
            UniqueSessionId = BitConverter.ToUInt64(ToConvert.ToArray(), 0);
            ToConvert.Clear();

            //Get session time
            SessionTime = BitConverter.ToSingle(BAM.NextBytes(4), 0);

            //Get frame identifier
            FrameIdentifier = BitConverter.ToUInt32(BAM.NextBytes(4), 0);

            //Get player car index
            PlayerCarIndex = BAM.NextByte();

            //Get secondary player car index
            SecondaryPlayerCarIndex = BAM.NextByte();
        }
        public override void LoadBytes(byte[] bytes)
        {
            ByteArrayManager BAM = new ByteArrayManager(bytes);

            //Load header
            base.LoadBytes(BAM.NextBytes(24));

            //Get weather
            byte nb = BAM.NextByte();

            if (nb == 0)
            {
                CurrentWeatherCondition = WeatherCondition.Clear;
            }
            else if (nb == 1)
            {
                CurrentWeatherCondition = WeatherCondition.LightClouds;
            }
            else if (nb == 2)
            {
                CurrentWeatherCondition = WeatherCondition.Overcast;
            }
            else if (nb == 3)
            {
                CurrentWeatherCondition = WeatherCondition.LightRain;
            }
            else if (nb == 4)
            {
                CurrentWeatherCondition = WeatherCondition.HeavyRain;
            }
            else if (nb == 5)
            {
                CurrentWeatherCondition = WeatherCondition.Storm;
            }


            //Get track temperature
            TrackTemperatureCelsius = BAM.NextByte();

            //Get air temperature
            AirTemperatureCelsius = BAM.NextByte();

            //Get total laps
            TotalLapsInRace = BAM.NextByte();

            //get track length
            TrackLengthMeters = BitConverter.ToUInt16(BAM.NextBytes(2), 0);

            //Get session type
            nb = BAM.NextByte();
            if (nb == 0)
            {
                SessionTypeMode = SessionType.Unknown;
            }
            else if (nb == 1)
            {
                SessionTypeMode = SessionType.Practice1;
            }
            else if (nb == 2)
            {
                SessionTypeMode = SessionType.Practice2;
            }
            else if (nb == 3)
            {
                SessionTypeMode = SessionType.Practice3;
            }
            else if (nb == 4)
            {
                SessionTypeMode = SessionType.ShortPractice;
            }
            else if (nb == 5)
            {
                SessionTypeMode = SessionType.Qualifying1;
            }
            else if (nb == 6)
            {
                SessionTypeMode = SessionType.Qualifying2;
            }
            else if (nb == 7)
            {
                SessionTypeMode = SessionType.Qualifying3;
            }
            else if (nb == 8)
            {
                SessionTypeMode = SessionType.ShortPractice;
            }
            else if (nb == 9)
            {
                SessionTypeMode = SessionType.OneShotQualifying;
            }
            else if (nb == 10)
            {
                SessionTypeMode = SessionType.Race;
            }
            else if (nb == 11)
            {
                SessionTypeMode = SessionType.Race2;
            }
            else if (nb == 12)
            {
                SessionTypeMode = SessionType.TimeTrial;
            }

            //Get track
            SessionTrack = CodemastersToolkit.GetTrackFromTrackId(BAM.NextByte());

            //Get formula
            nb = BAM.NextByte();
            if (nb == 0)
            {
                Formula = FormulaType.Formula1Modern;
            }
            else if (nb == 1)
            {
                Formula = FormulaType.Formula1Classic;
            }
            else if (nb == 2)
            {
                Formula = FormulaType.Formula2;
            }
            else if (nb == 3)
            {
                Formula = FormulaType.Formula1Generic;
            }


            //Get session time left
            SessionTimeLeft = BitConverter.ToUInt16(BAM.NextBytes(2), 0);

            //Get session duration
            SessionDuration = BitConverter.ToUInt16(BAM.NextBytes(2), 0);

            //Get pit speed limit
            PitSpeedLimitKph = BAM.NextByte();

            //get game paused
            nb = BAM.NextByte();
            if (nb == 0)
            {
                GamePaused = false;
            }
            else if (nb == 1)
            {
                GamePaused = true;
            }

            //Get is spectating
            nb = BAM.NextByte();
            if (nb == 0)
            {
                IsSpectating = false;
            }
            else if (nb == 1)
            {
                IsSpectating = true;
            }


            //Get spectating car index
            CarIndexBeingSpectated = BAM.NextByte();

            //Get sli pro native support
            nb = BAM.NextByte();
            if (nb == 0)
            {
                SliProNativeSupport = false;
            }
            else if (nb == 1)
            {
                SliProNativeSupport = true;
            }

            //Get number of marshall zones
            NumberOfMarshallZones = BAM.NextByte();

            //Get marshall zones
            List <MarshallZone> MZs = new List <MarshallZone>();
            int t = 1;

            for (t = 1; t <= 21; t++)
            {
                MZs.Add(MarshallZone.Create(BAM.NextBytes(5)));
            }


            //Get safety car status
            nb = BAM.NextByte();
            if (nb == 0)
            {
                CurrentSafetyCarStatus = SafetyCarStatus.None;
            }
            else if (nb == 1)
            {
                CurrentSafetyCarStatus = SafetyCarStatus.Full;
            }
            else if (nb == 2)
            {
                CurrentSafetyCarStatus = SafetyCarStatus.Virtual;
            }

            //Get network game boolean
            nb = BAM.NextByte();
            if (nb == 0)
            {
                IsNetworkGame = false;
            }
            else if (nb == 1)
            {
                IsNetworkGame = true;
            }


            //Get number of weather forecast samples
            NumberOfWeatherForecastSamples = BAM.NextByte();

            //Get the next 20 weather forecast samples
            List <WeatherForecastSample> wfss = new List <WeatherForecastSample>();

            t = 0;
            for (t = 0; t < 20; t++)
            {
                wfss.Add(WeatherForecastSample.Create(BAM.NextBytes(5)));
            }
            WeatherForecastSamples = wfss.ToArray();
        }
Example #17
0
            //Skipping tyre stints actual
            //Skipping tyre stints visual

            public static FinalClassificationData Create(byte[] bytes)
            {
                FinalClassificationData ToReturn = new FinalClassificationData();
                ByteArrayManager        BAM      = new ByteArrayManager(bytes);

                //Finishing position
                ToReturn.FinishingPosition = BAM.NextByte();

                //Number of laps
                ToReturn.NumberOfLaps = BAM.NextByte();

                //Starting grid position
                ToReturn.StartingGridPosition = BAM.NextByte();

                //Points scored
                ToReturn.PointsScored = BAM.NextByte();

                //Number of pit stops
                ToReturn.NumberOfPitStops = BAM.NextByte();

                //Result status
                byte nb = BAM.NextByte();

                if (nb == 0)
                {
                    ToReturn.FinalResultStatus = ResultStatus.Invalid;
                }
                else if (nb == 1)
                {
                    ToReturn.FinalResultStatus = ResultStatus.Inactive;
                }
                else if (nb == 2)
                {
                    ToReturn.FinalResultStatus = ResultStatus.Active;
                }
                else if (nb == 3)
                {
                    ToReturn.FinalResultStatus = ResultStatus.Finished;
                }
                else if (nb == 4)
                {
                    ToReturn.FinalResultStatus = ResultStatus.Disqualified;
                }
                else if (nb == 5)
                {
                    ToReturn.FinalResultStatus = ResultStatus.NotClassified;
                }
                else if (nb == 6)
                {
                    ToReturn.FinalResultStatus = ResultStatus.Retired;
                }

                //Best lap time in seconds
                ToReturn.BestLapTimeSeconds = BitConverter.ToSingle(BAM.NextBytes(4), 0);

                //Total race time in seconds
                ToReturn.TotalRaceTimeSeconds = BitConverter.ToDouble(BAM.NextBytes(8), 0);

                //Penalties time in seconds
                ToReturn.PenaltiesTimeSeconds = BAM.NextByte();

                //Number of tyre stints
                ToReturn.NumberOfTyreStints = BAM.NextByte();

                return(ToReturn);
            }