Exemple #1
0
        private void UpdateData(Ets2Telemetry data, bool updated)
        {
            try
            {
                if (data != null)
                {
                    if (this.InvokeRequired)
                    {
                        this.Invoke(new TelemetryData(UpdateData), new object[2] {
                            data, updated
                        });
                        return;
                    }

                    UpdateDamage(data);

                    if (data.Job.OnJob)
                    {
                        if ((int)data.Physics.SpeedKmh > maxSpeed)
                        {
                            maxSpeed = (int)data.Physics.SpeedKmh;
                        }
                        avgFuelConsumption = data.Drivetrain.FuelAvgConsumption;
                        if (data.Paused)
                        {
                            string oldJobId = save.GetLastJobId();
                            save.UpdateAllSavedValues(true);
                            string newJobId = save.GetLastJobId();
                            if (newJobId != oldJobId)
                            {
                                TelemetryOnJobFinished(null, null);
                                maxSpeed           = 0;
                                avgFuelConsumption = 0;
                            }
                        }
                    }
                }
            }
            catch { }
        }
Exemple #2
0
        private void Telemetry_Data(Ets2Telemetry data, bool updated)
        {
            try
            {
                if (this.InvokeRequired)
                {
                    this.BeginInvoke(new TelemetryData(Telemetry_Data), new object[2] {
                        data, updated
                    });
                    return;
                }

                /*var dataToIno = data.Physics;
                 * var PitchRotation = data.Physics.RotationY;
                 * var RollRotation = data.Physics.RotationZ;*/

                pitch_rotation = data.Physics.RotationY;
                //roll_rotation = data.Physics.RotationZ;

                /*
                 * Heading:     valor-> (0.0 .. 1.0)        representa-> (0 .. 360)
                 * Pitching:    valor-> (-0.25 .. 0.25)     representa-> (-90 .. 90)
                 * Roll:        valor-> (-0.5 .. 0.5)       representa-> (-180 .. 180)
                 */

                /*label2.Text = String.Format("{0:N1}", dataToIno.RotationX * 360.0);
                *  label3.Text = String.Format("{0:N1}", dataToIno.RotationY * 360.0);
                *  label5.Text = String.Format("{0:N1}", dataToIno.RotationZ * 360.0);*/

                /*
                 * _serialPort.WriteLine("RotationX:");
                 * _serialPort.WriteLine(String.Format("{0:N0}", dataToIno.RotationX));
                 * _serialPort.WriteLine("RotationY:");
                 * _serialPort.WriteLine(String.Format("{0:N0}", dataToIno.RotationY));
                 * _serialPort.WriteLine("RotationZ:");
                 * _serialPort.WriteLine(String.Format("{0:N0}", dataToIno.RotationZ));
                 */
            }
            catch { }
        }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="name">Name</param>
 /// <param name="posX">Position X</param>
 /// <param name="posY">Position Y</param>
 public UserData(string name, Ets2Telemetry telemetryData, TruckingVSAPI api)
 {
     this.name              = name;
     runningGame            = Utils.RunningGame;
     posX                   = telemetryData.Physics.CoordinateX;
     posY                   = telemetryData.Physics.CoordinateY;
     posZ                   = telemetryData.Physics.CoordinateZ;
     speed                  = telemetryData.Drivetrain.Speed;
     speedLimit             = telemetryData.Job.SpeedLimit;
     manufacturer           = telemetryData.Manufacturer;
     truck                  = telemetryData.Truck;
     onJob                  = telemetryData.Job.OnJob;
     cargo                  = telemetryData.Job.Cargo;
     companySource          = telemetryData.Job.CompanySource;
     citySource             = telemetryData.Job.CitySource;
     companyDestination     = telemetryData.Job.CompanyDestination;
     cityDestination        = telemetryData.Job.CityDestination;
     navigationDistanceLeft = telemetryData.Job.NavigationDistanceLeft;
     distance               = api.Distance;
     navigationTimeLeft     = telemetryData.Job.NavigationTimeLeft;
     income                 = telemetryData.Job.Income;
     mass                   = telemetryData.Job.Mass;
 }
Exemple #4
0
        private void Telemetry_Data(Ets2Telemetry data, bool updated)
        {
            try
            {
                if (this.InvokeRequired)
                {
                    this.Invoke(new TelemetryData(Telemetry_Data), new object[2] {
                        data, updated
                    });
                    return;
                }

                ets2data           = data;
                coordinates        = new Coordinates(data.Physics.CoordinateX, data.Physics.CoordinateY, data.Physics.CoordinateZ);
                locationLabel.Text = coordinates.X + "; " + coordinates.Y + "; " + coordinates.Z;

                if (data.Version.Ets2Major == 0)
                {
                    statusLabel.Text      = simulatorNotRunning;
                    statusLabel.ForeColor = Color.Red;
                }
                else if (data.Time == 0)
                {
                    statusLabel.Text      = simulatorNotDriving;
                    statusLabel.ForeColor = Color.DarkOrange;
                }
                else
                {
                    statusLabel.Text      = simulatorRunning;
                    statusLabel.ForeColor = Color.DarkGreen;
                }
            }
            catch (Exception ex)
            {
                Console.Write(ex.ToString());
            }
        }
Exemple #5
0
        private void Telemetry_Data(Ets2Telemetry data, bool updated)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new TelemetryData(Telemetry_Data), new object[2] {
                    data, updated
                });
                return;
            }

            lbGeneral.Text = "General info:\r\n SDK Version: " + data.Version.SdkPlugin + "\r\n Reported game Version: " +
                             data.Version.Ets2Major + "." + data.Version.Ets2Minor + "\r\n\r\nTruck: " + data.Truck + " (" + data.TruckId + ")\r\nManufacturer: " + data.Manufacturer + "(" + data.ManufacturerId + ")" +
                             "\r\nGame Timestamp: " + data.Time + "\r\nPaused? " + data.Paused;

            // Do some magic trickery to display ALL info:
            var grps = new object[]
            {
                data.Drivetrain, data.Physics, data.Controls, data.Axilliary, data.Damage, data.Lights, data.Job
            };

            foreach (var grp in grps)
            {
                // Find the right tab page:
                var grpName = grp.GetType().Name;
                if (grpName.StartsWith("_"))
                {
                    grpName = grpName.Substring(1);
                }

                var tabPage  = default(TabPage);
                var tabFound = false;

                for (int k = 0; k < telemetryInfo.TabCount; k++)
                {
                    if (telemetryInfo.TabPages[k].Text == grpName)
                    {
                        tabPage  = telemetryInfo.TabPages[k];
                        tabFound = true;
                    }
                }
                if (!tabFound)
                {
                    tabPage = new CustomTabPage(grpName);
                    telemetryInfo.TabPages.Add(tabPage);
                }

                // All properties;
                var props  = grp.GetType().GetProperties().OrderBy(x => x.Name);
                var labels = new StringBuilder();
                var vals   = new StringBuilder();
                foreach (var prop in props)
                {
                    labels.AppendLine(prop.Name + ":");
                    vals.AppendLine(prop.GetValue(grp, null).ToString());
                }

                tabPage.Controls.Clear();
                var lbl1 = new Label {
                    Location = new Point(3, 3), Size = new Size(200, tabPage.Height - 6)
                };
                var lbl2 = new Label {
                    Location = new Point(203, 3), Size = new Size(200, tabPage.Height - 6)
                };
                lbl1.Text = labels.ToString();
                lbl2.Text = vals.ToString();
                tabPage.Controls.Add(lbl1);
                tabPage.Controls.Add(lbl2);
            }
        }
Exemple #6
0
 /// <summary>
 /// Constructor
 /// </summary>
 public TruckingVSAPIJobData(Ets2Telemetry telemetryData, ETruckingVSAPIJobDataType type)
 {
     this.telemetryData = telemetryData;
     this.type          = type;
 }
Exemple #7
0
 /// <summary>
 /// Update timer tick event
 /// </summary>
 /// <param name="sender">Sender</param>
 /// <param name="e">Event arguments</param>
 private void updateTimer_Tick(object sender, EventArgs e)
 {
     if (takeScreenshot)
     {
         takeScreenshot = false;
         TakeScreenshot();
     }
     if (api != null)
     {
         Ets2Telemetry data = telemetryData;
         if ((data != null) && updateTelemetryData)
         {
             bool game_running = Utils.IsAGameRunning && (data.TruckId.Length > 0);
             dataPanel.Visible   = game_running;
             healthPanel.Visible = game_running;
             speedPanel.Visible  = game_running;
             speedChart.Visible  = game_running;
             gameNameLabel.Text  = Utils.IsAGameRunning ? Utils.RunningGameName : startGameNowTranslated;
             if (game_running)
             {
                 speedLabel.Text = (Configuration.UseMetricUnit ? (Math.Round(Math.Abs(data.Drivetrain.SpeedKmh)) + " km/h") : (Math.Round(Math.Abs(data.Drivetrain.SpeedMph)) + " mph")) + (data.Drivetrain.CruiseControl ? ("; " + cruiseControlTranslated + ": " + (Configuration.UseMetricUnit ? (Math.Round(data.Drivetrain.CruiseControlSpeedKmh) + " km/h") : (Math.Round(data.Drivetrain.CruiseControlSpeedMph) + " mph"))) : "");
                 float delta_speed_limit = data.Drivetrain.Speed - data.Job.SpeedLimit;
                 speedLabel.ForeColor = ((data.Job.SpeedLimit <= 0.0f) ? Color.White : Utils.ColorGradient(Color.White, Color.Red, delta_speed_limit / 1.4f));
                 speedLimitLabel.Text = speedLimitTranslated + ": " + ((data.Job.SpeedLimit == -1.0f) ? unlimitedTranslated : Math.Round(Utils.ConvertSpeed(data.Job.SpeedLimit)) + (Configuration.UseMetricUnit ? " km/h" : " mph"));
                 vehicleLabel.Text    = vehicleTranslated + ": " + data.Manufacturer + " " + data.Truck;
                 if (data.Job.OnJob)
                 {
                     statusLabel.Text        = statusTranslated + ": " + deliverCargoTranslated;
                     cargoLabel.Text         = cargoTranslated + ": " + data.Job.Cargo;
                     sourceLabel.Text        = sourceTranslated + ": " + data.Job.CompanySource + " " + inTranslated + " " + Cities.GetFullCityName(data.Job.CitySource);
                     destinationLabel.Text   = destinationTranslated + ": " + data.Job.CompanyDestination + " " + inTranslated + " " + Cities.GetFullCityName(data.Job.CityDestination);
                     routeLabel.Text         = routeTranslated + ": " + Utils.HumanReadableLength(Utils.Clamp(api.Distance - data.Job.NavigationDistanceLeft, 0.0f, api.Distance)) + " " + ofTranslated + " " + Utils.HumanReadableLength(api.Distance) + " (" + ((api.Distance > float.Epsilon) ? Math.Round(((api.Distance - data.Job.NavigationDistanceLeft) * 100.0f) / api.Distance) : 100.0f) + "%)";
                     remainingTimeLabel.Text = remainingTimeTranslated + ": " + Utils.HumanReadableTime(data.Job.NavigationTimeLeft);
                     //timeLabel.Text = timeTranslated + ": " + Utils.HumanReadableTime(data.Job.NavigationTimeLeft) + " " + ofTranslated + " " + Utils.HumanReadableTime(api.Time);
                     yieldLabel.Text    = yieldTranslated + ": " + data.Job.Income.ToString("N0") + "€";
                     weightLabel.Text   = weightTranslated + ": " + Utils.HumanReadableWeight(data.Job.Mass);
                     deadlineLabel.Text = deadlineTranslated + ": " + ((data.Job.Deadline == -1) ? unlimitedTranslated : deadlineAvailableTranslated);
                 }
                 else
                 {
                     statusLabel.Text        = statusTranslated + ": " + idleTranslated;
                     cargoLabel.Text         = "";
                     sourceLabel.Text        = "";
                     destinationLabel.Text   = "";
                     routeLabel.Text         = "";
                     remainingTimeLabel.Text = "";
                     yieldLabel.Text         = "";
                     weightLabel.Text        = "";
                     deadlineLabel.Text      = "";
                 }
                 totalRouteLabel.Text   = totalRouteTranslated + ": " + Utils.HumanReadableLength(totalRoute);
                 totalWeightLabel.Text  = totalWeightTranslated + ": " + Utils.HumanReadableWeight(totalWeight);
                 totalYieldLabel.Text   = totalYieldTranslated + ": " + totalYield + "€";
                 cabinLabel.Text        = cabinTranslated + ": " + Math.Round(data.Damage.WearCabin * 100.0f) + "%";
                 chassisLabel.Text      = chassisTranslated + ": " + Math.Round(data.Damage.WearChassis * 100.0f) + "%";
                 engineLabel.Text       = engineTranslated + ": " + Math.Round(data.Damage.WearEnigne * 100.0f) + "%";
                 transmissionLabel.Text = transmissionTranslated + ": " + Math.Round(data.Damage.WearTransmission * 100.0f) + "%";
                 wheelsLabel.Text       = wheelsTranslated + ": " + Math.Round(data.Damage.WearWheels * 100.0f) + "%";
                 trailerLabel.Text      = (data.Job.TrailerAttached) ? (trailerTranslated + ": " + Math.Round(data.Damage.WearTrailer * 100.0f) + "%") : "";
                 averageLabel.Text      = averageTranslated + ": " + Math.Round((data.Damage.WearCabin + data.Damage.WearChassis + data.Damage.WearEnigne + data.Damage.WearTransmission + data.Damage.WearWheels) * 20.0f) + "%";
                 float max_damage = Math.Max(data.Damage.WearCabin, Math.Max(data.Damage.WearChassis, Math.Max(data.Damage.WearEnigne, Math.Max(data.Damage.WearTransmission, data.Damage.WearWheels))));
                 int   image_id   = 0;
                 if (max_damage >= 0.9f)
                 {
                     image_id = 4;
                 }
                 else if (max_damage >= 0.7f)
                 {
                     image_id = 3;
                 }
                 else if (max_damage >= 0.5f)
                 {
                     image_id = 2;
                 }
                 else if (max_damage >= 0.3f)
                 {
                     image_id = 1;
                 }
                 else if (max_damage >= 0.0f)
                 {
                     image_id = 0;
                 }
                 drivetrainPanel.BackgroundImage = drivetrainImages[image_id];
                 max_damage = data.Damage.WearTrailer;
                 if (data.Job.TrailerAttached)
                 {
                     if (max_damage >= 0.9f)
                     {
                         image_id = 5;
                     }
                     else if (max_damage >= 0.7f)
                     {
                         image_id = 4;
                     }
                     else if (max_damage >= 0.5f)
                     {
                         image_id = 3;
                     }
                     else if (max_damage >= 0.3f)
                     {
                         image_id = 2;
                     }
                     else if (max_damage >= 0.0f)
                     {
                         image_id = 1;
                     }
                 }
                 else
                 {
                     image_id = 0;
                 }
                 cargoPictureBox.Image = cargoImages[image_id];
                 double fuel_part       = data.Drivetrain.Fuel / (double)(data.Drivetrain.FuelMax);
                 double fuel_percentage = Math.Round(fuel_part * 100.0);
                 fuelLabel.Text = fuelTranslated + ": " + Math.Round(data.Drivetrain.Fuel) + " l " + ofTranslated + " " + Math.Round(data.Drivetrain.FuelMax) + " l (" + Math.Round(data.Drivetrain.FuelAvgConsumption * 100.0f, 2) + " l / 100 km); " + fuel_percentage + "%";
                 fuelRemainingDistanceLabel.Text = fuelRemainingDistanceTranslated + ": " + Math.Round(data.Drivetrain.FuelRange) + (Configuration.UseMetricUnit ? " km" : " ml");
                 fuelStatusLabel.Text            = fuelStatusTranslated + ": " + ((fuel_percentage <= 15.0) ? pleaseRefillFuelTranslated : (data.Job.OnJob ? ((data.Drivetrain.FuelRange < (data.Job.NavigationDistanceLeft * 0.001f)) ? refillLaterTranslated : enoughFuelTranslated) : ((fuel_percentage < 30.0) ? lowFuelTranslated : enoughFuelTranslated)));
                 fuelStatusLabel.ForeColor       = ((fuel_percentage <= 15.0) ? Color.Red : Color.White);
                 if ((currentGameTime != data.Time) && isJobRunning)
                 {
                     currentGameTime = data.Time;
                     ++chartUpdateTickCounter;
                     if ((chartUpdateTickCounter % 400) == 0)
                     {
                         chartUpdateTickCounter = 0;
                         lock (currentSpeedData)
                         {
                             currentSpeedData.Add(Math.Round(Configuration.UseMetricUnit ? data.Drivetrain.SpeedKmh : data.Drivetrain.SpeedMph, 2));
                             speedChart.Series[0].Points.DataBindY(currentSpeedData);
                         }
                         lock (speedLimitData)
                         {
                             speedLimitData.Add(Math.Abs(Utils.ConvertSpeed((data.Job.SpeedLimit == -1.0f) ? 0.0f : data.Job.SpeedLimit)));
                             speedChart.Series[1].Points.DataBindY(speedLimitData);
                         }
                     }
                 }
                 fuelGaugeNeedlePictureBox.Location = new Point(fuelGaugeNeedleOffset + (int)(fuelGaugeNeedleRange * fuel_part), fuelGaugeNeedlePictureBox.Location.Y);
                 updateTelemetryData = false;
             }
         }
     }
 }
Exemple #8
0
 /// <summary>
 /// Telemetry data event
 /// </summary>
 /// <param name="data">Data</param>
 /// <param name="newTimestamp">New timestamp</param>
 private void Telemetry_Data(Ets2Telemetry data, bool newTimestamp)
 {
     telemetryData = data;
     if (api != null)
     {
         if (data.Job.OnJob)
         {
             DateTime now = DateTime.Now;
             if (isJobRunning)
             {
                 if ((now - lastUpdateTimestamp).TotalSeconds >= 60.0)
                 {
                     lastUpdateTimestamp = now;
                     string job_data = GetJobData(data);
                     if (jobData == job_data)
                     {
                         api.QueueJobData(new TruckingVSAPIJobData(data, ETruckingVSAPIJobDataType.DataUpdated));
                     }
                     else
                     {
                         takeScreenshot = true;
                         ETruckingVSAPIJobDataType api_data_type = ((lastJobDistance <= 2000.0f) ? ETruckingVSAPIJobDataType.Finished : ETruckingVSAPIJobDataType.Canceled);
                         if (api_data_type == ETruckingVSAPIJobDataType.Canceled)
                         {
                             totalRoute  -= api.Distance;
                             totalWeight -= api.Weight;
                             totalYield  -= api.Yield;
                         }
                         api.QueueJobData(new TruckingVSAPIJobData(data, api_data_type));
                         lastUpdateTimestamp = now;
                         jobData             = job_data;
                         ClearCharts();
                         totalRoute  += data.Job.NavigationDistanceLeft;
                         totalWeight += data.Job.Mass;
                         totalYield  += data.Job.Income;
                         api.QueueJobData(new TruckingVSAPIJobData(data, ETruckingVSAPIJobDataType.New));
                     }
                 }
             }
             else
             {
                 if (data.Job.NavigationDistanceLeft > float.Epsilon)
                 {
                     isJobRunning        = true;
                     lastUpdateTimestamp = now;
                     jobData             = GetJobData(data);
                     ClearCharts();
                     totalRoute  += data.Job.NavigationDistanceLeft;
                     totalWeight += data.Job.Mass;
                     totalYield  += data.Job.Income;
                     api.QueueJobData(new TruckingVSAPIJobData(data, ETruckingVSAPIJobDataType.New));
                 }
             }
             lastJobDistance = data.Job.NavigationDistanceLeft;
         }
         else if (isJobRunning)
         {
             isJobRunning   = false;
             takeScreenshot = true;
             ETruckingVSAPIJobDataType api_data_type = ((lastJobDistance <= 2000.0f) ? ETruckingVSAPIJobDataType.Finished : ETruckingVSAPIJobDataType.Canceled);
             if (api_data_type == ETruckingVSAPIJobDataType.Canceled)
             {
                 totalRoute  -= api.Distance;
                 totalWeight -= api.Weight;
                 totalYield  -= api.Yield;
             }
             api.QueueJobData(new TruckingVSAPIJobData(data, (lastJobDistance <= 2000.0f) ? ETruckingVSAPIJobDataType.Finished : ETruckingVSAPIJobDataType.Canceled));
         }
     }
     updateTelemetryData = true;
 }
Exemple #9
0
 /// <summary>
 /// Get job data
 /// </summary>
 /// <param name="telemetryData">Telemetry data</param>
 /// <returns>Job data</returns>
 private string GetJobData(Ets2Telemetry telemetryData)
 {
     return(telemetryData.Job.Cargo + ";" + telemetryData.Job.CitySource + ";" + telemetryData.Job.CityDestination + ";" + telemetryData.Job.Mass);
 }
Exemple #10
0
        private void Telemetry_Data(Ets2Telemetry data, bool updated)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new TelemetryData(Telemetry_Data), new object[2] {
                    data, updated
                });
                return;
            }

            VelocidadeAtual = data.Drivetrain.SpeedKmh;
            IDCarreta       = data.Job.TrailerId;

            #region Informações Iniciais

            if (ObterInformacoesIniciais)
            {
                v_OdometroInical = data.Drivetrain.TruckOdometer;
                informacoesFrete.CidadeInicial = data.Job.CitySource.ToString();
                informacoesFrete.CidadeDestino = data.Job.CityDestination.ToString();
                informacoesFrete.Carga         = String.Format("{0} {1}t", data.Job.TrailerName.ToString(), (data.Job.Mass / 1000).ToString());
                ObterInformacoesIniciais       = false;
                timerTs3.Enabled = true;
                IDCarretaInicio  = data.Job.TrailerId;

                Lbl_Destino.Text = data.Job.CityDestination;
                Lbl_Partida.Text = data.Job.CitySource;

                SetarIconeDasEmpresas(data.Job.CompanySource, data.Job.CompanyDestination);
            }
            #endregion

            #region Informações Finais
            if (data.Job.TrailerAttached && (cargaEntregue == false) && data.Job.NavigationDistanceLeft < 100 && data.Job.NavigationDistanceLeft >= 10)
            {
                informacoesFrete.KmRodado    = Convert.ToUInt32(data.Drivetrain.TruckOdometer - v_OdometroInical);
                informacoesFrete.IdMotorista = IDMotorista;
                informacoesFrete.Pontuacao   = informacoesFrete.CalcularPontuacao(Convert.ToDouble(data.Damage.WearTrailer), controleDeMultas.ObterNumeroDeMultas());
                informacoesFrete.Dano        = data.Damage.WearTrailer * 100;
                informacoesFrete.Pontuacao   = Math.Round(informacoesFrete.Pontuacao, 1);
                //informacoesFrete.ListaDeMultas = controleDeMultas.ObterListaDeMultas();

                cargaEntregue = true;
                FinaliziarFrete();

                Lbl_Destino.Text = String.Empty;
                Lbl_Partida.Text = String.Empty;
            }
            #endregion

            #region Controle imagem do caminhao carregado ou descarregado

            if (data.Job.TrailerAttached)
            {
                PicCarga.Image = Properties.Resources.Carregado;
            }
            else
            {
                PicCarga.Image = Properties.Resources.Descarregado;
            }

            #endregion

            #region Label Velocidade e Distancia
            Lbl_InfoGame.Text = String.Format("Velocidade {0} km/h  Distância {1} km",
                                              VelocidadeAtual.ToString("0"), (data.Job.NavigationDistanceLeft / 1000).ToString("0"));

            #endregion
        }
Exemple #11
0
        private void Telemetry_Data(Ets2Telemetry data, bool updated)
        {
            try
            {
                if (this.InvokeRequired)
                {
                    this.Invoke(new TelemetryData(Telemetry_Data), new object[2] { data, updated });
                    return;
                }

                lbGeneral.Text = "General info:\r\n SDK Version: " + data.Version.SdkPlugin + "\r\n Reported game Version: " +
                                 data.Version.Ets2Major + "." + data.Version.Ets2Minor + "\r\n\r\nTruck: " + data.Truck + " (" + data.TruckId + ")\r\nManufacturer: " + data.Manufacturer + "(" + data.ManufacturerId + ")" +
                                 "\r\nGame Timestamp: " + data.Time + "\r\nPaused? " + data.Paused;

                // Do some magic trickery to display ALL info:
                var grps = new object[]
                       {
                           data.Drivetrain, data.Physics, data.Controls, data.Axilliary, data.Damage, data.Lights, data.Job
                       };

                foreach (var grp in grps)
                {
                    // Find the right tab page:
                    var grpName = grp.GetType().Name;
                    if (grpName.StartsWith("_"))
                        grpName = grpName.Substring(1);

                    var tabPage = default(TabPage);
                    var tabFound = false;

                    for (int k = 0; k < telemetryInfo.TabCount; k++)
                    {
                        if (telemetryInfo.TabPages[k].Text == grpName)
                        {
                            tabPage = telemetryInfo.TabPages[k];
                            tabFound = true;
                        }
                    }
                    if (!tabFound)
                    {
                        tabPage = new CustomTabPage(grpName);
                        telemetryInfo.TabPages.Add(tabPage);
                    }

                    // All properties;
                    var props = grp.GetType().GetProperties().OrderBy(x => x.Name);
                    var labels = new StringBuilder();
                    var vals = new StringBuilder();
                    foreach (var prop in props)
                    {
                        labels.AppendLine(prop.Name + ":");
                        object val = prop.GetValue(grp, null);
                        if (val is float[])
                        {
                            vals.AppendLine(string.Join(", ", (val as float[]).Select(x=> x.ToString("0.000"))));
                        }
                        else
                        {
                            vals.AppendLine(val.ToString());
                        }
                    }

                    tabPage.Controls.Clear();
                    var lbl1 = new Label { Location = new Point(3, 3), Size = new Size(200, tabPage.Height - 6) };
                    var lbl2 = new Label { Location = new Point(203, 3), Size = new Size(1000, tabPage.Height - 6) };
                    lbl1.Text = labels.ToString();
                    lbl2.Text = vals.ToString();
                    lbl2.AutoSize = false;
                    tabPage.Controls.Add(lbl1);
                    tabPage.Controls.Add(lbl2);
                }
            }
            catch
            {
            }
        }
Exemple #12
0
        private void Telemetry_Data(Ets2Telemetry _data, bool updated)
        {
            try
            {
                if (speedTestFlag == 1)
                {
                    if (_data.Drivetrain.SpeedKmh > 100.0000)
                    {
                        var result = stoptimer.ElapsedMilliseconds;
                        Dispatcher.Invoke(() =>
                        {
                            listBox.Items.Add("0-100km/h\t" + (result / 1000.0) + "s");
                            listBox.SelectedIndex = listBox.Items.Count - 1;
                        });
                        speedTestFlag = 2;
                    }
                    else if (stoptimer.ElapsedMilliseconds > 1500 && _data.Drivetrain.SpeedKmh < 0.2)
                    {
                        speedTestFlag = 0;
                    }
                }
                else if (speedTestFlag == 2)
                {
                    if (_data.Drivetrain.SpeedKmh > 200.0000)
                    {
                        var result = stoptimer.ElapsedMilliseconds;
                        Dispatcher.Invoke(() =>
                        {
                            listBox.Items.Add("0-200km/h\t" + (result / 1000.0) + "s");
                            listBox.SelectedIndex = listBox.Items.Count - 1;
                        });
                        speedTestFlag = 3;
                    }
                    else if (stoptimer.ElapsedMilliseconds > 1500 && _data.Drivetrain.SpeedKmh < 0.2)
                    {
                        speedTestFlag = 0;
                    }
                }
                else if (speedTestFlag == 3)
                {
                    if (_data.Drivetrain.SpeedKmh < 0.2)
                    {
                        speedTestFlag = 0;
                        //Dispatcher.Invoke(() => listBox.Items.Add("stop"));
                    }
                }
                else
                {
                    if (_data.Drivetrain.SpeedKmh > 0.2000)
                    {
                        stoptimer.Reset();
                        stoptimer.Start();
                        //Dispatcher.Invoke(() => listBox.Items.Add("start"));
                        speedTestFlag = 1;
                    }
                }
                Dispatcher.Invoke(() =>
                {
                    var speed = _data.Drivetrain.SpeedKmh;
                    if (speed < 0)
                    {
                        speed *= -1;
                    }
                    speedLabel.Content        = speed.ToString("0");
                    speedDecimalLabel.Content = (int)((speed - (int)speed) * 10);
                    brakeTempLabel.Content    = _data.Drivetrain.BrakeTemperature;
                    if (_data.Drivetrain.Gear < 0)
                    {
                        gearLabel.Content = "R" + (_data.Drivetrain.Gear * -1);
                    }
                    else if (_data.Drivetrain.Gear == 0)
                    {
                        gearLabel.Content = "N";
                    }
                    else
                    {
                        gearLabel.Content = _data.Drivetrain.Gear;
                    }

                    rpm = rpm * 0.9 + _data.Drivetrain.EngineRpm * 0.1;

                    if (rpm < 1200)
                    {
                        rpmBar.Value = rpmBar.Minimum;
                    }
                    else if (rpm > 3000)
                    {
                        rpmBar.Value = rpmBar.Maximum;
                    }
                    else
                    {
                        rpmBar.Value = rpm;
                    }

                    rpmLabel.Content = rpm.ToString("0");
                    if (rpm > 2300)
                    {
                        shiftIndicator.Fill = Brushes.Red;
                    }
                    else if (rpm < 1500)
                    {
                        shiftIndicator.Fill = Brushes.Blue;
                    }
                    else
                    {
                        shiftIndicator.Fill = Brushes.White;
                    }

                    rpmList.Add(new Tuple <ulong, double>(chartCnt, rpm));

                    seriesRpm.Points.Clear();
                    foreach (var x in rpmList.Skip(Math.Max(0, rpmList.Count - 200)))
                    {
                        seriesRpm.Points.AddXY(x.Item1, x.Item2);
                    }

                    chartCnt++;
                });
            }
            catch
            {
            }
        }