Beispiel #1
0
 public SendingTxDialog()
 {
     InitializeComponent();
     Utils.ChangeFontUtil.ChangeDefaultFontFamily(this);
     FTimeCounter = new TimerCounter();
     FTimeCounter.OnSecondPassed += FTimeCounter_OnSecondPassed;
 }
        public NRefactoryIssueProvider(ICSharpCode.NRefactory.CSharp.Refactoring.CodeIssueProvider issue, IssueDescriptionAttribute attr)
        {
            issueProvider    = issue;
            this.attr        = attr;
            providerIdString = issueProvider.GetType().FullName;
            Category         = GettextCatalog.GetString(attr.Category ?? "");
            Title            = GettextCatalog.GetString(attr.Title ?? "");
            Description      = GettextCatalog.GetString(attr.Description ?? "");
            DefaultSeverity  = attr.Severity;
            SetMimeType("text/x-csharp");
            subIssues = issueProvider.SubIssues.Select(subIssue => (BaseCodeIssueProvider) new BaseNRefactoryIssueProvider(this, subIssue)).ToList();

            // Additional source of actions
            var actionProvider = attr.ActionProvider;

            if (actionProvider != null)
            {
                var actionAttr = actionProvider.GetCustomAttributes(typeof(ContextActionAttribute), false);
                if (actionAttr != null && actionAttr.Length == 1)
                {
                    boundActionProvider = (ICSharpCode.NRefactory.CSharp.Refactoring.CodeActionProvider)Activator.CreateInstance(actionProvider);
                }
            }

            counter = InstrumentationService.CreateTimerCounter(IdString, "CodeIssueProvider run times");
        }
 public static TimerCounter CreateInstance()
 {
     if (TCInstance == null) {
         TCInstance = new TimerCounter();
     }
     return TCInstance;
 }
Beispiel #4
0
 void AppendValues(TreeIter parent, TimerCounter c)
 {
     Gdk.Pixbuf icon = c.GetIcon();
     foreach (CounterValue val in c.GetValues().Where(val => val.HasTimerTraces))
     {
         string msg = !string.IsNullOrEmpty(val.Message) ? val.Message : c.Name;
         store.AppendValues(parent, icon, msg, val.Value, (float)val.Duration.TotalMilliseconds, 0f, 0f, 0f, false, null, val, true, true, val.GetTimeColor(c));
     }
 }
Beispiel #5
0
 public static TimerCounter GetInstance()
 {
     if (instance == null)
     {
         instance      = Instantiate <GameObject>(new GameObject()).AddComponent <TimerCounter>();
         instance.name = "TimerCounter";
     }
     return(instance);
 }
        public BaseNRefactoryIssueProvider(NRefactoryIssueProvider parentIssue, SubIssueAttribute subIssue)
        {
            this.parentIssue = parentIssue;
            this.subIssue    = subIssue;
            this.Title       = subIssue.Title;
            this.Description = subIssue.Description;

            DefaultSeverity = subIssue.HasOwnSeverity ? subIssue.Severity : parentIssue.DefaultSeverity;
            UpdateSeverity();

            counter = InstrumentationService.CreateTimerCounter(IdString, "CodeIssueProvider run times");
        }
Beispiel #7
0
 void Awake()
 {
     DontDestroyOnLoad(transform.gameObject);
     if (timer == null)
     {
         timer = this;
     }
     else
     {
         DestroyObject(gameObject);
     }
 }
Beispiel #8
0
 public NRefactoryIssueProvider(ICSharpCode.NRefactory.CSharp.Refactoring.CodeIssueProvider issue, IssueDescriptionAttribute attr)
 {
     issueProvider    = issue;
     this.attr        = attr;
     providerIdString = issueProvider.GetType().FullName;
     Category         = GettextCatalog.GetString(attr.Category ?? "");
     Title            = GettextCatalog.GetString(attr.Title ?? "");
     Description      = GettextCatalog.GetString(attr.Description ?? "");
     DefaultSeverity  = attr.Severity;
     SetMimeType("text/x-csharp");
     subIssues = issueProvider.SubIssues.Select(subIssue => (BaseCodeIssueProvider) new BaseNRefactoryIssueProvider(this, subIssue)).ToList();
     counter   = InstrumentationService.CreateTimerCounter(IdString, "CodeIssueProvider run times");
 }
Beispiel #9
0
		public TimerCounterContext CreateNewTimerContext (string counterName)
		{
			TimerCounter tc = GetCounterByIDOrName (counterName) as TimerCounter;
			if (tc == null) {
				throw new Exception ("Unknown timer counter " + counterName);
			}

			TimerCounterContext context = new TimerCounterContext {
				CounterName = counterName,
				TotalTime = tc.TotalTime
			};

			return context;
		}
Beispiel #10
0
        void AppendCounter(TreeIter parent, TimerCounter c)
        {
            TreeIter it;

            if (parent.Equals(TreeIter.Zero))
            {
                it = store.AppendValues(c.GetIcon(), c.Name, c.Count, (float)c.TotalTime.TotalMilliseconds, (float)c.AverageTime.TotalMilliseconds, (float)c.MinTime.TotalMilliseconds, (float)c.MaxTime.TotalMilliseconds, false, c, null, true, true, normalColor);
            }
            else
            {
                it = store.AppendValues(parent, c.GetIcon(), c.Name, c.Count, (float)c.TotalTime.TotalMilliseconds, (float)c.AverageTime.TotalMilliseconds, (float)c.MinTime.TotalMilliseconds, (float)c.MaxTime.TotalMilliseconds, false, c, null, true, true, normalColor);
            }

            // Dummy node
            store.AppendValues(it, null, "*");
        }
Beispiel #11
0
		public void WaitForTimerContext (TimerCounterContext context, int timeout = 20000, int pollStep = 200)
		{
			TimerCounter tc = GetCounterByIDOrName (context.CounterName) as TimerCounter;
			if (tc == null) {
				throw new Exception ("Unknown timer counter " + context.CounterName);
			}

			do {
				if (tc.TotalTime > context.TotalTime) {
					return;
				}

				timeout -= pollStep;
				Thread.Sleep (pollStep);
			} while (timeout > 0);

			throw new TimeoutException ("Timed out waiting for event");
		}
Beispiel #12
0
 private void butStop_Click(object sender, EventArgs e)
 {
     Chartfalse.GridShiftting   = false;
     Charttrue.GridShiftting    = false;
     statusChart1.GridShiftting = false;
     try
     {
         th.Abort();
         MessageBox.Show("停止成功!", "信息提示");
     }
     catch (Exception ex)
     {
         MessageBox.Show("未进行网速测试!", "信息提示");
     }
     Chartfalse.Value = 0; Charttrue.Value = 0;
     TimerCounter.Stop();
     LableDownloadValue.Text = str;
     Charttrue.Clear();
     Chartfalse.Clear();
 }
        public static Gdk.Color GetTimeColor(this CounterValue val, TimerCounter c)
        {
            long m = c.AverageTime.Ticks;
            long v = val.Duration.Ticks;

            if (v >= m * 3)
            {
                return(new Gdk.Color(255, 0, 0));
            }
            if (v >= m * 2)
            {
                return(new Gdk.Color(150, 0, 0));
            }
            if (v >= (long)((double)m) * 1.5d)
            {
                return(new Gdk.Color(100, 0, 0));
            }
            if (v >= (long)((double)m) * 1.1d)
            {
                return(new Gdk.Color(50, 0, 0));
            }
            if (v <= m / 3)
            {
                return(new Gdk.Color(0, 255, 0));
            }
            if (v <= m / 2)
            {
                return(new Gdk.Color(0, 150, 0));
            }
            if (v <= (long)((double)m) * 0.75d)
            {
                return(new Gdk.Color(0, 100, 0));
            }
            if (v <= (long)((double)m) * 0.90d)
            {
                return(new Gdk.Color(00, 50, 0));
            }
            return(new Gdk.Color(0, 0, 0));
        }
Beispiel #14
0
 public void CountTime()
 {
     TimerCounter.GetInstance().Show(LaCD, CDTimer.FormatToMMSS(TimerCounter.GetInstance().result));
 }
 public override IDisposable BeginTimer(TimerCounter counter, CounterValue value)
 {
     return(new TimerTrackerTest {
         Value = value
     });
 }
 public static void DestroyInstance()
 {
     if (TCInstance != null) {
         TCInstance = null;
     }
 }
Beispiel #17
0
        public void Init()
        {
            groups = new List <CountersGroup>();

            //TIME counters (8)
            var globalCurrentTime = new CurrentTimeCounter();

            var raceTimer = new TimerCounter("Race timer");

            var raceDuration = new TriggeredFuncCounter <Race, TimeSpan?>("Race duration", @"{0:hh\:mm\:ss}").With(x =>
            {
                x.BindTo(model.Race, y => y.DurationOfRace);
                x.AddTrigger(nameof(Race.DurationOfRace), model.Race);
            });

            var raceStartTime = new TriggeredFuncCounter <Race, DateTime?>("Race start time", @"{0:HH\:mm\:ss}").With(x =>
            {
                x.BindTo(model.Race, y => y.StartTime);
                x.AddTrigger(nameof(Race.StartTime), model.Race);
            });

            var raceEstimatedFinishTime = new TriggeredFuncCounter <Race, DateTime?>("Estimated finish time", @"{0:HH\:mm\:ss}").With(x =>
            {
                x.BindTo(model.Race, y => y.EstimatedFinishTime);
                x.AddTrigger(nameof(Race.EstimatedFinishTime), model.Race);
            });

            var segmentTimer = new TriggeredFuncCounter <Race, TimeSpan?>("Timer at the end of segment", @"{0:hh\:mm\:ss}").With(x =>
            {
                x.BindTo(model.Race, y => y.TimeOffsetAtTheEndOfCurrentSegment);
                x.AddTrigger(nameof(Race.TimeOffsetAtTheEndOfCurrentSegment), model.Race);
            });

            var timeToTurn = new RemainingTimeCounter("Time to turn").With(x =>
            {
                x.SetBase(raceTimer);
                x.SetTarget(segmentTimer);
                x.Size = CounterSize.XL;
            });

            var raceRemainingTime = new RemainingTimeCounter("Remaining race time").With(x =>
            {
                x.SetBase(raceTimer);
                x.SetTarget(raceDuration);
            });

            var segmentEndTime = new TriggeredFuncCounter <Race, DateTime?>("Time at end of segment", @"{0:HH\:mm\:ss}").With(x =>
            {
                x.BindTo(model.Race, y => y.TimeAtTheEndOfCurrentSegment);
                x.AddTrigger("TimeAtTheEndOfCurrentSegment", model.Race);
            });

            //GPS Counters (1)
            var gpsCoords = new TriggeredFuncCounter <GlobalModel, string>("GPS", "{0}").With(x =>
            {
                x.BindTo(model, y =>
                {
                    if (y.LastLocaton == null)
                    {
                        return("N/A");
                    }
                    return(string.Format("Lat = {0:F5}\nLon = {1:F5}\nAcc = {2:F3}\nSpd = {3:F1} {4}",
                                         y.LastLocaton.Latitude,
                                         y.LastLocaton.Longitude,
                                         y.LastLocaton.Accuracy,
                                         y.LastLocaton.SpeedKmh,
                                         @"-\|/-\|/"[gpsSymbol++ % 8]));
                });
                x.AddTrigger("LastLocation", model);
                x.AddTrigger("Value", globalCurrentTime);
                x.Size         = CounterSize.XS;
                x.ValueChanged = y =>
                {
                    var z   = y as TriggeredFuncCounter <GlobalModel, string>;
                    var loc = z.BindingContext?.LastLocaton;
                    if (loc == null)
                    {
                        return;
                    }
                    if (loc.GpsOn)
                    {
                        if (!y.IsRunning)
                        {
                            y.Start();
                        }
                    }
                    else
                    {
                        if (y.IsRunning)
                        {
                            y.Stop();
                        }
                    }
                    var gpsage = (DateTime.Now.ToUniversalTime() - loc.Time).TotalSeconds;
                    y.SetImportant(gpsage > 5 || loc.Accuracy > 50);
                    y.SetCritical(gpsage > 30 || loc.Accuracy > 100);
                };
            });

            //SEGMENT info (3)
            var currentSegmentNo = new TriggeredFuncCounter <Race, int?>("Segment no", "{0}").With(x =>
            {
                x.BindTo(model.Race, y => y.CurrentSegment?.No);
                x.AddTrigger(nameof(Race.CurrentSegment), model.Race);
            });

            var currentSegmentSpeed = new TriggeredFuncCounter <Race, double?>("Speed at segment").With(x =>
            {
                x.BindTo(model.Race, y => y.CurrentSegment?.Speed);
                x.AddTrigger(nameof(Race.CurrentSegment), model.Race);
            });

            var currentSegmentLength = new TriggeredFuncCounter <Race, double?>("Length of segment").With(x =>
            {
                x.BindTo(model.Race, y => y.CurrentSegment?.Length);
                x.AddTrigger(nameof(Race.CurrentSegment), model.Race);
            });


            //DISTANCE counters (4)
            var globalDistance = new DistanceCounter("Global distance");

            //var raceDistance3 = new DistanceCounter3("S(by speed)");
            var segmentDistance = new DistanceCounter("Segment distance").With(x => {
                x.Subscribe("Value", y => {
                    if (model.Race.CurrentSegment != null && y.Value.HasValue)
                    {
                        model.Race.CurrentSegment.PassedDistance = y.Value.Value;
                    }
                });
            });

            var raceLength = new TriggeredFuncCounter <Race, double?>("Length of race").With(x =>
            {
                x.BindTo(model.Race, y => y.LengthOfRace);
                x.AddTrigger(nameof(Race.LengthOfRace), model.Race);
            });

            var segmentDistanceToTurn = new RemainingDistanceCounter("Distance to turn").With(x =>
            {
                x.SetBase(segmentDistance);
                x.SetTarget(currentSegmentLength);
                x.Size = CounterSize.XXL;
            });

            var racePassedDistance = new TriggeredFuncCounter <Race, double?>("Race distance").With(x =>
            {
                x.BindTo(model.Race, y =>
                {
                    return(y.Segments.TakeWhile(z => z.Passed).Sum(z => z.Length)
                           + segmentDistance.Value);
                });
                x.AddTrigger(nameof(Race.Segments), model.Race);
                x.AddTrigger(nameof(IRaceCounter <double?> .Value), segmentDistance);
            });

            var raceDistanceToFinish = new RemainingDistanceCounter("Distance to finish").With(x =>
            {
                x.SetBase(racePassedDistance);
                x.SetTarget(raceLength);
            });


            //SPEED (6)
            var raceAverageSpeed      = new AvgSpeedKmhCounter("Avg race speed", 86400);
            var segmentAvgSpeed       = new AvgSpeedKmhCounter("Avg segment speed", 86400);
            var segment15SecondsSpeed = new AvgSpeedKmhCounter("Avg segment speed 30 sec", 15);
            var segment5SecondsSpeed  = new AvgSpeedKmhCounter("Current speed", 5)
            {
                Size  = CounterSize.XXL,
                Color = CounterColor.Green
            }.With(x => x.AddTrigger("Value", raceTimer));

            var recommendedSpeed2 = new TriggeredFuncCounter <Race, double?>("Recommended speed value", "{0}").With(x =>
            {
                x.BindTo(model.Race, y =>
                {
                    if (y.IsRunning)
                    {
                        var timerFromStart           = raceTimer.Value;
                        var timerAtEndOfSegment      = y.TimeOffsetAtTheEndOfCurrentSegment;
                        var timeLeft                 = timerAtEndOfSegment - timerFromStart;
                        var remainingRaceTimeSeconds = raceRemainingTime.Value.GetValue().TotalSeconds;
                        if (timeLeft?.TotalSeconds <= 1)
                        {
                            return(remainingRaceTimeSeconds > 0 ? 1000 : 0);
                        }
                        var distanceLeft = y.CurrentSegment?.Length - segmentDistance?.Value;
                        var speed        = distanceLeft / timeLeft?.TotalSeconds * 3.6;
                        if (speed >= 90)
                        {
                            return(1000);
                        }
                        if (speed <= 1)
                        {
                            return(0);
                        }
                        return(speed);
                    }
                    return(0);
                });
                x.AddTrigger(nameof(Race.CurrentSegment), model.Race);
                x.AddTrigger(nameof(Race.IsRunning), model.Race);
                x.AddTrigger(nameof(IRaceCounter <TimeSpan?> .Value), raceTimer);
                x.AddTrigger(nameof(IRaceCounter <TimeSpan?> .Value), raceRemainingTime);
            });

            var recommendedSpeed = new TriggeredFuncCounter <Race, double?>("Recommended speed value", "{0}").With(x =>
            {
                x.BindTo(model.Race, y =>
                {
                    if (y.IsRunning)
                    {
                        var timeLeft = timeToTurn.Value;
                        var remainingRaceTimeSeconds = raceRemainingTime.Value.GetValue().TotalSeconds;
                        if (timeLeft?.TotalSeconds <= 1)
                        {
                            return(remainingRaceTimeSeconds > 0 ? 1000 : 0);
                        }
                        var distanceLeft = segmentDistanceToTurn.Value;
                        var speed        = distanceLeft / timeLeft?.TotalSeconds * 3.6;
                        if (distanceLeft < 0 || speed <= 1)
                        {
                            return(0);
                        }
                        if (speed >= 90)
                        {
                            return(1000);
                        }
                        return(speed);
                    }
                    return(0);
                });
                x.AddTrigger(nameof(Race.CurrentSegment), model.Race);
                x.AddTrigger(nameof(Race.IsRunning), model.Race);
                x.AddTrigger(nameof(IRaceCounter <TimeSpan?> .Value), raceTimer);
                x.AddTrigger(nameof(IRaceCounter <TimeSpan?> .Value), raceRemainingTime);
            });


            var recommendedSpeedString = new TriggeredFuncCounter <Race, string>("Recommended speed", "{0}").With(x =>
            {
                x.BindTo(model.Race, y =>
                {
                    if (!y.IsRunning)
                    {
                        return("0");
                    }
                    var speed = Convert.ToInt32(recommendedSpeed.Value);
                    if (speed == 1000)
                    {
                        return("MAX");
                    }
                    if (speed == 0)
                    {
                        return("STOP");
                    }
                    return(speed.ToString());
                });
                x.AddTrigger("Value", recommendedSpeed);
                x.AddTrigger("Value", segment5SecondsSpeed);
                x.Size = CounterSize.XXL;
                x.SetImportant(true);
                x.ValueChanged = y =>
                {
                    var speed = (int)recommendedSpeed.Value.GetValue();
                    if (speed == 0 || speed == 1000)
                    {
                        x.SetCritical(true);
                        return;
                    }
                    var avgSpeed = segment5SecondsSpeed.Value;
                    var rel      = avgSpeed > 0.5 ? Math.Abs(speed / avgSpeed) : 1000;
                    x.SetImportant(rel > 1.5 || rel < 0.75);
                    x.SetCritical(rel > 2 || rel < 1 / 2);
                };
            });

            //Mixed
            var lagLeadTime = new TriggeredFuncCounter <Race, TimeSpan>("Delay time", @"{0:hh\:mm\:ss}").With(x =>
            {
                x.BindTo(model.Race, y => y.DelayTime);
                x.AddTrigger("Value", recommendedSpeed);
                x.AddTrigger("Value", segment5SecondsSpeed);
                x.Size = CounterSize.XL;
                x.SetImportant(false);
                x.SetCritical(false);
                x.ValueChanged = y =>
                {
                    var seconds = y.Value.TotalSeconds;
                    if (y.Value.Days == 1)
                    {
                        x.Color = CounterColor.Red;
                    }
                    {
                        if (seconds < -30)
                        {
                            x.Color = CounterColor.Red;
                        }
                        if (seconds >= -30 && seconds <= 30)
                        {
                            x.Color = CounterColor.White;
                        }
                        if (seconds > 30)
                        {
                            x.Color = CounterColor.Green;
                        }
                    }
                    //x.SetImportant(seconds > 30);
                    //x.SetCritical(seconds > 60);
                };
                x.ApproximationCount    = 5;
                x.ApproximationFunction = y =>
                {
                    if (!y.Any())
                    {
                        return(TimeSpan.FromSeconds(0));
                    }
                    if (y.Any(z => z.Days == 1))
                    {
                        return(TimeSpan.FromDays(1));
                    }
                    var avgSeconds = y.Select(z => z.TotalSeconds).Average();
                    return(TimeSpan.FromSeconds(avgSeconds));
                };
            });

            //speech
            var lastSpeedNotification    = 0;
            var lastDistanceNotification = 0;
            //var lastRoundedLen = 0;
            var lastNotificationTime    = DateTime.Now;
            var minNotificationInterval = TimeSpan.FromSeconds(2);

            model.Race.Subscribe(nameof(Race.CurrentSegment), x =>
            {
                lock (this)
                {
                    if (model.Race.CurrentSegment != null && model.Race.IsRunning)
                    {
                        var len = (int)model.Race.CurrentSegment.Length;
                        lastDistanceNotification = len;
                        model.Speech?.Speak($"Сегмент {len}");
                    }
                }
            });


            segmentDistanceToTurn.Subscribe(nameof(IRaceCounter <double?> .Value), x =>
            {
                lock (this)
                {
                    if (model.Race.CurrentSegment != null && model.Race.IsRunning)
                    {
                        var len   = x.Value.GetValue();
                        var k     = len > 1000 ? 1000 : len > 100 ? 100 : len > 50 ? 50 : 10;
                        var len10 = (int)(Math.Round(len / k) * k);
                        var speed = segmentAvgSpeed.Value;
                        if (speed < 0.01)
                        {
                            return;
                        }
                        if (Math.Abs(len - len10) > speed / 2)
                        {
                            return;
                        }
                        if (lastDistanceNotification == len10)
                        {
                            return;
                        }

                        lastDistanceNotification = len10;
                        if (len10 == 0)
                        {
                            model.Speech?.Speak($"Поворот");
                        }
                        else
                        {
                            if (DateTime.Now - lastNotificationTime < minNotificationInterval)
                            {
                                return;
                            }
                            if (len10 > 0)
                            {
                                model.Speech?.Speak($"Еще {len10}");
                            }
                            else
                            {
                                if (len < -50)
                                {
                                    model.Speech?.Speak(GetRandomPhrase(len < -200 ? "lost2" : "lost1", model.UseBadLanguage));
                                }
                            }
                        }
                        lastNotificationTime = DateTime.Now;
                    }
                }
            });

            recommendedSpeed.Subscribe(nameof(IRaceCounter <double?> .Value), x =>
            {
                lock (this)
                {
                    if (DateTime.Now - lastNotificationTime < minNotificationInterval)
                    {
                        return;
                    }
                    if (model.Race.CurrentSegment != null && model.Race.IsRunning)
                    {
                        var curSpeed = (int)Math.Round(segmentAvgSpeed.Value);
                        var recSpeed = (int)Math.Round(recommendedSpeed.Value.GetValue());
                        var speedStr = recSpeed >= 1000 ? GetRandomPhrase("maxSpeed", model.UseBadLanguage) : $"Скорость {recSpeed}";
                        if (Math.Abs(lastSpeedNotification - recSpeed) < 5)
                        {
                            return;
                        }
                        if (Math.Abs(curSpeed - recSpeed) < 5)
                        {
                            return;
                        }
                        lastSpeedNotification = recSpeed;
                        lastNotificationTime  = DateTime.Now;
                        model.Speech?.Speak(speedStr);
                    }
                }
            });

            //making groups
            var group0 = new ObservableRangeCollection <IRaceCounter>()
            {
                globalCurrentTime,
                raceStartTime,
                raceEstimatedFinishTime,
                raceTimer,
                raceRemainingTime
            };


            var group1 = new ObservableRangeCollection <IRaceCounter>()
            {
                gpsCoords,
                segmentDistanceToTurn,
                timeToTurn
            };

            var group2 = new ObservableRangeCollection <IRaceCounter>()
            {
                segment5SecondsSpeed,
                recommendedSpeedString,
                lagLeadTime
            };

            var group3 = new ObservableRangeCollection <IRaceCounter>()
            {
                raceLength, raceDuration, globalDistance, racePassedDistance, segmentDistance,
                raceDistanceToFinish, raceAverageSpeed, segmentAvgSpeed, currentSegmentSpeed, currentSegmentLength
            };

            groups.Add(new CountersGroup {
                Counters = group0, Weight = 0.5
            });
            groups.Add(new CountersGroup {
                Counters = group1
            });
            groups.Add(new CountersGroup {
                Counters = group2
            });
            groups.Add(new CountersGroup {
                Counters = group3
            });

            HiddenCounters = new List <IRaceCounter>();
            HiddenCounters.AddRange(new IRaceCounter[]
            {
                raceAverageSpeed,
                raceRemainingTime,
                recommendedSpeed,
                raceLength,
                currentSegmentNo,
                currentSegmentSpeed,
                currentSegmentLength,
                segmentAvgSpeed,
                segmentDistance,
                segmentEndTime,
                segmentTimer,
                segment15SecondsSpeed
            });

            SegmentCounters = new List <IRaceCounter>()
            {
                segmentTimer,
                segmentEndTime,
                segmentAvgSpeed,
                segmentDistance,
                segment5SecondsSpeed
            };

            AllCounters = HiddenCounters
                          .Union(Groups.SelectMany(x => x.Counters))
                          .Distinct()
                          .ToList();

            foreach (var c in AllCounters)
            {
                c.Init();
            }
        }
Beispiel #18
0
 private void GameForm_Closing(object sender, CancelEventArgs e)
 {
     TimerCounter.Stop();
 }