Ejemplo n.º 1
0
    void ClearThumbnailCorrectness()
    {
        TrackThumbnail thumb = thumbnail.GetComponentInParent <TrackThumbnail>();

        if (thumb)
        {
            thumb.SetCorrectnessState(TrackThumbnail.CorrectnessState.Unknown);
        }
    }
Ejemplo n.º 2
0
 private static TrackThumbnail CreateTrackThumbnail(string sTrack, TelemetryInfo data, string file)
 {
     TrackThumbnail t = new TrackThumbnail();
     var track =
         new SimTelemetry.Game.Rfactor.Garage.rFactorTrack(sTrack);
     track.Scan();
     track.ScanRoute();
     t.Create(file, "Spa Franchorchamps", "", track.Route, data.TrackMapSize.Width, data.TrackMapSize.Height);
     return t;
 }
Ejemplo n.º 3
0
        private static void DrawGauges(TelemetryLogReader read, double alpha, int frameNumber, Point positionGauge, double sample, Graphics g, Image imgTrack, TrackThumbnail TrackThumbnail)
        {
            var Brush_PedalsBackground = GetBrush(alpha, 255, 100, 100, 100);
            var Brush_PedalsBrake = GetBrush(alpha, 255, 200, 0, 0);
            var Brush_PedalsThrottle = GetBrush(alpha, 255, 0, 100, 0);
            var BrushWhite = GetBrush(alpha, 255, 255, 255, 255);
            var BrushTime = GetBrush(1, 255, 255, 255, 255);
            var BrushGray = GetBrush(alpha, 255, 200, 200, 200);
            var BrushBackground = GetBrush(alpha, 100, 0, 0, 0);

            var GaugeWhite3 = new Pen(BrushWhite, 3.0f);
            var GaugeWhite2 = new Pen(BrushWhite, 2.0f);
            var GaugeWhite1 = new Pen(BrushWhite, 1.0f);

            double throttle = 0, brake = 0, rpm = 0, speed = 0, rpm_max = 0, rpm_min = 0, redline = 0;
            object gear = 0;

            try
            {
                throttle = read.GetDouble(sample, "Driver.Throttle");
                brake = read.GetDouble(sample, "Player.Pedals_Brake");
                rpm = Rotations.Rads_RPM(read.GetDouble(sample, "Driver.RPM"));
                gear = read.Get(sample, "Driver.Gear");
                speed = read.GetDouble(sample, "Driver.Speed") * 3.6;

                rpm_max = 18000;
                rpm_min = 6000;

                rpm_max = 1000 * Math.Ceiling(1.05 * rpm_max / 1000.0);
                redline = (rpm - 17000) / 1000.0;
                if (redline < 0) redline = 0;
                if (redline > 1) redline = 1;
            }
            catch (Exception ex)
            {

            }
            var BrushGear = GetBrush(alpha, 255, 255, 255 - Convert.ToInt32(redline * 200), 255 - Convert.ToInt32(redline * 200));

            /******** SPEEDO etc ********/

            g.DrawString(Math.Round(speed).ToString("000"), new Font("Tahoma", 36, FontStyle.Bold), BrushWhite, positionGauge.X + 200 - 50, positionGauge.Y + 200 + 35);
            g.DrawString("km/h", new Font("Tahoma", 14), BrushWhite, positionGauge.X + 200 - 20, positionGauge.Y + 200 + 90);

            g.DrawString(gear.ToString(), new Font("Tahoma", 48), BrushGear, positionGauge.X + 200 + 30, positionGauge.Y + 200 + 110);

            /******** LAPTIME *******/
            var tijd = sample / 1000.0;
            var minutes = (tijd - (tijd % 60)) / 60;
            var seconds = Math.Floor(tijd - minutes * 60);
            var mills = (tijd % 1.0) * 1000;
            var txt = String.Format("{0:00}:{1:00}.{2:000}", minutes, seconds, mills);
            g.DrawString(txt, new Font("Tahoma", 48), BrushTime, positionGauge.X + 50, positionGauge.Y + 450);

            /******** RPM GAUGE ********/
            g.FillEllipse(BrushBackground, positionGauge.X, positionGauge.Y, 400, 400);
            g.DrawArc(GaugeWhite1, positionGauge.X + 45, positionGauge.Y + 45, 310, 310, 90, 270);
            g.DrawArc(GaugeWhite1, positionGauge.X + 50, positionGauge.Y + 50, 300, 300, 90, 270);
            g.DrawArc(GaugeWhite3, positionGauge.X + 55, positionGauge.Y + 55, 290, 290, 90, 270);

            for (int r = (int)(rpm_min / 1000); r <= (rpm_max) / 1000; r++)
            {
                var angle = (r * 1000 - rpm_min) / (rpm_max - rpm_min);
                angle *= 270;
                angle += 90;
                angle *= Math.PI;
                angle /= 180;
                var x1 = positionGauge.X + 400.0f / 2 + (float)Math.Cos(angle) * 155.0f;
                var y1 = positionGauge.Y + 400.0f / 2 + (float)Math.Sin(angle) * 155.0f;

                var x2 = positionGauge.X + 400.0f / 2 + (float)Math.Cos(angle) * 165.0f;
                var y2 = positionGauge.Y + 400.0f / 2 + (float)Math.Sin(angle) * 165.0f;

                var x3 = positionGauge.X + 400.0f / 2 + (float)Math.Cos(angle) * 180.0f;
                var y3 = positionGauge.Y + 400.0f / 2 + (float)Math.Sin(angle) * 180.0f;

                g.DrawLine(GaugeWhite2, x1, y1, x2, y2);

                x3 -= 14;
                y3 -= 12;

                g.DrawString(r.ToString(), new Font("Tahoma", 16.0f, FontStyle.Bold), BrushWhite, x3, y3);
            }

            // NEEDLE
            g.FillEllipse(BrushWhite, positionGauge.X + 400 / 2 - 15, positionGauge.Y + 400 / 2 - 15, 30, 30);

            var angle_needle = 90 + 270 * (rpm - rpm_min) / (rpm_max - rpm_min);

            angle_needle *= Math.PI;
            angle_needle /= 180;

            // Tip of needle
            var nx1 = positionGauge.X + 400.0f / 2 + (float)Math.Cos(angle_needle) * 155.0f;
            var ny1 = positionGauge.Y + 400.0f / 2 + (float)Math.Sin(angle_needle) * 155.0f;
            // Tip of needle
            var nx1a = positionGauge.X + 400.0f / 2 + (float)Math.Cos(angle_needle - 0.5 / 180.0 * Math.PI) * 155.0f;
            var ny1a = positionGauge.Y + 400.0f / 2 + (float)Math.Sin(angle_needle - 0.5 / 180.0 * Math.PI) * 155.0f;

            // Tip of needle
            var nx1b = positionGauge.X + 400.0f / 2 + (float)Math.Cos(angle_needle + 0.5 / 180.0 * Math.PI) * 155.0f;
            var ny1b = positionGauge.Y + 400.0f / 2 + (float)Math.Sin(angle_needle + 0.5 / 180.0 * Math.PI) * 155.0f;

            // Back (white)
            var nx2a = positionGauge.X + 400.0f / 2 + (float)Math.Cos(angle_needle + 25.0 / 180 * Math.PI) * -25.0f;
            var ny2a = positionGauge.Y + 400.0f / 2 + (float)Math.Sin(angle_needle + 25.0 / 180 * Math.PI) * -25.0f;

            // Back (gray)
            var nx2b = positionGauge.X + 400.0f / 2 + (float)Math.Cos(angle_needle - 25.0 / 180 * Math.PI) * -25.0f;
            var ny2b = positionGauge.Y + 400.0f / 2 + (float)Math.Sin(angle_needle - 25.0 / 180 * Math.PI) * -25.0f;

            // Middle (white)
            var nx3 = positionGauge.X + 400.0f / 2 + (float)Math.Cos(angle_needle) * -17.0f;
            var ny3 = positionGauge.Y + 400.0f / 2 + (float)Math.Sin(angle_needle) * -17.0f;

            var arr = new[] { new PointF(nx1, ny1), new PointF(nx1b, ny1b), new PointF(nx2b, ny2b), new PointF(nx3, ny3) };
            g.FillPolygon(BrushGray, arr);
            arr = new[] { new PointF(nx1, ny1), new PointF(nx1a, ny1a), new PointF(nx2a, ny2a), new PointF(nx3, ny3) };
            g.FillPolygon(BrushWhite, arr);

            /******** PEDALS ********/

            g.FillRectangle(Brush_PedalsBackground, positionGauge.X + 260, positionGauge.Y + 220, 140, 30);
            g.FillRectangle(Brush_PedalsThrottle, positionGauge.X + 260, positionGauge.Y + 220, Convert.ToInt32(throttle * 140), 30);
            g.DrawString("Throttle", new Font("Tahoma", 14.0f, FontStyle.Bold), BrushWhite, positionGauge.X + 290, positionGauge.Y + 225);

            g.FillRectangle(Brush_PedalsBackground, positionGauge.X + 260, positionGauge.Y + 260, 140, 30);
            g.FillRectangle(Brush_PedalsBrake, positionGauge.X + 260, positionGauge.Y + 260, Convert.ToInt32(brake * 140), 30);
            g.DrawString("Brake", new Font("Tahoma", 14.0f, FontStyle.Bold), BrushWhite, positionGauge.X + 302, positionGauge.Y + 265);
        }
Ejemplo n.º 4
0
        public void Draw()
        {
            if (fGarage.Sim == null)
            {
                // TODO: Display errors.
                // TODO: Check if sim is installed.
                if (Close != null)
                {
                    Close();
                }
                return;
            }
            ControlsAdded = false;
            if (ControlsAdded == false)
            {
                Controls.Clear();;
                Controls.Add(txt_loading);
                ControlsAdded = true;
                mods_list     = new List <Control>();
                panel.Controls.Clear();
                panel.Controls.Add(t);

                this.BackColor = Color.Black;
                Loading        = true;

                Task load = new Task(() =>
                {
                    if (fGarage.Sim != null && fGarage.Sim.Garage != null && fGarage.Sim.Garage.Mods != null)
                    {
                        foreach (IMod mod in fGarage.Sim.Garage.Mods)
                        {
                            // If required, scan:
                            mod.Scan();

                            if (mod.Image != "" &&
                                File.Exists(mod.Image))
                            {
                                ucResizableImage pb =
                                    new ucResizableImage(mod.Image);
                                pb.Caption = mod.Name;
                                pb.Margin  = new Padding(10);
                                pb.Name    = mod.Name;
                                if (mod.Models.Count == 0)
                                {
                                    pb.Disabled = true;
                                }
                                else
                                {
                                    pb.Cursor = Cursors.Hand;
                                    pb.Click +=
                                        new EventHandler(pb_Click);
                                }
                                pb.Crop(220, 220);
                                mods_list.Add(pb);
                            }
                            else
                            {
                                Label l = new Label();
                                l.Text  = mod.Name;
                                l.Name  = mod.Name;
                                l.Font  = new Font("Tahoma", 24.0f,
                                                   FontStyle.Bold);
                                l.Size = new Size(213, 120);
                                if (mod.Models.Count == 0)
                                {
                                    l.ForeColor = Color.Gray;
                                }
                                else
                                {
                                    l.ForeColor = Color.White;
                                    l.Cursor    = Cursors.Hand;
                                    l.Click    += pb_Click;
                                }
                                mods_list.Add(l);
                            }
                        }
                    }
                });
                load.ContinueWith((result) =>
                {
                    DrawPanel();
                });

                Task loadtracks = new Task(() =>
                {
                    TrackThumbnail thumbnail_generator = new TrackThumbnail();
                    fGarage.Sim.Garage.Scan();
                    if (fGarage.Sim.Garage.Tracks != null)
                    {
                        foreach (ITrack track in fGarage.Sim.Garage.Tracks)
                        {
                            track.Scan();
                            if (File.Exists(track.Thumbnail) == false)
                            {
                                track.ScanRoute();
                                thumbnail_generator.Create(track.Thumbnail, track.Name,
                                                           track.Version, track.Route,
                                                           220,
                                                           220);
                            }

                            if (File.Exists(track.Thumbnail))
                            {
                                ucResizableImage pb =
                                    new ucResizableImage(track.Thumbnail);
                                pb.Caption = track.Name;
                                pb.Margin  = new Padding(10);
                                pb.Name    = track.Name;
                                pb.Cursor  = Cursors.Hand;
                                //pb.Click +=pb_Click;
                                pb.Crop(220, 220);
                                mods_list.Add(pb);
                            }
                        }
                    }
                });
                loadtracks.ContinueWith((r) => {
                    load.Start();
                });
                loadtracks.Start();
                //load.Start();
            }
        }