mirror of
https://github.com/DrMboga/WotBlitzStatisticsBlazor.git
synced 2026-10-21 02:17:20 +02:00
feat: tanks tree new algorithm (with some bugs)
This commit is contained in:
1 parent
a9453a4370
commit
66854c0aea
3 files changed
+84
-13
No files matched your search
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using WotBlitzStatisticsPro.Blazor.GraphQl;
|
using WotBlitzStatisticsPro.Blazor.GraphQl;
|
||||||
|
|
||||||
namespace WotBlitzStatisticsPro.Blazor.Model
|
namespace WotBlitzStatisticsPro.Blazor.Model
|
||||||
@@ -32,6 +33,8 @@ namespace WotBlitzStatisticsPro.Blazor.Model
|
|||||||
public DateTimeOffset? LastBattleTime { get; set; }
|
public DateTimeOffset? LastBattleTime { get; set; }
|
||||||
|
|
||||||
public Decimal PriceCredit { get; set; }
|
public Decimal PriceCredit { get; set; }
|
||||||
|
|
||||||
|
public List<TankTreeRowMap>? NextRows { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
namespace WotBlitzStatisticsPro.Blazor.Model
|
||||||
|
{
|
||||||
|
public record TankTreeRowMap(long TankId, int Row);
|
||||||
|
}
|
||||||
@@ -79,20 +79,29 @@ namespace WotBlitzStatisticsPro.Blazor.Pages
|
|||||||
{
|
{
|
||||||
TreeItems.Clear();
|
TreeItems.Clear();
|
||||||
var vehiclesTree = VehiclesLibrary.Where(v => v.IsPremium == false).ToList();
|
var vehiclesTree = VehiclesLibrary.Where(v => v.IsPremium == false).ToList();
|
||||||
// for (int tier = 1; tier < 11; tier++)
|
for (int tier = 1; tier < 11; tier++)
|
||||||
// {
|
{
|
||||||
// var vehiclesByTier = vehiclesTree.Where(v => v.Tier == tier).ToList();
|
var vehiclesByTier = vehiclesTree.Where(v => v.Tier == tier).ToList();
|
||||||
// int row = 0;
|
int row = 0;
|
||||||
// foreach (var vehicleFromDictionary in vehiclesByTier)
|
// TODO: Order
|
||||||
// {
|
foreach (var vehicleFromDictionary in vehiclesByTier)
|
||||||
// var treeItem = BuildNonPremTreeItem(vehicleFromDictionary, row);
|
{
|
||||||
// TreeItems.Add(treeItem);
|
// Find previous map to figure out the row
|
||||||
// row++;
|
int currentRow = FindRowFromPreviousTierMapping(vehicleFromDictionary, row);
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
var firstTank = vehiclesTree.First(v => v.Tier == 1);
|
var treeItem = BuildNonPremTreeItem(vehicleFromDictionary, currentRow);
|
||||||
TreeItems.AddRange(BuildTree(firstTank, 0, vehiclesTree));
|
|
||||||
|
// 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);
|
int maxNonPremTreeRow = GetMaxRowNumber(TreeItems);
|
||||||
|
|
||||||
// TODO: build matrix and connections
|
// TODO: build matrix and connections
|
||||||
@@ -132,6 +141,61 @@ namespace WotBlitzStatisticsPro.Blazor.Pages
|
|||||||
FrameHeigth = maxPremsCount * (CardHeigth + 20) + 20;
|
FrameHeigth = maxPremsCount * (CardHeigth + 20) + 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<TankTreeRowMap>? BuildNextTanksRowMapping(IDictionary_Vehicles vehicleFromDictionary, int currentRow)
|
||||||
|
{
|
||||||
|
List<TankTreeRowMap>? nextRowsMap = null;
|
||||||
|
|
||||||
|
if (vehicleFromDictionary.NexTanksInTree != null && vehicleFromDictionary.NexTanksInTree.Count > 0)
|
||||||
|
{
|
||||||
|
nextRowsMap = new List<TankTreeRowMap>();
|
||||||
|
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<TankTreeItem> BuildTree(IDictionary_Vehicles firstTank, int rowNumber, List<IDictionary_Vehicles> vehiclesTree)
|
private List<TankTreeItem> BuildTree(IDictionary_Vehicles firstTank, int rowNumber, List<IDictionary_Vehicles> vehiclesTree)
|
||||||
{
|
{
|
||||||
var result = new List<TankTreeItem>();
|
var result = new List<TankTreeItem>();
|
||||||
|
|||||||
Reference in new issue
Block a user