public ChartData CalculateChartPoints() { double[] AccuracyTotalvsDifficultyArray = new double[30]; double[] AccuracyTotalvsDifficultyCountsArray = new double[30]; double[] AccuracyErrorvsDifficultyArray = new double[30]; double[] AccuracyErrorvsDifficultyCountsArray = new double[30]; double[] AccuracyLatevsDifficultyArray = new double[30]; double[] AccuracyLatevsDifficultyCountsArray = new double[30]; ChartData DP = new ChartData(); foreach (PatternMetric Metric in PatternMetrics) { DP.AccuracyTotalvsTime.Add(new Point(Metric.PatternTimePlayed.ToFileTime(), Metric.PatternAccuracyTotal)); DP.AccuracyErrorvsTime.Add(new Point(Metric.PatternTimePlayed.ToFileTime(), Metric.PatternAccuracyError)); DP.AccuracyLatevsTime.Add(new Point(Metric.PatternTimePlayed.ToFileTime(), Metric.PatternAccuracyLate)); AccuracyTotalvsDifficultyArray[Metric.PatternDifficulty] += Metric.PatternAccuracyTotal; AccuracyTotalvsDifficultyCountsArray[Metric.PatternDifficulty]++; AccuracyErrorvsDifficultyArray[Metric.PatternDifficulty] += Metric.PatternAccuracyError; AccuracyErrorvsDifficultyCountsArray[Metric.PatternDifficulty]++; AccuracyLatevsDifficultyArray[Metric.PatternDifficulty] += Metric.PatternAccuracyLate; AccuracyLatevsDifficultyCountsArray[Metric.PatternDifficulty]++; } for (int i = 0; i < 30; i++) { if (AccuracyTotalvsDifficultyCountsArray[i] > 0) { DP.AccuracyTotalvsDifficulty.Add(new Point(i, (AccuracyTotalvsDifficultyArray[i] / AccuracyTotalvsDifficultyCountsArray[i]))); } if (AccuracyErrorvsDifficultyCountsArray[i] > 0) { DP.AccuracyErrorvsDifficulty.Add(new Point(i, (AccuracyErrorvsDifficultyArray[i] / AccuracyErrorvsDifficultyCountsArray[i]))); } if (AccuracyLatevsDifficultyCountsArray[i] > 0) { DP.AccuracyLatevsDifficulty.Add(new Point(i, (AccuracyLatevsDifficultyArray[i] / AccuracyLatevsDifficultyCountsArray[i]))); } } for (int i = 0; i < Pattern.Count; i++) { if (((PatternUnit)Pattern[i]).IsLate || ((PatternUnit)Pattern[i]).MadeErrors) { DP.StatusTotalvsPatternNotes.Add(new Point(i, 4)); } else if (((PatternUnit)Pattern[i]).MadeErrors) { DP.StatusTotalvsPatternNotes.Add(new Point(i, 3)); } else if (((PatternUnit)Pattern[i]).IsLate) { DP.StatusTotalvsPatternNotes.Add(new Point(i, 2)); } else { DP.StatusTotalvsPatternNotes.Add(new Point(i, 1)); } } return DP; }
public ChartData CalculateAccuracyChartPoints(ArrayList PatternMetrics) { double[] AccuracyTotalvsDifficultyArray = new double[30]; double[] AccuracyTotalvsDifficultyCountsArray = new double[30]; double[] AccuracyErrorvsDifficultyArray = new double[30]; double[] AccuracyErrorvsDifficultyCountsArray = new double[30]; double[] AccuracyLatevsDifficultyArray = new double[30]; double[] AccuracyLatevsDifficultyCountsArray = new double[30]; ChartData DP = new ChartData(); foreach (PatternMetric Metric in PatternMetrics) { DP.AccuracyTotalvsTime.Add(new Point(Scale(Metric.PatternTimePlayed.ToFileTime(), 10, 300, ((PatternMetric)(PatternMetrics[0])).PatternTimePlayed.ToFileTime(), ((PatternMetric)(PatternMetrics[PatternMetrics.Count - 1])).PatternTimePlayed.ToFileTime()), Metric.PatternAccuracyTotal)); DP.AccuracyErrorvsTime.Add(new Point(Scale(Metric.PatternTimePlayed.ToFileTime(), 10, 300, ((PatternMetric)(PatternMetrics[0])).PatternTimePlayed.ToFileTime(), ((PatternMetric)(PatternMetrics[PatternMetrics.Count - 1])).PatternTimePlayed.ToFileTime()), Metric.PatternAccuracyError)); DP.AccuracyLatevsTime.Add(new Point(Scale(Metric.PatternTimePlayed.ToFileTime(), 10, 300, ((PatternMetric)(PatternMetrics[0])).PatternTimePlayed.ToFileTime(), ((PatternMetric)(PatternMetrics[PatternMetrics.Count - 1])).PatternTimePlayed.ToFileTime()), Metric.PatternAccuracyLate)); AccuracyTotalvsDifficultyArray[Metric.PatternDifficulty] += Metric.PatternAccuracyTotal; AccuracyTotalvsDifficultyCountsArray[Metric.PatternDifficulty]++; AccuracyErrorvsDifficultyArray[Metric.PatternDifficulty] += Metric.PatternAccuracyError; AccuracyErrorvsDifficultyCountsArray[Metric.PatternDifficulty]++; AccuracyLatevsDifficultyArray[Metric.PatternDifficulty] += Metric.PatternAccuracyLate; AccuracyLatevsDifficultyCountsArray[Metric.PatternDifficulty]++; } for (int i = 0; i < 30; i++) { if (AccuracyTotalvsDifficultyCountsArray[i] > 0) { DP.AccuracyTotalvsDifficulty.Add(new Point(i, (AccuracyTotalvsDifficultyArray[i] / AccuracyTotalvsDifficultyCountsArray[i]))); } if (AccuracyErrorvsDifficultyCountsArray[i] > 0) { DP.AccuracyErrorvsDifficulty.Add(new Point(i, (AccuracyErrorvsDifficultyArray[i] / AccuracyErrorvsDifficultyCountsArray[i]))); } if (AccuracyLatevsDifficultyCountsArray[i] > 0) { DP.AccuracyLatevsDifficulty.Add(new Point(i, (AccuracyLatevsDifficultyArray[i] / AccuracyLatevsDifficultyCountsArray[i]))); } } return DP; }
public void ShowTestResults() { //TODO Display Results of the Test WriteHistoryToFile(UserDataPath + UserFileName); //NECESSARY CRAP IF YOU WANT TO MODIFY ANY CONTROL THAT'S OWNED BY THE MAIN THREAD C.Dispatcher.Invoke( System.Windows.Threading.DispatcherPriority.Normal, new Action( delegate() { C.Children.Remove(MenuButton); } )); //NECESSARY CRAP IF YOU WANT TO MODIFY ANY CONTROL THAT'S OWNED BY THE MAIN THREAD ChartCanvas.Dispatcher.Invoke( System.Windows.Threading.DispatcherPriority.Normal, new Action( delegate() { ChartCanvas.Children.Remove(LG); } )); ////NECESSARY CRAP IF YOU WANT TO MODIFY ANY CONTROL THAT'S OWNED BY THE MAIN THREAD //LineGraph.Dispatcher.Invoke( // System.Windows.Threading.DispatcherPriority.Normal, // new Action<PointCollection>( // delegate(PointCollection Acc) // { // LineGraph.SetPointLocations(DP.AccuracyTotalvsTime, 0.0); // } // ), // DataPoints.AccuracyErrorvsDifficulty.Clone() //); //NECESSARY CRAP IF YOU WANT TO MODIFY ANY CONTROL THAT'S OWNED BY THE MAIN THREAD LG.Dispatcher.Invoke( System.Windows.Threading.DispatcherPriority.Normal, new Action( delegate() { ArrayList Metrics = new ArrayList(); Metrics.AddRange(ReadHistoryFromFile(UserDataPath + UserFileName)); ChartData Points = new ChartData(); Points = CalculateAccuracyChartPoints(Metrics); LG = new AmCharts.Windows.QuickCharts.LineGraph(); LG.SetPointLocations(Points.AccuracyTotalvsTime, 0.0); LG.Background = new System.Windows.Media.SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF)); LG.Brush = new System.Windows.Media.SolidColorBrush(Color.FromArgb(0xFF, 0x00, 0x00, 0xFF)); LG.BorderBrush = new System.Windows.Media.SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0xFF, 0x00)); Canvas.SetLeft(LG, 0.0); Canvas.SetTop(LG, 0.0); LG.Title = "Stuff"; LG.Foreground = new System.Windows.Media.SolidColorBrush(Color.FromArgb(0xFF, 0x00, 0xFF, 0xFF)); LG.Visibility = System.Windows.Visibility.Visible; LG.Render(); } )//, (Object) (DataPoints.AccuracyTotalvsDifficulty) ); ////NECESSARY CRAP IF YOU WANT TO MODIFY ANY CONTROL THAT'S OWNED BY THE MAIN THREAD //ColumnGraph.Dispatcher.Invoke( // System.Windows.Threading.DispatcherPriority.Normal, // new Action<ChartData>( // delegate(ChartData DP) // { // //ColumnGraph.SetPointLocations(DP.StatusTotalvsPatternNotes, 0.0); // } // ), // DataPoints //); ////NECESSARY CRAP IF YOU WANT TO MODIFY ANY CONTROL THAT'S OWNED BY THE MAIN THREAD //HistoryChart.Dispatcher.Invoke( // System.Windows.Threading.DispatcherPriority.Normal, // new Action( // delegate() // { // HistoryChart.DataSource = DataPoints.AccuracyTotalvsTime; // } // )); ////NECESSARY CRAP IF YOU WANT TO MODIFY ANY CONTROL THAT'S OWNED BY THE MAIN THREAD //GapPerformance.Dispatcher.Invoke( // System.Windows.Threading.DispatcherPriority.Normal, // new Action<ChartData>( // delegate(ChartData DP) // { // GapPerformance.DataSource = DP.StatusTotalvsPatternNotes; // } // ), // DataPoints //); //NECESSARY CRAP IF YOU WANT TO MODIFY ANY CONTROL THAT'S OWNED BY THE MAIN THREAD TotAccScr.Dispatcher.Invoke( System.Windows.Threading.DispatcherPriority.Normal, new Action( delegate() { TotAccScr.Content = "" + ((PatternMetric)PatternMetrics[PatternMetrics.Count - 1]).PatternAccuracyTotal + "%"; } )); //NECESSARY CRAP IF YOU WANT TO MODIFY ANY CONTROL THAT'S OWNED BY THE MAIN THREAD ErrAccScr.Dispatcher.Invoke( System.Windows.Threading.DispatcherPriority.Normal, new Action( delegate() { ErrAccScr.Content = "" + ((PatternMetric)PatternMetrics[PatternMetrics.Count - 1]).PatternAccuracyError + "%"; } )); //NECESSARY CRAP IF YOU WANT TO MODIFY ANY CONTROL THAT'S OWNED BY THE MAIN THREAD LatAccScr.Dispatcher.Invoke( System.Windows.Threading.DispatcherPriority.Normal, new Action( delegate() { LatAccScr.Content = "" + ((PatternMetric)PatternMetrics[PatternMetrics.Count - 1]).PatternAccuracyLate + "%"; } )); //NECESSARY CRAP IF YOU WANT TO MODIFY ANY CONTROL THAT'S OWNED BY THE MAIN THREAD ChartCanvas.Dispatcher.Invoke( System.Windows.Threading.DispatcherPriority.Normal, new Action( delegate() { //LG.Render(); ChartCanvas.Children.Add(MenuButton); ChartCanvas.Children.Add(LG); ChartCanvas.Visibility = System.Windows.Visibility.Visible; } )); }