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;
            }
        }
Esempio n. 2
0
            public static ParticipantData Create(byte[] bytes)
            {
                ParticipantData  ReturnInstance = new ParticipantData();
                ByteArrayManager BAM            = new ByteArrayManager(bytes);

                //Get AI controlled
                byte nb = BAM.NextByte();

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


                //Get piloting driver
                ReturnInstance.PilotingDriver = CodemastersToolkit.GetDriverFromDriverId(BAM.NextByte());

                //Get Team
                ReturnInstance.ManufacturingTeam = CodemastersToolkit.GetTeamFromTeamId(BAM.NextByte());

                //Get race number
                ReturnInstance.CarRaceNumber = BAM.NextByte();

                //Get nationallity ID
                ReturnInstance.NationalityId = BAM.NextByte();

                //Get name
                string FullName = "";
                int    t        = 1;

                for (t = 1; t <= 48; t++)
                {
                    char ThisChar = Convert.ToChar(BAM.NextByte());
                    FullName = FullName + ThisChar.ToString();
                }
                ReturnInstance.Name = FullName.Trim();

                //Get telemetry private or not.
                nb = BAM.NextByte();
                if (nb == 0)
                {
                    ReturnInstance.TelemetryPrivate = true;
                }
                else if (nb == 1)
                {
                    ReturnInstance.TelemetryPrivate = false;
                }


                return(ReturnInstance);
            }
        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();
        }
        public static Packet[] BulkLoadAllSessionData(List <byte[]> session_data)
        {
            List <Packet> Packets = new List <Packet>();

            foreach (byte[] b in session_data)
            {
                PacketType pt = CodemastersToolkit.GetPacketType(b);
                if (pt == PacketType.Motion)
                {
                    MotionPacket mp = new MotionPacket();
                    mp.LoadBytes(b);
                    Packets.Add(mp);
                }
                else if (pt == PacketType.Session)
                {
                    SessionPacket sp = new SessionPacket();
                    sp.LoadBytes(b);
                    Packets.Add(sp);
                }
                else if (pt == PacketType.Lap)
                {
                    LapPacket sp = new LapPacket();
                    sp.LoadBytes(b);
                    Packets.Add(sp);
                }
                else if (pt == PacketType.Event)
                {
                    //Event packet not complete yet
                }
                else if (pt == PacketType.Participants)
                {
                    ParticipantPacket sp = new ParticipantPacket();
                    sp.LoadBytes(b);
                    Packets.Add(sp);
                }
                else if (pt == PacketType.CarSetup)
                {
                    //Car setup packet not complete yet
                }
                else if (pt == PacketType.CarTelemetry)
                {
                    TelemetryPacket sp = new TelemetryPacket();
                    sp.LoadBytes(b);
                    Packets.Add(sp);
                }
                else if (pt == PacketType.CarStatus)
                {
                    CarStatusPacket csp = new CarStatusPacket();
                    csp.LoadBytes(b);
                    Packets.Add(csp);
                }
                else if (pt == PacketType.FinalClassification)
                {
                    FinalClassificationPacket fcp = new FinalClassificationPacket();
                    fcp.LoadBytes(b);
                    Packets.Add(fcp);
                }
                else if (pt == PacketType.LobbyInfo)
                {
                    LobbyInfoPacket fcp = new LobbyInfoPacket();
                    fcp.LoadBytes(b);
                    Packets.Add(fcp);
                }
            }

            return(Packets.ToArray());
        }
            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);
            }