Change deck analytics bars to be more meaningful by using the highest value instead of the total sum as the ceiling.

This commit is contained in:
Lukas Brübach 2025-03-02 00:40:53 +01:00
parent ed0f09b7fd
commit 8a47412db2
3 changed files with 24 additions and 11 deletions

View file

@ -50,9 +50,11 @@ void ManaBaseWidget::updateDisplay()
delete item; delete item;
} }
int totalSum = 0; int highestEntry = 0;
for (auto entry : manaBaseMap) { for (auto entry : manaBaseMap) {
totalSum += entry; if (entry > highestEntry) {
highestEntry = entry;
}
} }
// Define color mapping for mana types // Define color mapping for mana types
@ -66,7 +68,7 @@ void ManaBaseWidget::updateDisplay()
for (auto manaColor : manaBaseMap.keys()) { for (auto manaColor : manaBaseMap.keys()) {
QColor barColor = manaColors.contains(manaColor) ? manaColors[manaColor] : Qt::gray; QColor barColor = manaColors.contains(manaColor) ? manaColors[manaColor] : Qt::gray;
BarWidget *barWidget = new BarWidget(QString(manaColor), manaBaseMap[manaColor], totalSum, barColor, this); BarWidget *barWidget = new BarWidget(QString(manaColor), manaBaseMap[manaColor], highestEntry, barColor, this);
barLayout->addWidget(barWidget); barLayout->addWidget(barWidget);
} }

View file

@ -77,9 +77,11 @@ void ManaCurveWidget::updateDisplay()
} }
} }
int totalSum = 0; int highestEntry = 0;
for (const auto &entry : manaCurveMap) { for (const auto &entry : manaCurveMap) {
totalSum += entry.second; if (entry.second > highestEntry) {
highestEntry = entry.second;
}
} }
// Convert unordered_map to ordered map to ensure sorting by CMC // Convert unordered_map to ordered map to ensure sorting by CMC
@ -88,7 +90,7 @@ void ManaCurveWidget::updateDisplay()
// Add new widgets to the layout in sorted order // Add new widgets to the layout in sorted order
for (const auto &entry : sortedManaCurve) { for (const auto &entry : sortedManaCurve) {
BarWidget *barWidget = BarWidget *barWidget =
new BarWidget(QString::number(entry.first), entry.second, totalSum, QColor(11, 11, 11), this); new BarWidget(QString::number(entry.first), entry.second, highestEntry, QColor(11, 11, 11), this);
barLayout->addWidget(barWidget); barLayout->addWidget(barWidget);
} }

View file

@ -77,9 +77,11 @@ void ManaDevotionWidget::updateDisplay()
delete item; delete item;
} }
int totalSum = 0; int highestEntry = 0;
for (auto entry : manaDevotionMap) { for (auto entry : manaDevotionMap) {
totalSum += entry.second; if (highestEntry < entry.second) {
highestEntry = entry.second;
}
} }
// Define color mapping for devotion bars // Define color mapping for devotion bars
@ -89,14 +91,13 @@ void ManaDevotionWidget::updateDisplay()
for (auto entry : manaDevotionMap) { for (auto entry : manaDevotionMap) {
QColor barColor = manaColors.count(entry.first) ? manaColors[entry.first] : Qt::gray; QColor barColor = manaColors.count(entry.first) ? manaColors[entry.first] : Qt::gray;
BarWidget *barWidget = new BarWidget(QString(entry.first), entry.second, totalSum, barColor, this); BarWidget *barWidget = new BarWidget(QString(entry.first), entry.second, highestEntry, barColor, this);
barLayout->addWidget(barWidget); barLayout->addWidget(barWidget);
} }
update(); // Update the widget display update(); // Update the widget display
} }
// Function to count mana symbols W, U, B, R, G in the input string
std::unordered_map<char, int> ManaDevotionWidget::countManaSymbols(const QString &manaString) std::unordered_map<char, int> ManaDevotionWidget::countManaSymbols(const QString &manaString)
{ {
std::unordered_map<char, int> manaCounts = {{'W', 0}, {'U', 0}, {'B', 0}, {'R', 0}, {'G', 0}}; std::unordered_map<char, int> manaCounts = {{'W', 0}, {'U', 0}, {'B', 0}, {'R', 0}, {'G', 0}};
@ -114,15 +115,23 @@ std::unordered_map<char, int> ManaDevotionWidget::countManaSymbols(const QString
char mana2 = manaString[i].toLatin1(); char mana2 = manaString[i].toLatin1();
manaCounts[mana1]++; manaCounts[mana1]++;
manaCounts[mana2]++; manaCounts[mana2]++;
} else {
// Handle cases like "{W/}" where second part is invalid
manaCounts[mana1]++;
} }
} else { } else {
manaCounts[mana1]++; manaCounts[mana1]++;
} }
} }
// Ensure we always skip to the closing '}'
while (i < len && manaString[i] != '}') { while (i < len && manaString[i] != '}') {
++i; // Skip to closing '}' ++i;
} }
} }
// Check if the character is a standalone mana symbol (not inside {})
else if (manaCounts.find(manaString[i].toLatin1()) != manaCounts.end()) {
manaCounts[manaString[i].toLatin1()]++;
}
} }
return manaCounts; return manaCounts;