mirror of
https://github.com/DrMboga/WotBlitzStatisticsBlazor.git
synced 2026-10-21 02:17:20 +02:00
chore: tank tree algorithm changed
This commit is contained in:
1 parent
d1dbceb04b
commit
a9453a4370
1 file changed
+92
-31
@@ -68,7 +68,6 @@ namespace WotBlitzStatisticsPro.Blazor.Pages
|
|||||||
Notifications.ReportError("Can not get data from backend", e.Message);
|
Notifications.ReportError("Can not get data from backend", e.Message);
|
||||||
}
|
}
|
||||||
|
|
||||||
FrameHeigth = screenHeight + 390;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int GetTextWidth(string text, string fontFace, int fontSize)
|
public int GetTextWidth(string text, string fontFace, int fontSize)
|
||||||
@@ -80,47 +79,94 @@ 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)
|
// foreach (var vehicleFromDictionary in vehiclesByTier)
|
||||||
{
|
// {
|
||||||
var treeItem = BuildNonPremTreeItem(tier, vehicleFromDictionary, row);
|
// var treeItem = BuildNonPremTreeItem(vehicleFromDictionary, row);
|
||||||
TreeItems.Add(treeItem);
|
// TreeItems.Add(treeItem);
|
||||||
row++;
|
// row++;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
var firstTank = vehiclesTree.First(v => v.Tier == 1);
|
||||||
|
TreeItems.AddRange(BuildTree(firstTank, 0, vehiclesTree));
|
||||||
|
int maxNonPremTreeRow = GetMaxRowNumber(TreeItems);
|
||||||
|
|
||||||
// TODO: build matrix and connections
|
// TODO: build matrix and connections
|
||||||
|
|
||||||
// Adding prem tanks
|
// Adding prem tanks
|
||||||
foreach (var prem in TanksList.Where(t => t.IsPremium && t.TankNationId == SelectedNation))
|
var premTanks = TanksList.Where(t => t.IsPremium && t.TankNationId == SelectedNation).ToList();
|
||||||
|
int maxPremsCount = maxNonPremTreeRow;
|
||||||
|
foreach (var premTier in premTanks.Select(b => b.Tier).Distinct())
|
||||||
{
|
{
|
||||||
int row = TreeItems.Count(i => i.Tier == prem.Tier) + 1;
|
int row = maxNonPremTreeRow + 1;
|
||||||
TreeItems.Add(new TankTreeItem
|
foreach (var prem in premTanks.Where(t => t.Tier == premTier))
|
||||||
{
|
{
|
||||||
Tier = prem.Tier,
|
TreeItems.Add(new TankTreeItem
|
||||||
TankId = prem.TankId,
|
{
|
||||||
Name = prem.Name,
|
Tier = prem.Tier,
|
||||||
PreviewImage = prem.PreviewImage,
|
TankId = prem.TankId,
|
||||||
TankTypeId = prem.TankTypeId,
|
Name = prem.Name,
|
||||||
IsPremium = true,
|
PreviewImage = prem.PreviewImage,
|
||||||
MarkOfMastery = prem.MarkOfMastery,
|
TankTypeId = prem.TankTypeId,
|
||||||
WinRate = prem.WinRate,
|
IsPremium = true,
|
||||||
AvgDamage = prem.AvgDamage,
|
MarkOfMastery = prem.MarkOfMastery,
|
||||||
Battles = prem.Battles,
|
WinRate = prem.WinRate,
|
||||||
LastBattleTime = prem.LastBattleTime,
|
AvgDamage = prem.AvgDamage,
|
||||||
IsResearched = true,
|
Battles = prem.Battles,
|
||||||
Row = row
|
LastBattleTime = prem.LastBattleTime,
|
||||||
});
|
IsResearched = true,
|
||||||
|
Row = row
|
||||||
|
});
|
||||||
|
row++;
|
||||||
|
if (row > maxPremsCount)
|
||||||
|
{
|
||||||
|
maxPremsCount = row;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FrameHeigth = maxPremsCount * (CardHeigth + 20) + 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
private TankTreeItem BuildNonPremTreeItem(int tier, IDictionary_Vehicles vehicleFromDictionary, int row)
|
private List<TankTreeItem> BuildTree(IDictionary_Vehicles firstTank, int rowNumber, List<IDictionary_Vehicles> vehiclesTree)
|
||||||
|
{
|
||||||
|
var result = new List<TankTreeItem>();
|
||||||
|
result.Add(BuildNonPremTreeItem(firstTank, rowNumber));
|
||||||
|
|
||||||
|
var nextTierTanks = vehiclesTree.Where(
|
||||||
|
v => firstTank.NexTanksInTree != null && firstTank.NexTanksInTree.Contains(v.TankId)).ToList();
|
||||||
|
|
||||||
|
if (nextTierTanks.Count == 1)
|
||||||
|
{
|
||||||
|
result.AddRange(BuildTree(nextTierTanks[0], rowNumber, vehiclesTree));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If more than one, sort them AT first, Heavy, Middle and light
|
||||||
|
int nextRow = rowNumber;
|
||||||
|
string[] tankTypes = { "AT-SPG", "heavyTank", "mediumTank", "lightTank" };
|
||||||
|
foreach (var tankType in tankTypes)
|
||||||
|
{
|
||||||
|
foreach (var nextTierTank in nextTierTanks.Where(t => t.TypeId == tankType))
|
||||||
|
{
|
||||||
|
var branch = BuildTree(nextTierTank, nextRow, vehiclesTree);
|
||||||
|
result.AddRange(branch);
|
||||||
|
nextRow += GetMaxRowNumber(branch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TankTreeItem BuildNonPremTreeItem(IDictionary_Vehicles vehicleFromDictionary, int row)
|
||||||
{
|
{
|
||||||
var treeItem = new TankTreeItem
|
var treeItem = new TankTreeItem
|
||||||
{
|
{
|
||||||
Tier = tier,
|
Tier = vehicleFromDictionary.Tier,
|
||||||
TankId = vehicleFromDictionary.TankId,
|
TankId = vehicleFromDictionary.TankId,
|
||||||
Name = vehicleFromDictionary.Name,
|
Name = vehicleFromDictionary.Name,
|
||||||
PriceCredit = vehicleFromDictionary.PriceCredit,
|
PriceCredit = vehicleFromDictionary.PriceCredit,
|
||||||
@@ -142,5 +188,20 @@ namespace WotBlitzStatisticsPro.Blazor.Pages
|
|||||||
|
|
||||||
return treeItem;
|
return treeItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int GetMaxRowNumber(List<TankTreeItem> branch)
|
||||||
|
{
|
||||||
|
int maxRowsCount = 0;
|
||||||
|
foreach (var tier in branch.Select(b => b.Tier).Distinct())
|
||||||
|
{
|
||||||
|
int tierTanksCount = branch.Count(t => t.Tier == tier);
|
||||||
|
if (tierTanksCount > maxRowsCount)
|
||||||
|
{
|
||||||
|
maxRowsCount = tierTanksCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return maxRowsCount;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user