Beispiel #1
0
        /* Runs when triggered by an ACReader object */
        private void OnPacketReceived(object sender, ACReceivedEventArgs args)
        {
            PacketID id = args.id;

            if (id == PacketID.RESPONSE)
            {
                responseMtx.WaitOne();
                responsePacket = (HandshakeResponse)args.packet;
                responseMtx.ReleaseMutex();

                dataMtx.WaitOne();
                maxRpm = 0;
                dataMtx.ReleaseMutex();
            }
            else if (id == PacketID.UPDATE)
            {
                RTCarInfo packet = (RTCarInfo)args.packet;

                dataMtx.WaitOne();
                if (packet.engineRPM > maxRpm)
                {
                    maxRpm = (int)packet.engineRPM;
                }
                dataMtx.ReleaseMutex();

                PositionEventArgs newPos = new PositionEventArgs();
                newPos.x = packet.carCoordinates[0];
                newPos.y = packet.carCoordinates[1];
                newPos.z = packet.carCoordinates[2];

                GForceEventArgs newGs = new GForceEventArgs();
                newGs.lat = packet.accG_horizontal;
                newGs.lon = packet.accG_frontal;

                PowertrainEventArgs newPow = new PowertrainEventArgs();
                newPow.rpm = (int)packet.engineRPM;
                newPow.kmh = packet.speed_Kmh;
                newPow.mph = packet.speed_Mph;

                AxesEventArgs newAxes = new AxesEventArgs();
                newAxes.throttle = packet.gas;
                newAxes.brake    = packet.brake;
                newAxes.clutch   = 1.0f - packet.clutch;
                newAxes.steering = packet.steer;

                RaisePositionReceived(newPos);
                RaiseGForceReceived(newGs);
                RaisePowertrainReceived(newPow);
                RaiseAxesReceived(newAxes);
            }
        }
Beispiel #2
0
        /* Runs when triggered by an F117Reader object */
        private void OnPacketReceived(object sender, F117ReceivedEventArgs args)
        {
            UDPPacket packet = args.packet;

            dataMtx.WaitOne();
            maxRpm = (int)packet.m_max_rpm;
            dataMtx.ReleaseMutex();

            PositionEventArgs newPos = new PositionEventArgs();

            newPos.x = packet.m_x;
            newPos.y = packet.m_y;
            newPos.z = packet.m_z;

            GForceEventArgs newGs = new GForceEventArgs();

            newGs.lat = packet.m_gforce_lat;
            newGs.lon = packet.m_gforce_lon;

            PowertrainEventArgs newPow = new PowertrainEventArgs();

            newPow.rpm = (int)packet.m_engineRate;
            newPow.kmh = packet.m_speed * 3.6f;
            newPow.mph = packet.m_speed * 2.23694f;

            AxesEventArgs newAxes = new AxesEventArgs();

            newAxes.throttle = packet.m_throttle;
            newAxes.brake    = packet.m_brake;
            newAxes.clutch   = packet.m_clutch;
            newAxes.steering = packet.m_steer * -1.0f;

            RaisePositionReceived(newPos);
            RaiseGForceReceived(newGs);
            RaisePowertrainReceived(newPow);
            RaiseAxesReceived(newAxes);
        }
Beispiel #3
0
 private void RaiseGForceReceived(GForceEventArgs args)
 {
     GForceReceivedEvent?.Invoke(this, args);
 }
Beispiel #4
0
        /* Runs when triggered by an F118Reader object */
        private void OnPacketReceived(object sender, F118ReceivedEventArgs args)
        {
            PacketID id       = args.id;
            int      carIndex = 0;

            switch (id)
            {
            case PacketID.MOTION:

                PacketMotionData motion = (PacketMotionData)args.packet;
                carIndex = motion.m_header.m_playerCarIndex;

                PositionEventArgs newPos = new PositionEventArgs();

                newPos.x = motion.m_carMotionData[carIndex].m_worldPositionX;
                newPos.y = motion.m_carMotionData[carIndex].m_worldPositionY;
                newPos.z = motion.m_carMotionData[carIndex].m_worldPositionZ;

                GForceEventArgs newGs = new GForceEventArgs();

                newGs.lat = motion.m_carMotionData[carIndex].m_gForceLateral;
                newGs.lon = motion.m_carMotionData[carIndex].m_gForceLongitudinal;

                RaisePositionReceived(newPos);
                RaiseGForceReceived(newGs);

                break;

            case PacketID.TELEMETRY:

                PacketCarTelemetryData telemetry = (PacketCarTelemetryData)args.packet;
                carIndex = telemetry.m_header.m_playerCarIndex;

                PowertrainEventArgs newPow = new PowertrainEventArgs();

                sbyte gearByte = telemetry.m_carTelemetryData[carIndex].m_gear;
                if (gearByte == -1)
                {
                    newPow.gear = 'R';
                }
                else if (gearByte == 0)
                {
                    newPow.gear = 'N';
                }
                else
                {
                    newPow.gear = (char)('0' + gearByte);
                }

                newPow.rpm = telemetry.m_carTelemetryData[carIndex].m_engineRPM;
                newPow.kmh = telemetry.m_carTelemetryData[carIndex].m_speed;
                newPow.mph = telemetry.m_carTelemetryData[carIndex].m_speed * 0.621371f;

                AxesEventArgs newAxes = new AxesEventArgs();

                newAxes.throttle = telemetry.m_carTelemetryData[carIndex].m_throttle / 100.0f;
                newAxes.brake    = telemetry.m_carTelemetryData[carIndex].m_brake / 100.0f;
                newAxes.clutch   = telemetry.m_carTelemetryData[carIndex].m_clutch / 100.0f;
                newAxes.steering = telemetry.m_carTelemetryData[carIndex].m_steer / 100.0f;

                RaisePowertrainReceived(newPow);
                RaiseAxesReceived(newAxes);

                break;

            case PacketID.STATUS:

                PacketCarStatusData status = (PacketCarStatusData)args.packet;
                dataMtx.WaitOne();
                maxRpm = status.m_carStatusData[carIndex].m_maxRPM;
                dataMtx.ReleaseMutex();

                break;

            default:

                return;
            }
        }