internal Dictionary <string, List <HitFreqChartData> > GetHitFreqValues(PlayerStats selected, CombinedStats damageStats) { Dictionary <string, List <HitFreqChartData> > results = new Dictionary <string, List <HitFreqChartData> >(); if (damageStats != null) { // get chart data for player and pets if available List <PlayerStats> list = new List <PlayerStats>(); if (damageStats.Children.ContainsKey(selected.Name)) { list.AddRange(damageStats.Children[selected.Name]); } else { list.Add(selected); } list.ForEach(stat => { results[stat.Name] = new List <HitFreqChartData>(); foreach (string type in stat.SubStats.Keys) { HitFreqChartData chartData = new HitFreqChartData() { HitType = stat.SubStats[type].Name }; // add crits chartData.CritXValues.AddRange(stat.SubStats[type].CritFreqValues.Keys.OrderBy(key => key)); chartData.CritXValues.ForEach(damage => chartData.CritYValues.Add(stat.SubStats[type].CritFreqValues[damage])); // add non crits chartData.NonCritXValues.AddRange(stat.SubStats[type].NonCritFreqValues.Keys.OrderBy(key => key)); chartData.NonCritXValues.ForEach(damage => chartData.NonCritYValues.Add(stat.SubStats[type].NonCritFreqValues[damage])); results[stat.Name].Add(chartData); } }); } return(results); }
internal static Dictionary <string, List <HitFreqChartData> > GetHitFreqValues(PlayerStats selected, CombinedStats damageStats) { Dictionary <string, List <HitFreqChartData> > results = new Dictionary <string, List <HitFreqChartData> >(); // get chart data for player and pets if available if (damageStats?.Children.ContainsKey(selected.Name) == true) { damageStats?.Children[selected.Name].ForEach(stats => AddStats(stats)); } else { AddStats(selected); } return(results); void AddStats(PlayerStats stats) { results[stats.Name] = new List <HitFreqChartData>(); foreach (string type in stats.SubStats.Keys) { HitFreqChartData chartData = new HitFreqChartData() { HitType = stats.SubStats[type].Name }; // add crits chartData.CritXValues.AddRange(stats.SubStats[type].CritFreqValues.Keys.OrderBy(key => key)); chartData.CritXValues.ForEach(damage => chartData.CritYValues.Add(stats.SubStats[type].CritFreqValues[damage])); // add non crits chartData.NonCritXValues.AddRange(stats.SubStats[type].NonCritFreqValues.Keys.OrderBy(key => key)); chartData.NonCritXValues.ForEach(damage => chartData.NonCritYValues.Add(stats.SubStats[type].NonCritFreqValues[damage])); results[stats.Name].Add(chartData); } } }
private void UserSelectionChanged() { if (!Updating) { Updating = true; Task.Delay(20).ContinueWith(task => { Dispatcher.InvokeAsync(() => { try { if (playerList.SelectedItem is string player && hitTypeList.SelectedItem is string type && critTypeList.SelectedItem is string critType && player.Length > 0 && type.Length > 0 && critType.Length > 0) { DIMap = null; var data = ChartData[player]; int minFreq = GetMinFreq(); HitFreqChartData first = data.Find(d => d.HitType == type); YValues = new List <int>(); XValues = new List <long>(); XValuesDiff = new List <long>(); if (critType == CRIT_HITTYPE) { for (int i = 0; i < first.CritYValues.Count; i++) { if (first.CritYValues[i] > minFreq) { YValues.Add(first.CritYValues[i]); XValues.Add(first.CritXValues[i]); XValuesDiff.Add(i > 0 ? Math.Abs(first.CritXValues[i] - first.CritXValues[i - 1]) : 0); } } } else { for (int i = 0; i < first.NonCritYValues.Count; i++) { if (first.NonCritYValues[i] > minFreq) { YValues.Add(first.NonCritYValues[i]); XValues.Add(first.NonCritXValues[i]); XValuesDiff.Add(i > 0 ? Math.Abs(first.NonCritXValues[i] - first.NonCritXValues[i - 1]) : 0); } } } pageSlider.Value = 0; UpdatePageSize(); DisplayPage(); } Updating = false; } catch (ArgumentNullException ex) { Updating = false; LOG.Error(ex); } catch (InvalidOperationException ioe) { Updating = false; LOG.Error(ioe); } }); }, TaskScheduler.Default); } }