Пример #1
0
        protected override void Initialize()
        {
            // TODO: Add your initialization logic here
            try
            {
                telemetryData = new PCARS2_SharedMemoryData();
            }
            catch
            {
            }
            components = new ArrayList();

            StatusBar = new StringBar(this);

            RTC = new TextBox(this,
                              new Rectangle(
                                  GraphicsDevice.Viewport.X,
                                  GraphicsDevice.Viewport.Y,
                                  GraphicsDevice.Viewport.Width / 4 - 5,
                                  50));

            airTempLabel = new TextBox(this,
                                       new Rectangle(
                                           GraphicsDevice.Viewport.X + 5,
                                           RTC.Position.Y + RTC.Position.Height + 5,
                                           (RTC.Position.Width / 2) - 5,
                                           25));
            airTempLabel.Value = "Air Temp";

            airTemp = new TextBox(this,
                                  new Rectangle(
                                      airTempLabel.Position.X,
                                      airTempLabel.Position.Y + airTempLabel.Position.Height,
                                      airTempLabel.Position.Width,
                                      50));

            trackTempLabel = new TextBox(this,
                                         new Rectangle(
                                             airTempLabel.Position.X + airTempLabel.Position.Width + 5,
                                             RTC.Position.Y + RTC.Position.Height + 5,
                                             (RTC.Position.Width / 2) - 10,
                                             25));
            trackTempLabel.Value = "Track Temp";

            trackTemp = new TextBox(this,
                                    new Rectangle(
                                        trackTempLabel.Position.X,
                                        trackTempLabel.Position.Y + trackTempLabel.Position.Height,
                                        trackTempLabel.Position.Width,
                                        50));

            waterTempLabel = new TextBox(this,
                                         new Rectangle(
                                             airTemp.Position.X,
                                             airTemp.Position.Y + airTemp.Position.Height + 5,
                                             airTempLabel.Position.Width,
                                             airTempLabel.Position.Height));
            waterTempLabel.Value = "Water Temp";

            waterTemp = new TextBox(this,
                                    new Rectangle(
                                        waterTempLabel.Position.X,
                                        waterTempLabel.Position.Y + waterTempLabel.Position.Height,
                                        waterTempLabel.Position.Width,
                                        airTemp.Position.Height));

            waterPressureLabel = new TextBox(this,
                                             new Rectangle(
                                                 trackTemp.Position.X,
                                                 trackTemp.Position.Y + trackTemp.Position.Height + 5,
                                                 trackTempLabel.Position.Width,
                                                 trackTempLabel.Position.Height));
            waterPressureLabel.Value = "Water Pressure";

            waterPressure = new TextBox(this,
                                        new Rectangle(
                                            waterPressureLabel.Position.X,
                                            waterPressureLabel.Position.Y + waterPressureLabel.Position.Height,
                                            waterPressureLabel.Position.Width,
                                            trackTemp.Position.Height));

            oilTempLabel = new TextBox(this,
                                       new Rectangle(
                                           waterTempLabel.Position.X,
                                           waterTemp.Position.Y + waterTemp.Position.Height + 5,
                                           waterTempLabel.Position.Width,
                                           waterTempLabel.Position.Height));
            oilTempLabel.Value = "Oil Temp";

            oilTemp = new TextBox(this,
                                  new Rectangle(
                                      oilTempLabel.Position.X,
                                      oilTempLabel.Position.Y + oilTempLabel.Position.Height,
                                      oilTempLabel.Position.Width,
                                      waterTemp.Position.Height));

            oilPressureLabel = new TextBox(this,
                                           new Rectangle(
                                               waterPressureLabel.Position.X,
                                               waterPressure.Position.Y + waterPressure.Position.Height + 5,
                                               waterPressureLabel.Position.Width,
                                               waterPressureLabel.Position.Height));
            oilPressureLabel.Value = "Oil Pressure";

            oilPressure = new TextBox(this,
                                      new Rectangle(
                                          oilPressureLabel.Position.X,
                                          oilPressureLabel.Position.Y + oilPressureLabel.Position.Height,
                                          oilPressureLabel.Position.Width,
                                          waterPressure.Position.Height));

            fuelLevelLabel = new TextBox(this,
                                         new Rectangle(
                                             oilTempLabel.Position.X,
                                             oilTemp.Position.Y + oilTemp.Position.Height + 5,
                                             oilTempLabel.Position.Width,
                                             oilTempLabel.Position.Height));
            fuelLevelLabel.Value = "Fuel Level";

            fuelLevel = new TextBox(this,
                                    new Rectangle(
                                        fuelLevelLabel.Position.X,
                                        fuelLevelLabel.Position.Y + fuelLevelLabel.Position.Height,
                                        fuelLevelLabel.Position.Width,
                                        oilTemp.Position.Height));

            fuelUsageLabel = new TextBox(this,
                                         new Rectangle(
                                             oilPressureLabel.Position.X,
                                             oilPressure.Position.Y + oilPressure.Position.Height + 5,
                                             oilPressureLabel.Position.Width,
                                             oilPressureLabel.Position.Height));
            fuelUsageLabel.Value = "Fuel Usage";

            fuelUsage = new TextBox(this,
                                    new Rectangle(
                                        fuelUsageLabel.Position.X,
                                        fuelUsageLabel.Position.Y + fuelUsageLabel.Position.Height,
                                        fuelUsageLabel.Position.Width,
                                        oilPressure.Position.Height));
            fuelUsage.Value = "TO DO";

            flag = new TextBox(this,
                               new Rectangle(
                                   RTC.Position.X,
                                   _graphics.GraphicsDevice.Viewport.Height * 2 / 3,
                                   RTC.Position.Width,
                                   _graphics.GraphicsDevice.Viewport.Height / 3));
            flag.Value = "";

            ///////////////////////////////////////////////////////

            tacho = new RoundGauge(this,
                                   new Rectangle(
                                       GraphicsDevice.Viewport.Width / 4 + 5,
                                       GraphicsDevice.Viewport.Y + 20,
                                       GraphicsDevice.Viewport.Width / 5,
                                       GraphicsDevice.Viewport.Width / 5),
                                   4);
            speedometer = new RoundGauge(this,
                                         new Rectangle(
                                             GraphicsDevice.Viewport.Width - (GraphicsDevice.Viewport.Width / 4 + 5) - tacho.Position.Width,
                                             tacho.Position.Y,
                                             tacho.Position.Width,
                                             tacho.Position.Height),
                                         3);

            gear = new TextBox(this,
                               new Rectangle(
                                   tacho.Position.X + tacho.Position.Width + 20,
                                   tacho.Position.Y + tacho.Position.Height / 6,
                                   (speedometer.Position.X - 20) - (tacho.Position.X + tacho.Position.Width + 20),
                                   (speedometer.Position.X - 20) - (tacho.Position.X + tacho.Position.Width + 20)));

            clutch = new BarGauge(this,
                                  Color.Blue,
                                  new Rectangle(
                                      gear.Position.X,
                                      gear.Position.Y + gear.Position.Height + 20,
                                      gear.Position.Width / 4,
                                      tacho.Position.Y + tacho.Position.Height - (gear.Position.Y + gear.Position.Height + 20)));

            brake = new BarGauge(this,
                                 Color.Red,
                                 new Rectangle(
                                     gear.Position.X + gear.Position.Width / 3,
                                     gear.Position.Y + gear.Position.Height + 20,
                                     gear.Position.Width / 4,
                                     tacho.Position.Y + tacho.Position.Height - (gear.Position.Y + gear.Position.Height + 20)));

            throtle = new BarGauge(this,
                                   Color.Green,
                                   new Rectangle(
                                       gear.Position.X + gear.Position.Width - gear.Position.Width / 3,
                                       gear.Position.Y + gear.Position.Height + 20,
                                       gear.Position.Width / 4,
                                       tacho.Position.Y + tacho.Position.Height - (gear.Position.Y + gear.Position.Height + 20)));
            //////////////////////////////////////////////////////

            if (telemetryData == null)
            {
                StatusBar.Message = "File Not Found";
                StatusBar.Status  = false;
            }
            else
            {
                StatusBar.Message = "Connected";
                StatusBar.Status  = true;
            }

            components.Add(RTC);
            components.Add(flag);
            components.Add(airTempLabel);
            components.Add(airTemp);
            components.Add(trackTempLabel);
            components.Add(trackTemp);
            components.Add(waterTempLabel);
            components.Add(waterTemp);
            components.Add(waterPressureLabel);
            components.Add(waterPressure);
            components.Add(oilTempLabel);
            components.Add(oilTemp);
            components.Add(oilPressureLabel);
            components.Add(oilPressure);
            components.Add(fuelLevelLabel);
            components.Add(fuelLevel);
            components.Add(fuelUsageLabel);
            components.Add(fuelUsage);

            components.Add(tacho);
            components.Add(speedometer);
            components.Add(gear);
            components.Add(clutch);
            components.Add(brake);
            components.Add(throtle);

            components.Add(StatusBar);

            base.Initialize();
        }
Пример #2
0
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                Exit();
            }

            if (Keyboard.GetState().IsKeyDown(Keys.RightShift) &&
                Keyboard.GetState().IsKeyDown(Keys.Enter))
            {
                if (_graphics.IsFullScreen)
                {
                    _graphics.PreferredBackBufferWidth  = 800;
                    _graphics.PreferredBackBufferHeight = 600;
                }
                else
                {
                    _graphics.PreferredBackBufferWidth  = 1920;
                    _graphics.PreferredBackBufferHeight = 1080;
                }
                _graphics.ToggleFullScreen();
                Initialize();
            }

            // TODO: Add your update logic here

            if (telemetryData == null)
            {
                try
                {
                    telemetryData     = new PCARS2_SharedMemoryData();
                    StatusBar.Message = "Connected! Version: " + telemetryData.Version;
                    StatusBar.Status  = true;
                }
                catch (Exception e)
                {
                    telemetryData     = null;
                    StatusBar.Message = e.Message;
                }
            }
            else
            {
                StatusBar.Message = "Connected! Version: " + telemetryData.Version;

                if (Keyboard.GetState().IsKeyDown(Keys.Enter))
                {
                    try
                    {
                        StatusBar.Message = telemetryData.Participants[0].Name;
                    }
                    catch (Exception e)
                    {
                        telemetryData.Dispose();
                        telemetryData = null;
                    }
                }

                tacho.Value    = telemetryData.Rpm;
                tacho.MaxValue = telemetryData.MaxRPM;
                gear.Value     = telemetryData.Gear.ToString();
                clutch.Value   = telemetryData.Clutch;
                brake.Value    = telemetryData.Brake;
                throtle.Value  = telemetryData.Throttle;

                speedometer.Value    = 18 * telemetryData.Speed / 5;
                speedometer.MaxValue = 320;

                airTemp.Value       = telemetryData.AmbientTemperature.ToString("N0");
                trackTemp.Value     = telemetryData.TrackTemperature.ToString("N0");
                waterTemp.Value     = telemetryData.WaterTempCelsius.ToString("N0");
                waterPressure.Value = telemetryData.WaterPressureKPa.ToString("N0");
                oilTemp.Value       = telemetryData.OilTempCelsius.ToString("N0");
                oilPressure.Value   = telemetryData.OilPressureKPa.ToString("N0");
                fuelLevel.Value     = (telemetryData.FuelLevel * telemetryData.FuelCapacity).ToString("N2") + "l";

                switch (telemetryData.HighestFlagColour)
                {
                case (uint)PCARS2_SharedMemoryData.FlagColours.Black:
                    flag.setColor(Color.Black);
                    break;

                case (uint)PCARS2_SharedMemoryData.FlagColours.BlackOrangeCircle:
                    flag.setColor(Color.Orange);
                    break;

                case (uint)PCARS2_SharedMemoryData.FlagColours.BlackWhite:
                    flag.setColor(Color.LightGray);
                    break;

                case (uint)PCARS2_SharedMemoryData.FlagColours.Blue:
                    flag.setColor(Color.Blue);
                    break;

                case (uint)PCARS2_SharedMemoryData.FlagColours.Chequered:
                    flag.setColor(Color.DarkGray);
                    break;

                case (uint)PCARS2_SharedMemoryData.FlagColours.DoubleYellow:
                    flag.setColor(Color.LightYellow);
                    break;

                case (uint)PCARS2_SharedMemoryData.FlagColours.Green:
                    flag.setColor(Color.Green);
                    break;

                case (uint)PCARS2_SharedMemoryData.FlagColours.None:
                    flag.setColor(Color.Transparent);
                    break;

                case (uint)PCARS2_SharedMemoryData.FlagColours.Red:
                    flag.setColor(Color.Red);
                    break;

                case (uint)PCARS2_SharedMemoryData.FlagColours.White_FinalLap:
                    flag.setColor(Color.White);
                    break;

                case (uint)PCARS2_SharedMemoryData.FlagColours.White_SlowCar:
                    flag.setColor(Color.White);
                    break;

                case (uint)PCARS2_SharedMemoryData.FlagColours.Yellow:
                    flag.setColor(Color.Yellow);
                    break;

                default:
                    flag.setColor(Color.Transparent);
                    break;
                }
            }

            fps = 1 / gameTime.ElapsedGameTime.TotalSeconds;
            StatusBar.Message += " FPS: " + fps.ToString("N2");

            RTC.Value = DateTime.Now.ToLocalTime().ToString("HH:mm:ss");

            foreach (Component component in components)
            {
                component.Update(gameTime);
            }


            base.Update(gameTime);
        }