diff --git a/WotBlitzStatisticsPro.Blazor/Model/TankTreeItem.cs b/WotBlitzStatisticsPro.Blazor/Model/TankTreeItem.cs index 4676e14..30e548e 100644 --- a/WotBlitzStatisticsPro.Blazor/Model/TankTreeItem.cs +++ b/WotBlitzStatisticsPro.Blazor/Model/TankTreeItem.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using WotBlitzStatisticsPro.Blazor.GraphQl; namespace WotBlitzStatisticsPro.Blazor.Model @@ -32,6 +33,8 @@ namespace WotBlitzStatisticsPro.Blazor.Model public DateTimeOffset? LastBattleTime { get; set; } public Decimal PriceCredit { get; set; } + + public List? NextRows { get; set; } } } \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Model/TankTreeRowMap.cs b/WotBlitzStatisticsPro.Blazor/Model/TankTreeRowMap.cs new file mode 100644 index 0000000..8a6a477 --- /dev/null +++ b/WotBlitzStatisticsPro.Blazor/Model/TankTreeRowMap.cs @@ -0,0 +1,4 @@ +namespace WotBlitzStatisticsPro.Blazor.Model +{ + public record TankTreeRowMap(long TankId, int Row); +} \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs index 40efd70..1da9e96 100644 --- a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs +++ b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs @@ -79,20 +79,29 @@ namespace WotBlitzStatisticsPro.Blazor.Pages { 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 = BuildNonPremTreeItem(vehicleFromDictionary, row); - // TreeItems.Add(treeItem); - // row++; - // } - // } + for (int tier = 1; tier < 11; tier++) + { + var vehiclesByTier = vehiclesTree.Where(v => v.Tier == tier).ToList(); + int row = 0; + // TODO: Order + foreach (var vehicleFromDictionary in vehiclesByTier) + { + // Find previous map to figure out the row + int currentRow = FindRowFromPreviousTierMapping(vehicleFromDictionary, row); - var firstTank = vehiclesTree.First(v => v.Tier == 1); - TreeItems.AddRange(BuildTree(firstTank, 0, vehiclesTree)); + var treeItem = BuildNonPremTreeItem(vehicleFromDictionary, currentRow); + + // Map next tier tanks by rows + treeItem.NextRows = BuildNextTanksRowMapping(vehicleFromDictionary, currentRow); + + TreeItems.Add(treeItem); + row++; + } + } + + // var firstTank = vehiclesTree.First(v => v.Tier == 1); + // TreeItems.AddRange(BuildTree(firstTank, 0, vehiclesTree)); + int maxNonPremTreeRow = GetMaxRowNumber(TreeItems); // TODO: build matrix and connections @@ -132,6 +141,61 @@ namespace WotBlitzStatisticsPro.Blazor.Pages FrameHeigth = maxPremsCount * (CardHeigth + 20) + 20; } + private List? BuildNextTanksRowMapping(IDictionary_Vehicles vehicleFromDictionary, int currentRow) + { + List? nextRowsMap = null; + + if (vehicleFromDictionary.NexTanksInTree != null && vehicleFromDictionary.NexTanksInTree.Count > 0) + { + nextRowsMap = new List(); + if (vehicleFromDictionary.NexTanksInTree.Count == 1) + { + nextRowsMap.Add(new TankTreeRowMap(vehicleFromDictionary.NexTanksInTree[0], currentRow)); + } + else + { + // If more than one, sort them AT first, Heavy, Middle and light + int nextRow = currentRow; + string[] tankTypes = { "AT-SPG", "heavyTank", "mediumTank", "lightTank" }; + var nextTanksTypes = VehiclesLibrary + .Where(v => vehicleFromDictionary.NexTanksInTree.Contains(v.TankId)) + .Select(v => new { v.TankId, TankType = v.TypeId }) + .ToList(); + foreach (var tankType in tankTypes) + { + foreach (var nextTierTank in nextTanksTypes.Where(t => t.TankType == tankType)) + { + nextRowsMap.Add(new TankTreeRowMap(nextTierTank.TankId, nextRow)); + nextRow++; + } + } + } + } + + return nextRowsMap; + } + + private int FindRowFromPreviousTierMapping(IDictionary_Vehicles vehicleFromDictionary, int currentRow) + { + var previousTierTanks = TreeItems.Where(t => t.Tier == vehicleFromDictionary.Tier - 1).ToList(); + foreach (var previousTierTank in previousTierTanks) + { + if (previousTierTank.NextRows != null) + { + var rowMap = + previousTierTank.NextRows.FirstOrDefault(p => p.TankId == vehicleFromDictionary.TankId); + if (rowMap != null) + { + currentRow = rowMap.Row; + break; + } + } + } + + return currentRow; + } + + [Obsolete] private List BuildTree(IDictionary_Vehicles firstTank, int rowNumber, List vehiclesTree) { var result = new List();