Esempio n. 1
0
        public PC2BasePacket CreateVersion8(PC2RawPacket rawPacket)
        {
            var meta = PC2PacketMeta.Create(rawPacket);

            switch (meta.packetType)
            {
            case PC2PacketType.Telemetry:
                return(PCars2TelemetryData.Create(rawPacket, meta));

            case PC2PacketType.Timings:
                return(PCars2Timings.Create(rawPacket, meta));

            case PC2PacketType.TimeStats:
                return(PCars2TimeStatsData.Create(rawPacket, meta));

            case PC2PacketType.GameState:
                return(PC2GameStatePacket.Create(rawPacket, meta));

            case PC2PacketType.RaceDefinition:
                return(PC2RaceDefinition.Create(rawPacket, meta));

            case PC2PacketType.Participants:
            case PC2PacketType.WeatherState:
            case PC2PacketType.VehicleNames:
            case PC2PacketType.ParticipantVehicleNames:
            default:
                throw new NotImplementedException("Project Cars 2 packet type not handled: " + meta.packetType);
            }
        }
        public static PCars2TelemetryData Create(PC2RawPacket rawPacket, PC2PacketMeta meta)
        {
            var telemetryData = new PCars2TelemetryData(meta);

            telemetryData.viewedParticipantIndex = rawPacket.Data.ReadSByte();
            telemetryData.unfilteredThrottle     = rawPacket.Data.ReadByte();
            telemetryData.unfilteredBrake        = rawPacket.Data.ReadByte();
            telemetryData.unfilteredSteering     = rawPacket.Data.ReadSByte();
            telemetryData.unfilteredClutch       = rawPacket.Data.ReadByte();
            telemetryData.carFlags         = rawPacket.Data.ReadByte();
            telemetryData.oilTempCelsius   = rawPacket.Data.ReadInt16();
            telemetryData.oilPressureKPa   = rawPacket.Data.ReadUInt16();
            telemetryData.waterTempCelsius = rawPacket.Data.ReadInt16();
            telemetryData.waterPressureKPa = rawPacket.Data.ReadUInt16();
            telemetryData.fuelPressureKPa  = rawPacket.Data.ReadUInt16();
            telemetryData.fuelCapacity     = rawPacket.Data.ReadByte();
            telemetryData.brake            = rawPacket.Data.ReadByte();
            telemetryData.throttle         = rawPacket.Data.ReadByte();
            telemetryData.clutch           = rawPacket.Data.ReadByte();
            telemetryData.fuelLevel        = rawPacket.Data.ReadSingle();
            telemetryData.speed            = rawPacket.Data.ReadSingle();
            telemetryData.rpm                     = rawPacket.Data.ReadUInt16();
            telemetryData.maxRpm                  = rawPacket.Data.ReadUInt16();
            telemetryData.steering                = rawPacket.Data.ReadSByte();
            telemetryData.gearNumGears            = rawPacket.Data.ReadByte();
            telemetryData.boostAmount             = rawPacket.Data.ReadByte();
            telemetryData.crashState              = rawPacket.Data.ReadByte();
            telemetryData.odometerKM              = rawPacket.Data.ReadSingle();
            telemetryData.orientationX            = rawPacket.Data.ReadSingle();
            telemetryData.orientationY            = rawPacket.Data.ReadSingle();
            telemetryData.orientationZ            = rawPacket.Data.ReadSingle();
            telemetryData.localVelocityX          = rawPacket.Data.ReadSingle();
            telemetryData.localVelocityY          = rawPacket.Data.ReadSingle();
            telemetryData.localVelocityZ          = rawPacket.Data.ReadSingle();
            telemetryData.worldVelocityX          = rawPacket.Data.ReadSingle();
            telemetryData.worldVelocityY          = rawPacket.Data.ReadSingle();
            telemetryData.worldVelocityZ          = rawPacket.Data.ReadSingle();
            telemetryData.angularVelocityX        = rawPacket.Data.ReadSingle();
            telemetryData.angularVelocityY        = rawPacket.Data.ReadSingle();
            telemetryData.angularVelocityZ        = rawPacket.Data.ReadSingle();
            telemetryData.localAccelerationX      = rawPacket.Data.ReadSingle();
            telemetryData.localAccelerationY      = rawPacket.Data.ReadSingle();
            telemetryData.localAccelerationZ      = rawPacket.Data.ReadSingle();
            telemetryData.worldAccelerationX      = rawPacket.Data.ReadSingle();
            telemetryData.worldAccelerationY      = rawPacket.Data.ReadSingle();
            telemetryData.worldAccelerationZ      = rawPacket.Data.ReadSingle();
            telemetryData.extentsCentreX          = rawPacket.Data.ReadSingle();
            telemetryData.extentsCentreY          = rawPacket.Data.ReadSingle();
            telemetryData.extentsCentreZ          = rawPacket.Data.ReadSingle();
            telemetryData.tyreFlagsFL             = rawPacket.Data.ReadByte();
            telemetryData.tyreFlagsFR             = rawPacket.Data.ReadByte();
            telemetryData.tyreFlagsRL             = rawPacket.Data.ReadByte();
            telemetryData.tyreFlagsRR             = rawPacket.Data.ReadByte();
            telemetryData.terrainFL               = rawPacket.Data.ReadByte();
            telemetryData.terrainFR               = rawPacket.Data.ReadByte();
            telemetryData.terrainRL               = rawPacket.Data.ReadByte();
            telemetryData.terrainRR               = rawPacket.Data.ReadByte();
            telemetryData.tyreYFL                 = rawPacket.Data.ReadSingle();
            telemetryData.tyreYFR                 = rawPacket.Data.ReadSingle();
            telemetryData.tyreYRL                 = rawPacket.Data.ReadSingle();
            telemetryData.tyreYRR                 = rawPacket.Data.ReadSingle();
            telemetryData.tyreRPSFL               = rawPacket.Data.ReadSingle();
            telemetryData.tyreRPSFR               = rawPacket.Data.ReadSingle();
            telemetryData.tyreRPSRL               = rawPacket.Data.ReadSingle();
            telemetryData.tyreRPSRR               = rawPacket.Data.ReadSingle();
            telemetryData.tyreTempFL              = rawPacket.Data.ReadByte();
            telemetryData.tyreTempFR              = rawPacket.Data.ReadByte();
            telemetryData.tyreTempRL              = rawPacket.Data.ReadByte();
            telemetryData.tyreTempRR              = rawPacket.Data.ReadByte();
            telemetryData.tyreHeightAboveGroundFL = rawPacket.Data.ReadSingle();
            telemetryData.tyreHeightAboveGroundFR = rawPacket.Data.ReadSingle();
            telemetryData.tyreHeightAboveGroundRL = rawPacket.Data.ReadSingle();
            telemetryData.tyreHeightAboveGroundRR = rawPacket.Data.ReadSingle();
            telemetryData.tyreWearFL              = rawPacket.Data.ReadByte();
            telemetryData.tyreWearFR              = rawPacket.Data.ReadByte();
            telemetryData.tyreWearRL              = rawPacket.Data.ReadByte();
            telemetryData.tyreWearRR              = rawPacket.Data.ReadByte();
            telemetryData.brakeDamageFL           = rawPacket.Data.ReadByte();
            telemetryData.brakeDamageFR           = rawPacket.Data.ReadByte();
            telemetryData.brakeDamageRL           = rawPacket.Data.ReadByte();
            telemetryData.brakeDamageRR           = rawPacket.Data.ReadByte();
            telemetryData.suspensionDamageFL      = rawPacket.Data.ReadByte();
            telemetryData.suspensionDamageFR      = rawPacket.Data.ReadByte();
            telemetryData.suspensionDamageRL      = rawPacket.Data.ReadByte();
            telemetryData.suspensionDamageRR      = rawPacket.Data.ReadByte();
            telemetryData.brakeTempCelsiusFL      = rawPacket.Data.ReadInt16();
            telemetryData.brakeTempCelsiusFR      = rawPacket.Data.ReadInt16();
            telemetryData.brakeTempCelsiusRL      = rawPacket.Data.ReadInt16();
            telemetryData.brakeTempCelsiusRR      = rawPacket.Data.ReadInt16();
            telemetryData.tyreTreadTempFL         = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTreadTempFR         = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTreadTempRL         = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTreadTempRR         = rawPacket.Data.ReadUInt16();
            telemetryData.tyreLayerTempFL         = rawPacket.Data.ReadUInt16();
            telemetryData.tyreLayerTempFR         = rawPacket.Data.ReadUInt16();
            telemetryData.tyreLayerTempRL         = rawPacket.Data.ReadUInt16();
            telemetryData.tyreLayerTempRR         = rawPacket.Data.ReadUInt16();
            telemetryData.tyreCarcassTempFL       = rawPacket.Data.ReadUInt16();
            telemetryData.tyreCarcassTempFR       = rawPacket.Data.ReadUInt16();
            telemetryData.tyreCarcassTempRL       = rawPacket.Data.ReadUInt16();
            telemetryData.tyreCarcassTempRR       = rawPacket.Data.ReadUInt16();
            telemetryData.tyreRimTempFL           = rawPacket.Data.ReadUInt16();
            telemetryData.tyreRimTempFR           = rawPacket.Data.ReadUInt16();
            telemetryData.tyreRimTempRL           = rawPacket.Data.ReadUInt16();
            telemetryData.tyreRimTempRR           = rawPacket.Data.ReadUInt16();
            telemetryData.tyreInternalAirTempFL   = rawPacket.Data.ReadUInt16();
            telemetryData.tyreInternalAirTempFR   = rawPacket.Data.ReadUInt16();
            telemetryData.tyreInternalAirTempRL   = rawPacket.Data.ReadUInt16();
            telemetryData.tyreInternalAirTempRR   = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTempLeftFL          = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTempLeftFR          = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTempLeftRL          = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTempLeftRR          = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTempCenterFL        = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTempCenterFR        = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTempCenterRL        = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTempCenterRR        = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTempRightFL         = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTempRightFR         = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTempRightRL         = rawPacket.Data.ReadUInt16();
            telemetryData.tyreTempRightRR         = rawPacket.Data.ReadUInt16();
            telemetryData.wheelLocalPositionYFL   = rawPacket.Data.ReadSingle();
            telemetryData.wheelLocalPositionYFR   = rawPacket.Data.ReadSingle();
            telemetryData.wheelLocalPositionYRL   = rawPacket.Data.ReadSingle();
            telemetryData.wheelLocalPositionYRR   = rawPacket.Data.ReadSingle();
            telemetryData.rideHeightFL            = rawPacket.Data.ReadSingle();
            telemetryData.rideHeightFR            = rawPacket.Data.ReadSingle();
            telemetryData.rideHeightRL            = rawPacket.Data.ReadSingle();
            telemetryData.rideHeightRR            = rawPacket.Data.ReadSingle();
            telemetryData.suspensionTravelFL      = rawPacket.Data.ReadSingle();
            telemetryData.suspensionTravelFR      = rawPacket.Data.ReadSingle();
            telemetryData.suspensionTravelRL      = rawPacket.Data.ReadSingle();
            telemetryData.suspensionTravelRR      = rawPacket.Data.ReadSingle();
            telemetryData.suspensionVelocityFL    = rawPacket.Data.ReadSingle();
            telemetryData.suspensionVelocityFR    = rawPacket.Data.ReadSingle();
            telemetryData.suspensionVelocityRL    = rawPacket.Data.ReadSingle();
            telemetryData.suspensionVelocityRR    = rawPacket.Data.ReadSingle();
            telemetryData.suspensionRideHeightFL  = rawPacket.Data.ReadUInt16();
            telemetryData.suspensionRideHeightFR  = rawPacket.Data.ReadUInt16();
            telemetryData.suspensionRideHeightRL  = rawPacket.Data.ReadUInt16();
            telemetryData.suspensionRideHeightRR  = rawPacket.Data.ReadUInt16();
            telemetryData.airPressureFL           = rawPacket.Data.ReadUInt16();
            telemetryData.airPressureFR           = rawPacket.Data.ReadUInt16();
            telemetryData.airPressureRL           = rawPacket.Data.ReadUInt16();
            telemetryData.airPressureRR           = rawPacket.Data.ReadUInt16();
            telemetryData.engineSpeed             = rawPacket.Data.ReadSingle();
            telemetryData.engineTorque            = rawPacket.Data.ReadSingle();
            telemetryData.wingsFront              = rawPacket.Data.ReadByte();
            telemetryData.wingsRear               = rawPacket.Data.ReadByte();
            return(telemetryData);
        }