feat: charts by nations ready

This commit is contained in:
Mikhail Shabanov committed 2021-08-06 17:12:16 +02:00
1 parent 73bbe3cd14
commit 2578beb4e0
19 files changed
+538 -14

No files matched your search

@@ -15,9 +15,9 @@ namespace Microsoft.Extensions.DependencyInjection
return new ClientServiceProvider(global::Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(serviceCollection));
});
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton(services, sp => new global::WotBlitzStatisticsPro.Blazor.GraphQl.State.WotBlitzStatisticsProClientStoreAccessor(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.IOperationStore>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<ClientServiceProvider>(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.IEntityStore>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<ClientServiceProvider>(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.IEntityIdSerializer>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<ClientServiceProvider>(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::System.Collections.Generic.IEnumerable<global::StrawberryShake.IOperationRequestFactory>>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<ClientServiceProvider>(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::System.Collections.Generic.IEnumerable<global::StrawberryShake.IOperationResultDataFactory>>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<ClientServiceProvider>(sp))));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::WotBlitzStatisticsPro.Blazor.GraphQl.PlayerQuery>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<ClientServiceProvider>(sp)));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::WotBlitzStatisticsPro.Blazor.GraphQl.FindClansQuery>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<ClientServiceProvider>(sp)));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::WotBlitzStatisticsPro.Blazor.GraphQl.FindPlayersQuery>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<ClientServiceProvider>(sp)));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::WotBlitzStatisticsPro.Blazor.GraphQl.PlayerQuery>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<ClientServiceProvider>(sp)));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::WotBlitzStatisticsPro.Blazor.GraphQl.WotBlitzStatisticsProClient>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<ClientServiceProvider>(sp)));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::WotBlitzStatisticsPro.Blazor.GraphQl.IWotBlitzStatisticsProClient>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<ClientServiceProvider>(sp)));
return new global::StrawberryShake.ClientBuilder<global::WotBlitzStatisticsPro.Blazor.GraphQl.State.WotBlitzStatisticsProClientStoreAccessor>("WotBlitzStatisticsProClient", services, serviceCollection);
@@ -52,6 +52,13 @@ namespace Microsoft.Extensions.DependencyInjection
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.Serialization.ISerializer, global::StrawberryShake.Serialization.ByteArraySerializer>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.Serialization.ISerializer, global::StrawberryShake.Serialization.TimeSpanSerializer>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.Serialization.ISerializerResolver>(services, sp => new global::StrawberryShake.Serialization.SerializerResolver(global::System.Linq.Enumerable.Concat(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::System.Collections.Generic.IEnumerable<global::StrawberryShake.Serialization.ISerializer>>(parentServices), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::System.Collections.Generic.IEnumerable<global::StrawberryShake.Serialization.ISerializer>>(sp))));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IOperationResultDataFactory<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerResult>, global::WotBlitzStatisticsPro.Blazor.GraphQl.State.PlayerResultFactory>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IOperationResultDataFactory>(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.IOperationResultDataFactory<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerResult>>(sp));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IOperationRequestFactory>(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerQuery>(sp));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IOperationResultBuilder<global::System.Text.Json.JsonDocument, global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerResult>, global::WotBlitzStatisticsPro.Blazor.GraphQl.State.PlayerBuilder>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IOperationExecutor<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerResult>>(services, sp => new global::StrawberryShake.OperationExecutor<global::System.Text.Json.JsonDocument, global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerResult>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.Transport.Http.IHttpConnection>(sp), () => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.IOperationResultBuilder<global::System.Text.Json.JsonDocument, global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerResult>>(sp), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.IOperationStore>(sp), strategy));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::WotBlitzStatisticsPro.Blazor.GraphQl.PlayerQuery>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerQuery>(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::WotBlitzStatisticsPro.Blazor.GraphQl.PlayerQuery>(sp));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IOperationResultDataFactory<global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindClansResult>, global::WotBlitzStatisticsPro.Blazor.GraphQl.State.FindClansResultFactory>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IOperationResultDataFactory>(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.IOperationResultDataFactory<global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindClansResult>>(sp));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IOperationRequestFactory>(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindClansQuery>(sp));
@@ -66,13 +73,6 @@ namespace Microsoft.Extensions.DependencyInjection
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IOperationExecutor<global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindPlayersResult>>(services, sp => new global::StrawberryShake.OperationExecutor<global::System.Text.Json.JsonDocument, global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindPlayersResult>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.Transport.Http.IHttpConnection>(sp), () => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.IOperationResultBuilder<global::System.Text.Json.JsonDocument, global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindPlayersResult>>(sp), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.IOperationStore>(sp), strategy));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::WotBlitzStatisticsPro.Blazor.GraphQl.FindPlayersQuery>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindPlayersQuery>(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::WotBlitzStatisticsPro.Blazor.GraphQl.FindPlayersQuery>(sp));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IOperationResultDataFactory<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerResult>, global::WotBlitzStatisticsPro.Blazor.GraphQl.State.PlayerResultFactory>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IOperationResultDataFactory>(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.IOperationResultDataFactory<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerResult>>(sp));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IOperationRequestFactory>(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerQuery>(sp));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IOperationResultBuilder<global::System.Text.Json.JsonDocument, global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerResult>, global::WotBlitzStatisticsPro.Blazor.GraphQl.State.PlayerBuilder>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IOperationExecutor<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerResult>>(services, sp => new global::StrawberryShake.OperationExecutor<global::System.Text.Json.JsonDocument, global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerResult>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.Transport.Http.IHttpConnection>(sp), () => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.IOperationResultBuilder<global::System.Text.Json.JsonDocument, global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerResult>>(sp), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::StrawberryShake.IOperationStore>(sp), strategy));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::WotBlitzStatisticsPro.Blazor.GraphQl.PlayerQuery>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerQuery>(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::WotBlitzStatisticsPro.Blazor.GraphQl.PlayerQuery>(sp));
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::StrawberryShake.IEntityIdSerializer, global::WotBlitzStatisticsPro.Blazor.GraphQl.State.WotBlitzStatisticsProClientEntityIdFactory>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::WotBlitzStatisticsPro.Blazor.GraphQl.WotBlitzStatisticsProClient>(services);
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton<global::WotBlitzStatisticsPro.Blazor.GraphQl.IWotBlitzStatisticsProClient>(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<global::WotBlitzStatisticsPro.Blazor.GraphQl.WotBlitzStatisticsProClient>(sp));
@@ -9,10 +9,10 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public interface IWotBlitzStatisticsProClient
{
global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerQuery Player { get; }
global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindClansQuery FindClans { get; }
global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindPlayersQuery FindPlayers { get; }
global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerQuery Player { get; }
}
}
@@ -9,19 +9,19 @@ namespace WotBlitzStatisticsPro.Blazor.GraphQl
[global::System.CodeDom.Compiler.GeneratedCode("StrawberryShake", "11.2.2.0")]
public partial class WotBlitzStatisticsProClient : global::WotBlitzStatisticsPro.Blazor.GraphQl.IWotBlitzStatisticsProClient
{
private readonly global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerQuery _player;
private readonly global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindClansQuery _findClans;
private readonly global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindPlayersQuery _findPlayers;
private readonly global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerQuery _player;
public WotBlitzStatisticsProClient(global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindClansQuery findClans, global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindPlayersQuery findPlayers, global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerQuery player)
public WotBlitzStatisticsProClient(global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerQuery player, global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindClansQuery findClans, global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindPlayersQuery findPlayers)
{
_player = player ?? throw new global::System.ArgumentNullException(nameof(player));
_findClans = findClans ?? throw new global::System.ArgumentNullException(nameof(findClans));
_findPlayers = findPlayers ?? throw new global::System.ArgumentNullException(nameof(findPlayers));
_player = player ?? throw new global::System.ArgumentNullException(nameof(player));
}
public static global::System.String ClientName => "WotBlitzStatisticsProClient";
public global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerQuery Player => _player;
public global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindClansQuery FindClans => _findClans;
public global::WotBlitzStatisticsPro.Blazor.GraphQl.IFindPlayersQuery FindPlayers => _findPlayers;
public global::WotBlitzStatisticsPro.Blazor.GraphQl.IPlayerQuery Player => _player;
}
}
@@ -4,5 +4,10 @@
<div id="battlesByTankType" style="width: 33%; min-width: 300px; height:300px; margin-top: 10px;"></div>
<div id="winRateByTankType" style="width: 33%; min-width: 300px; height: 300px; margin-top: 10px; "></div>
<div id="avgDmgByTankType" style="width: 33%; min-width: 300px; height: 300px; margin-top: 10px; "></div>
</div>
<div class="chartsRow">
<div id="battlesByNation" style="width: 33%; min-width: 300px; height:500px; margin-top: 10px;"></div>
<div id="winRateByNation" style="width: 33%; min-width: 300px; height: 500px; margin-top: 10px; "></div>
<div id="avgDmgByNation" style="width: 33%; min-width: 300px; height: 500px; margin-top: 10px; "></div>
</div>
@*<div id="stacked" style="width:300px; height:500px; margin-top: 20px"></div>*@
@@ -23,6 +23,11 @@ namespace WotBlitzStatisticsPro.Blazor.Pages
await ChartsService.BuildBarChartBattlesByTankType("battlesByTankType", TanksList);
await ChartsService.BuildBarChartWinRatesByTankType("winRateByTankType", TanksList);
await ChartsService.BuildBarChartAvgDmgByTankType("avgDmgByTankType", TanksList);
await ChartsService.BuildBarChartBattlesByNation("battlesByNation", TanksList);
await ChartsService.BuildBarChartWinRatesByNation("winRateByNation", TanksList);
await ChartsService.BuildBarChartAvgDmgByNation("avgDmgByNation", TanksList);
//await ChartsService.BuildStackedBarChart("stacked");
}
}
@@ -123,12 +123,18 @@
<data name="Average XP" xml:space="preserve">
<value>Mittlere EP</value>
</data>
<data name="Avg damage by nation" xml:space="preserve">
<value>Mittlerer Schaden dem Nation</value>
</data>
<data name="Avg damage by tank types" xml:space="preserve">
<value>Mittlerer Schaden dem Panzertype</value>
</data>
<data name="Battles" xml:space="preserve">
<value>Gefechte</value>
</data>
<data name="Battles by nation" xml:space="preserve">
<value>Gefechte dem Nation</value>
</data>
<data name="Battles by tank types" xml:space="preserve">
<value>Gefechte dem Panzertype</value>
</data>
@@ -222,6 +228,9 @@
<data name="Win rate" xml:space="preserve">
<value>Sieg</value>
</data>
<data name="Win rate by nation" xml:space="preserve">
<value>Sieg dem Nation</value>
</data>
<data name="Win rate by tank types" xml:space="preserve">
<value>Panzertypensieg</value>
</data>
@@ -123,12 +123,18 @@
<data name="Average XP" xml:space="preserve">
<value>Средний опыт</value>
</data>
<data name="Avg damage by nation" xml:space="preserve">
<value>Средний урон по нациям</value>
</data>
<data name="Avg damage by tank types" xml:space="preserve">
<value>Средний урон по типу танка</value>
</data>
<data name="Battles" xml:space="preserve">
<value>Количество боёв</value>
</data>
<data name="Battles by nation" xml:space="preserve">
<value>Количество боёв по нациям</value>
</data>
<data name="Battles by tank types" xml:space="preserve">
<value>Количество боёв по типу танка</value>
</data>
@@ -222,6 +228,9 @@
<data name="Win rate" xml:space="preserve">
<value>Процент побед</value>
</data>
<data name="Win rate by nation" xml:space="preserve">
<value>Процент побед по нациям</value>
</data>
<data name="Win rate by tank types" xml:space="preserve">
<value>Процент побед по типу танка</value>
</data>
@@ -201,6 +201,289 @@ namespace WotBlitzStatisticsPro.Blazor.Services
await _jsRuntime.InvokeVoidAsync("eChartsInterop.BuildBarChartByTankType", elementId, _localize.GetString("Avg damage by tank types").Value, chartData);
}
public async Task BuildBarChartBattlesByNation(string elementId, IEnumerable<ITank> tanks)
{
var battlesCountByNation = new Dictionary<string, long>();
foreach (var tank in tanks)
{
if (string.IsNullOrEmpty(tank.TankNationId))
{
continue;
}
if (battlesCountByNation.ContainsKey(tank.TankNationId))
{
battlesCountByNation[tank.TankNationId] += tank.Battles;
}
else
{
battlesCountByNation.Add(tank.TankNationId, tank.Battles);
}
}
int chinaData = 0;
int euData = 0;
int franceData = 0;
int germanyData = 0;
int japanData = 0;
int otherData = 0;
int ukData = 0;
int usaData = 0;
int ussrData = 0;
if (battlesCountByNation.ContainsKey(Constants.CountryChina))
{
chinaData = Convert.ToInt32(battlesCountByNation[Constants.CountryChina]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryEuropean))
{
euData = Convert.ToInt32(battlesCountByNation[Constants.CountryEuropean]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryFrance))
{
franceData = Convert.ToInt32(battlesCountByNation[Constants.CountryFrance]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryGermany))
{
germanyData = Convert.ToInt32(battlesCountByNation[Constants.CountryGermany]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryJapan))
{
japanData = Convert.ToInt32(battlesCountByNation[Constants.CountryJapan]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryOther))
{
otherData = Convert.ToInt32(battlesCountByNation[Constants.CountryOther]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryUk))
{
ukData = Convert.ToInt32(battlesCountByNation[Constants.CountryUk]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryUsa))
{
usaData = Convert.ToInt32(battlesCountByNation[Constants.CountryUsa]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryUssr))
{
ussrData = Convert.ToInt32(battlesCountByNation[Constants.CountryUssr]);
}
var chartData = new[]
{
new {country = Constants.CountryChina, value = chinaData, color = "#9FE3CE"},
new {country = Constants.CountryEuropean, value = euData, color = "#9FE3CE"},
new {country = Constants.CountryFrance, value = franceData, color = "#9FE3CE"},
new {country = Constants.CountryGermany, value = germanyData, color = "#9FE3CE"},
new {country = Constants.CountryJapan, value = japanData, color = "#9FE3CE"},
new {country = Constants.CountryOther, value = otherData, color = "#9FE3CE"},
new {country = Constants.CountryUk, value = ukData, color = "#9FE3CE"},
new {country = Constants.CountryUsa, value = usaData, color = "#9FE3CE"},
new {country = Constants.CountryUssr, value = ussrData, color = "#9FE3CE"},
};
await _jsRuntime.InvokeVoidAsync("eChartsInterop.BuildBarChartByNation", elementId, _localize.GetString("Battles by nation").Value, chartData);
}
public async Task BuildBarChartWinRatesByNation(string elementId, IEnumerable<ITank> tanks)
{
var battlesCountByNation = new Dictionary<string, long>();
var winsCountByNation = new Dictionary<string, long>();
foreach (var tank in tanks)
{
if (string.IsNullOrEmpty(tank.TankNationId))
{
continue;
}
if (battlesCountByNation.ContainsKey(tank.TankNationId))
{
battlesCountByNation[tank.TankNationId] += tank.Battles;
}
else
{
battlesCountByNation.Add(tank.TankNationId, tank.Battles);
}
if (winsCountByNation.ContainsKey(tank.TankNationId))
{
winsCountByNation[tank.TankNationId] += tank.Wins;
}
else
{
winsCountByNation.Add(tank.TankNationId, tank.Wins);
}
}
int chinaData = 0;
int euData = 0;
int franceData = 0;
int germanyData = 0;
int japanData = 0;
int otherData = 0;
int ukData = 0;
int usaData = 0;
int ussrData = 0;
if (battlesCountByNation.ContainsKey(Constants.CountryChina))
{
chinaData = Convert.ToInt32(100 * winsCountByNation[Constants.CountryChina] /
battlesCountByNation[Constants.CountryChina]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryEuropean))
{
euData = Convert.ToInt32(100 * winsCountByNation[Constants.CountryEuropean] /
battlesCountByNation[Constants.CountryEuropean]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryFrance))
{
franceData = Convert.ToInt32(100 * winsCountByNation[Constants.CountryFrance] /
battlesCountByNation[Constants.CountryFrance]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryGermany))
{
germanyData = Convert.ToInt32(100 * winsCountByNation[Constants.CountryGermany] /
battlesCountByNation[Constants.CountryGermany]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryJapan))
{
japanData = Convert.ToInt32(100 * winsCountByNation[Constants.CountryJapan] /
battlesCountByNation[Constants.CountryJapan]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryOther))
{
otherData = Convert.ToInt32(100 * winsCountByNation[Constants.CountryOther] /
battlesCountByNation[Constants.CountryOther]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryUk))
{
ukData = Convert.ToInt32(100 * winsCountByNation[Constants.CountryUk] /
battlesCountByNation[Constants.CountryUk]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryUsa))
{
usaData = Convert.ToInt32(100 * winsCountByNation[Constants.CountryUsa] /
battlesCountByNation[Constants.CountryUsa]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryUssr))
{
ussrData = Convert.ToInt32(100 * winsCountByNation[Constants.CountryUssr] /
battlesCountByNation[Constants.CountryUssr]);
}
var chartData = new[]
{
new {country = Constants.CountryChina, value = chinaData, color = chinaData.ScaleColor()},
new {country = Constants.CountryEuropean, value = euData, color = euData.ScaleColor()},
new {country = Constants.CountryFrance, value = franceData, color = franceData.ScaleColor()},
new {country = Constants.CountryGermany, value = germanyData, color = germanyData.ScaleColor()},
new {country = Constants.CountryJapan, value = japanData, color = japanData.ScaleColor()},
new {country = Constants.CountryOther, value = otherData, color = otherData.ScaleColor()},
new {country = Constants.CountryUk, value = ukData, color = ukData.ScaleColor()},
new {country = Constants.CountryUsa, value = usaData, color = usaData.ScaleColor()},
new {country = Constants.CountryUssr, value = ussrData, color = ussrData.ScaleColor()},
};
await _jsRuntime.InvokeVoidAsync("eChartsInterop.BuildBarChartByNation", elementId, _localize.GetString("Win rate by nation").Value, chartData);
}
public async Task BuildBarChartAvgDmgByNation(string elementId, IEnumerable<ITank> tanks)
{
var battlesCountByNation = new Dictionary<string, long>();
var dmgCountByNation = new Dictionary<string, long>();
foreach (var tank in tanks)
{
if (string.IsNullOrEmpty(tank.TankNationId))
{
continue;
}
if (battlesCountByNation.ContainsKey(tank.TankNationId))
{
battlesCountByNation[tank.TankNationId] += tank.Battles;
}
else
{
battlesCountByNation.Add(tank.TankNationId, tank.Battles);
}
if (dmgCountByNation.ContainsKey(tank.TankNationId))
{
dmgCountByNation[tank.TankNationId] += tank.DamageDealt;
}
else
{
dmgCountByNation.Add(tank.TankNationId, tank.DamageDealt);
}
}
int chinaData = 0;
int euData = 0;
int franceData = 0;
int germanyData = 0;
int japanData = 0;
int otherData = 0;
int ukData = 0;
int usaData = 0;
int ussrData = 0;
if (battlesCountByNation.ContainsKey(Constants.CountryChina))
{
chinaData = Convert.ToInt32(dmgCountByNation[Constants.CountryChina] /
battlesCountByNation[Constants.CountryChina]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryEuropean))
{
euData = Convert.ToInt32(dmgCountByNation[Constants.CountryEuropean] /
battlesCountByNation[Constants.CountryEuropean]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryFrance))
{
franceData = Convert.ToInt32(dmgCountByNation[Constants.CountryFrance] /
battlesCountByNation[Constants.CountryFrance]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryGermany))
{
germanyData = Convert.ToInt32(dmgCountByNation[Constants.CountryGermany] /
battlesCountByNation[Constants.CountryGermany]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryJapan))
{
japanData = Convert.ToInt32(dmgCountByNation[Constants.CountryJapan] /
battlesCountByNation[Constants.CountryJapan]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryOther))
{
otherData = Convert.ToInt32(dmgCountByNation[Constants.CountryOther] /
battlesCountByNation[Constants.CountryOther]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryUk))
{
ukData = Convert.ToInt32(dmgCountByNation[Constants.CountryUk] /
battlesCountByNation[Constants.CountryUk]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryUsa))
{
usaData = Convert.ToInt32(dmgCountByNation[Constants.CountryUsa] /
battlesCountByNation[Constants.CountryUsa]);
}
if (battlesCountByNation.ContainsKey(Constants.CountryUssr))
{
ussrData = Convert.ToInt32(dmgCountByNation[Constants.CountryUssr] /
battlesCountByNation[Constants.CountryUssr]);
}
var chartData = new[]
{
new {country = Constants.CountryChina, value = chinaData, color = "#D98D8B"},
new {country = Constants.CountryEuropean, value = euData, color = "#D98D8B"},
new {country = Constants.CountryFrance, value = franceData, color = "#D98D8B"},
new {country = Constants.CountryGermany, value = germanyData, color = "#D98D8B"},
new {country = Constants.CountryJapan, value = japanData, color = "#D98D8B"},
new {country = Constants.CountryOther, value = otherData, color = "#D98D8B"},
new {country = Constants.CountryUk, value = ukData, color = "#D98D8B"},
new {country = Constants.CountryUsa, value = usaData, color = "#D98D8B"},
new {country = Constants.CountryUssr, value = ussrData, color = "#D98D8B"},
};
await _jsRuntime.InvokeVoidAsync("eChartsInterop.BuildBarChartByNation", elementId, _localize.GetString("Avg damage by nation").Value, chartData);
}
public async Task BuildStackedBarChart(string elementId)
{
await _jsRuntime.InvokeVoidAsync("eChartsInterop.BuildStackedBarChart", elementId);
@@ -9,6 +9,9 @@ namespace WotBlitzStatisticsPro.Blazor.Services
Task BuildBarChartBattlesByTankType(string elementId, IEnumerable<ITank> tanks);
Task BuildBarChartWinRatesByTankType(string elementId, IEnumerable<ITank> tanks);
Task BuildBarChartAvgDmgByTankType(string elementId, IEnumerable<ITank> tanks);
Task BuildBarChartBattlesByNation(string elementId, IEnumerable<ITank> tanks);
Task BuildBarChartWinRatesByNation(string elementId, IEnumerable<ITank> tanks);
Task BuildBarChartAvgDmgByNation(string elementId, IEnumerable<ITank> tanks);
Task BuildStackedBarChart(string elementId);
}
}
@@ -129,6 +129,216 @@ eChartsInterop.BuildBarChartByTankType = function (elementId, chartTitle, chartD
});
};
eChartsInterop.BuildBarChartByNation = function (elementId, chartTitle, chartData) {
var flags = {
'china': '/flags/china-round.png',
'european': '/flags/eu-round.png',
'france': '/flags/france-round.png',
'germany': '/flags/germany-round.png',
'japan': '/flags/japan-round.png',
'other': '/flags/other-round.png',
'uk': '/flags/uk-round.png',
'usa': '/flags/usa-round.png',
'ussr': '/flags/ussr-round.png',
};
var seriesLabel = {
show: true
}
// based on prepared DOM, initialize echarts instance
var myChart = echarts.init(document.getElementById(elementId), 'dark');
var chinaData = chartData.find(d => d.country === 'china');
var euData = chartData.find(d => d.country === 'european');
var franceData = chartData.find(d => d.country === 'france');
var germanyData = chartData.find(d => d.country === 'germany');
var japanData = chartData.find(d => d.country === 'japan');
var otherData = chartData.find(d => d.country === 'other');
var ukData = chartData.find(d => d.country === 'uk');
var usaData = chartData.find(d => d.country === 'usa');
var ussrData = chartData.find(d => d.country === 'ussr');
// specify chart configuration item and data
var option = {
title: {
text: chartTitle
},
toolbox: {
show: true,
feature: {
saveAsImage: {}
}
},
xAxis: {
type: 'value',
name: '',
axisLabel: {
formatter: '{value}'
}
},
yAxis: {
type: 'category',
data: ['other', 'usa', 'germany', 'ussr', 'uk', 'japan', 'china', 'france', 'european'],
axisTick: {
alignWithLabel: true
},
axisLabel: {
formatter: function (value) {
return '{' + value + '| }';
},
rich: {
value: {
lineHeight: 10,
align: 'center'
},
other: {
height: 20,
width: 20,
align: 'center',
backgroundColor: {
image: flags.other
}
},
usa: {
height: 20,
width: 20,
align: 'center',
backgroundColor: {
image: flags.usa
}
},
germany: {
height: 20,
width: 20,
align: 'center',
backgroundColor: {
image: flags.germany
}
},
ussr: {
height: 20,
width: 20,
align: 'center',
backgroundColor: {
image: flags.ussr
}
},
uk: {
height: 20,
width: 20,
align: 'center',
backgroundColor: {
image: flags.uk
}
},
japan: {
height: 20,
width: 20,
align: 'center',
backgroundColor: {
image: flags.japan
}
},
china: {
height: 20,
width: 20,
align: 'center',
backgroundColor: {
image: flags.china
}
},
france: {
height: 20,
width: 20,
align: 'center',
backgroundColor: {
image: flags.france
}
},
european: {
height: 20,
width: 20,
align: 'center',
backgroundColor: {
image: flags.european
}
}
}
}
},
series: [
{
type: 'bar',
label: seriesLabel,
barWidth: '30px',
data: [
{
value: otherData.value,
itemStyle: {
color: otherData.color
}
},
{
value: usaData.value,
itemStyle: {
color: usaData.color
}
},
{
value: germanyData.value,
itemStyle: {
color: germanyData.color
}
},
{
value: ussrData.value,
itemStyle: {
color: ussrData.color
}
},
{
value: ukData.value,
itemStyle: {
color: ukData.color
}
},
{
value: japanData.value,
itemStyle: {
color: japanData.color
}
},
{
value: chinaData.value,
itemStyle: {
color: chinaData.color
}
},
{
value: franceData.value,
itemStyle: {
color: franceData.color
}
},
{
value: euData.value,
itemStyle: {
color: euData.color
}
}
]
}]
};
// use configuration item and data specified to show chart
myChart.setOption(option);
window.addEventListener('resize',
function() {
myChart.resize();
});
};
eChartsInterop.BuildStackedBarChart = function (elementId) {
var tankTypes = {
'HeavyTank': '/tank-type/vehicle.class.heavy.small.scale-200.png',
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB