Skip to content

Commit

Permalink
Use generic math in custom entry graphs
Browse files Browse the repository at this point in the history
  • Loading branch information
NoahStolk committed Mar 29, 2024
1 parent a8ae85e commit 0fd1a2f
Showing 1 changed file with 17 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using System.Net;
using System.Numerics;

namespace DevilDaggersInfo.Web.Client.Pages.Custom.Leaderboards;

Expand Down Expand Up @@ -117,8 +118,8 @@ List<MarkupString> AccuracyHighlighter(LineDataSet ds, LineData d)
];
}

double minAcc = stats.Select(t => t.Acc).Min();
double maxAcc = stats.Select(t => t.Acc).Max();
double minAcc = stats.Min(t => t.Acc);
double maxAcc = stats.Max(t => t.Acc);
LineChartDataOptions dataOptions = new(0, _time / 10, _time, Math.Floor(minAcc * 10) / 10, 0.1, Math.Ceiling(maxAcc * 10) / 10, true);
LineChartOptions chartOptions = new()
{
Expand Down Expand Up @@ -195,52 +196,42 @@ List<MarkupString> AccuracyHighlighter(LineDataSet ds, LineData d)
(GetCustomEntryData.OrbsKilledData, "Orbs Killed", EnemyColors.TheOrb.HexCode));
}

// TODO: Use INumber in .NET 7.
private void AddLineChart(string chartName, params (ushort[]? Data, string Name, string HexColor)[] dataSets)
private void AddLineChart<T>(string chartName, params (T[]? Data, string Name, string HexColor)[] dataSets)
where T : struct, INumber<T>
{
List<(LineDataSet Set, string Name)> sets = [];
foreach ((ushort[]? Data, string Name, string HexColor) dataSet in dataSets)
foreach ((T[]? Data, string Name, string HexColor) dataSet in dataSets)
AddDataSet(sets, dataSet.Data, dataSet.Name, dataSet.HexColor);

AddDataSets(sets, chartName);
}

// TODO: Use INumber in .NET 7.
private void AddLineChart(string chartName, params (int[]? Data, string Name, string HexColor)[] dataSets)
{
List<(LineDataSet Set, string Name)> sets = [];
foreach ((int[]? Data, string Name, string HexColor) dataSet in dataSets)
AddDataSet(sets, dataSet.Data, dataSet.Name, dataSet.HexColor);

AddDataSets(sets, chartName);
}

// TODO: Use INumber in .NET 7.
private void AddDataSet(List<(LineDataSet Set, string Name)> dataSets, ushort[]? data, string name, string color)
{
AddDataSet(dataSets, data?.Select(u => (int)u).ToArray(), name, color);
}

// TODO: Use INumber in .NET 7.
private void AddDataSet(List<(LineDataSet Set, string Name)> dataSets, int[]? data, string name, string color)
private void AddDataSet<T>(List<(LineDataSet Set, string Name)> dataSets, T[]? data, string name, string color)
where T : struct, INumber<T>
{
if (data != null)
dataSets.Add((new(color, false, true, false, data.Take(_time).Select((val, i) => new LineData(i, val, val)).ToList(), dataSets.Count == 0 ? _initialHighlightTransformation : _highlightTransformation), name));
dataSets.Add((new(color, false, true, false, data.Take(_time).Select((val, i) => new LineData(i, double.CreateChecked(val), int.CreateChecked(val))).ToList(), dataSets.Count == 0 ? _initialHighlightTransformation : _highlightTransformation), name));
}

private void AddDataSets(List<(LineDataSet Set, string Name)> dataSets, string name)
{
if (dataSets.Count == 0)
return;

double maxData = dataSets.Select(ds => ds.Set.Data.Select(d => d.Y).Max()).Max();
double maxData = dataSets.Max(ds => ds.Set.Data.Max(d => d.Y));
int digits = ((int)Math.Round(maxData)).ToString().Length;
int roundingPoint = (int)Math.Pow(10, digits - 1);
maxData = Math.Ceiling(maxData / roundingPoint) * roundingPoint;
LineChartDataOptions dataOptions = new(0, _time / 10, _time, 0, maxData / 8, maxData);
LineChartOptions chartOptions = new()
{
HighlighterKeys = dataSets.ConvertAll(ds => ds.Name).Prepend("Time").ToList(), GridOptions = new() { MinimumRowHeightInPx = 50 }, Backgrounds = _backgrounds, HighlighterWidth = 320,
HighlighterKeys = dataSets.ConvertAll(ds => ds.Name).Prepend("Time").ToList(),
GridOptions = new()
{
MinimumRowHeightInPx = 50,
},
Backgrounds = _backgrounds,
HighlighterWidth = 320,
};
_lineCharts.Add((name, dataOptions, chartOptions, dataSets.ConvertAll(ds => ds.Set)));
}
Expand Down

0 comments on commit 0fd1a2f

Please sign in to comment.