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
        /* Redraws the UI using the passed AxesEventArgs object */
        private void DrawAxesUpdate(AxesEventArgs args)
        {
            Image imgWheelComponents = Properties.Resources.steering_wheel_components;
            Image imgWheel           = Properties.Resources.steering_wheel;
            int   width  = imgWheelComponents.Width;
            int   height = imgWheelComponents.Height;

            Image drawWheelTo = new Bitmap(width, height);

            Graphics gWheel = Graphics.FromImage(drawWheelTo);

            gWheel.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
            gWheel.DrawImage(imgWheelComponents, new Rectangle(0, 0, width, height));
            gWheel.TranslateTransform(width / 2, height / 2);
            gWheel.RotateTransform(args.steering * maxDirRotation);
            gWheel.TranslateTransform(-1 * width / 2, -1 * height / 2);
            gWheel.DrawImage(imgWheel, new Rectangle(0, 0, width, height));
            gWheel.Flush();
            gWheel.Dispose();

            picSteeringWheel.Image = drawWheelTo;
            imgWheelComponents.Dispose();
            imgWheel.Dispose();

            Image imgPedals = Properties.Resources.pedal_set;

            width  = imgPedals.Width;
            height = imgPedals.Height;

            Image    drawPedalsTo = new Bitmap(width, height);
            Graphics gPedals      = Graphics.FromImage(drawPedalsTo);

            gPedals.FillRectangle(new SolidBrush(Color.Blue), 0, height - args.clutch * 22, 16, args.clutch * 22);
            gPedals.FillRectangle(new SolidBrush(Color.Red), 21, height - args.brake * 22, 16, args.brake * 22);
            gPedals.FillRectangle(new SolidBrush(Color.LawnGreen), 42, height - args.throttle * 28, 18, args.throttle * 28);
            gPedals.DrawImage(imgPedals, new Rectangle(0, 0, width, height));
            gPedals.Flush();
            gPedals.Dispose();

            picPedals.Image = drawPedalsTo;
            imgPedals.Dispose();
        }
Beispiel #3
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 #4
0
 /* Runs when the program receives axes information from the game */
 private void OnGotAxes(object sender, AxesEventArgs args)
 {
     this.BeginInvoke(new DrawAxesUpdateDelegate(DrawAxesUpdate), args);
 }
Beispiel #5
0
 private void RaiseAxesReceived(AxesEventArgs args)
 {
     AxesReceivedEvent?.Invoke(this, args);
 }
Beispiel #6
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;
            }
        }