From dd4dedd7878076b163793568d87059e8d046db9a Mon Sep 17 00:00:00 2001 From: Mikhail Shabanov Date: Sat, 6 Aug 2022 17:24:55 +0200 Subject: [PATCH] feat: Real cards in a tree --- .../Model/TankTreeItem.cs | 37 +++++ .../Pages/PlayerInfoTanksTree.razor | 153 +++++++++--------- .../Pages/PlayerInfoTanksTreeBase.cs | 69 +++++++- 3 files changed, 181 insertions(+), 78 deletions(-) create mode 100644 WotBlitzStatisticsPro.Blazor/Model/TankTreeItem.cs diff --git a/WotBlitzStatisticsPro.Blazor/Model/TankTreeItem.cs b/WotBlitzStatisticsPro.Blazor/Model/TankTreeItem.cs new file mode 100644 index 0000000..4676e14 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Model/TankTreeItem.cs @@ -0,0 +1,37 @@ +using System; +using WotBlitzStatisticsPro.Blazor.GraphQl; + +namespace WotBlitzStatisticsPro.Blazor.Model +{ + public class TankTreeItem + { + public long TankId { get; set; } + + public int Tier { get; set; } + + public int Row { get; set; } + + public string TankTypeId { get; set; } + + public bool IsPremium { get; set; } + + public bool IsResearched { get; set; } + + public string PreviewImage { get; set; } + + public string Name { get; set; } + + public MarkOfMastery? MarkOfMastery { get; set; } + + public decimal? WinRate { get; set; } + + public decimal? AvgDamage { get; set; } + + public long? Battles { get; set; } + + public DateTimeOffset? LastBattleTime { get; set; } + + public Decimal PriceCredit { get; set; } + + } +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTree.razor b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTree.razor index 1cac6b4..57d92b8 100644 --- a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTree.razor +++ b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTree.razor @@ -1,4 +1,5 @@ @using WotBlitzStatisticsPro.Blazor.Helpers +@using System.Linq @inherits PlayerInfoTanksTreeBase;
} - @for (int i = 0; i < 3; i++) + @if (TreeItems != null) { - - - - - t.Tier == tier).OrderBy(t => t.Row).ToList()) + { + + - - - - - - - @TanksList.ToArray()[i].Tier.RomanNumber() - - - - - - @TanksList.ToArray()[i].Name - - - - @if (i == 0 || i == 2) - { + height="@CardHeigth"> - - - - - - @(TanksList.ToArray()[i].WinRate.ToString("N0"))% + + + + + + + + + @tank.Tier.RomanNumber() - - - - - @TanksList.ToArray()[i].AvgDamage.ToString("N0") - - - - - @TanksList.ToArray()[i].Battles.ToString("N0") - - - - - @TanksList.ToArray()[i].LastBattleTime.ToString("d") + + + + + @tank.Name + + + @if (tank.IsResearched && tank.MarkOfMastery.HasValue && tank.WinRate.HasValue && tank.AvgDamage.HasValue && tank.Battles.HasValue && tank.LastBattleTime.HasValue) + { + + + + + + + @(tank.WinRate.Value.ToString("N0"))% + + + + + + @tank.AvgDamage.Value.ToString("N0") + + + + + @tank.Battles.Value.ToString("N0") + + + + + @tank.LastBattleTime.Value.ToString("d") + + + } + + @if (!tank.IsResearched) + { + + + + + @((tank.PriceCredit / 1000).ToString("N0")) K + + + } - } - - @if (i == 1) - { - - - - - 203.5 K - - - - - 8 500 K - - - } - - + + } + } }
diff --git a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs index 261291b..cff9180 100644 --- a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs +++ b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs @@ -41,6 +41,10 @@ namespace WotBlitzStatisticsPro.Blazor.Pages public int CardWidth { get; } = 200; public int CardHeigth { get; } = 120; + public List TreeItems { get; set; } = new(); + + public string SelectedNation { get; set; } = "germany"; + public string FrameStyle { get @@ -56,8 +60,8 @@ namespace WotBlitzStatisticsPro.Blazor.Pages // TODO: Move it to the Nation selector handler try { - string nationId = "germany"; - VehiclesLibrary = await GraphQlBackendService.GetVehiclesByNation(nationId); + VehiclesLibrary = await GraphQlBackendService.GetVehiclesByNation(SelectedNation); + BuildTree(); } catch (System.Exception e) { @@ -71,5 +75,66 @@ namespace WotBlitzStatisticsPro.Blazor.Pages { return SvgHelper.CalculateTextBlockSize(text, fontFace, fontSize).Width; } + + private void BuildTree() + { + TreeItems.Clear(); + var vehiclesTree = VehiclesLibrary.Where(v => v.IsPremium == false).ToList(); + for (int tier = 1; tier < 11; tier++) + { + var vehiclesByTier = vehiclesTree.Where(v => v.Tier == tier).ToList(); + int row = 0; + foreach (var vehicleFromDictionary in vehiclesByTier) + { + var treeItem = new TankTreeItem + { + Tier = tier, + TankId = vehicleFromDictionary.TankId, + Name = vehicleFromDictionary.Name, + PriceCredit = vehicleFromDictionary.PriceCredit, + PreviewImage = vehicleFromDictionary.PreviewImage, + TankTypeId = vehicleFromDictionary.TypeId, + IsPremium = false, + Row = row + }; + var researched = TanksList.FirstOrDefault(t => t.TankId == treeItem.TankId); + treeItem.IsResearched = researched != null; + if (researched != null) + { + treeItem.MarkOfMastery = researched.MarkOfMastery; + treeItem.WinRate = researched.WinRate; + treeItem.AvgDamage = researched.AvgDamage; + treeItem.Battles = researched.Battles; + treeItem.LastBattleTime = researched.LastBattleTime; + } + + TreeItems.Add(treeItem); + row++; + } + } + // TODO: build matrix and connections + + // Adding prem tanks + foreach (var prem in TanksList.Where(t => t.IsPremium && t.TankNationId == SelectedNation)) + { + int row = TreeItems.Count(i => i.Tier == prem.Tier) + 1; + TreeItems.Add(new TankTreeItem + { + Tier = prem.Tier, + TankId = prem.TankId, + Name = prem.Name, + PreviewImage = prem.PreviewImage, + TankTypeId = prem.TankTypeId, + IsPremium = true, + MarkOfMastery = prem.MarkOfMastery, + WinRate = prem.WinRate, + AvgDamage = prem.AvgDamage, + Battles = prem.Battles, + LastBattleTime = prem.LastBattleTime, + IsResearched = true, + Row = row + }); + } + } } }