mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-04-27 07:48:01 -07:00
Analyze deck on tappedout Fix small bug in deckstats interface
This commit is contained in:
parent
680277ad6a
commit
7f28a7e844
10 changed files with 310 additions and 21 deletions
|
|
@ -3,6 +3,8 @@
|
|||
#include <QDebug>
|
||||
#include "deck_loader.h"
|
||||
#include "decklist.h"
|
||||
#include "carddatabase.h"
|
||||
#include "main.h"
|
||||
|
||||
const QStringList DeckLoader::fileNameFilters = QStringList()
|
||||
<< QObject::tr("Common deck formats (*.cod *.dec *.txt *.mwDeck)")
|
||||
|
|
@ -108,3 +110,89 @@ DeckLoader::FileFormat DeckLoader::getFormatFromName(const QString &fileName)
|
|||
}
|
||||
return PlainTextFormat;
|
||||
}
|
||||
|
||||
bool DeckLoader::saveToStream_Plain(QTextStream &out)
|
||||
{
|
||||
saveToStream_DeckHeader(out);
|
||||
|
||||
// loop zones
|
||||
for (int i = 0; i < getRoot()->size(); i++) {
|
||||
const InnerDecklistNode *zoneNode =
|
||||
dynamic_cast<InnerDecklistNode *>(getRoot()->at(i));
|
||||
|
||||
saveToStream_DeckZone(out, zoneNode);
|
||||
|
||||
// end of zone
|
||||
out << "\n";
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void DeckLoader::saveToStream_DeckHeader(QTextStream &out)
|
||||
{
|
||||
if(!getName().isEmpty())
|
||||
out << "// " << getName() << "\n\n";
|
||||
if(!getComments().isEmpty())
|
||||
{
|
||||
QStringList commentRows = getComments().split(QRegExp("\n|\r\n|\r"));
|
||||
foreach(QString row, commentRows)
|
||||
out << "// " << row << "\n";
|
||||
out << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
void DeckLoader::saveToStream_DeckZone(QTextStream &out, const InnerDecklistNode *zoneNode)
|
||||
{
|
||||
// group cards by card type and count the subtotals
|
||||
QMultiMap<QString, DecklistCardNode*> cardsByType;
|
||||
QMap<QString, int> cardTotalByType;
|
||||
int cardTotal = 0;
|
||||
|
||||
for (int j = 0; j < zoneNode->size(); j++) {
|
||||
DecklistCardNode *card =
|
||||
dynamic_cast<DecklistCardNode *>(
|
||||
zoneNode->at(j)
|
||||
);
|
||||
|
||||
CardInfo *info = db->getCard(card->getName());
|
||||
QString cardType = info ? info->getMainCardType() : "unknown";
|
||||
|
||||
cardsByType.insert(cardType, card);
|
||||
|
||||
if(cardTotalByType.contains(cardType))
|
||||
cardTotalByType[cardType] += card->getNumber();
|
||||
else
|
||||
cardTotalByType[cardType] = card->getNumber();
|
||||
|
||||
cardTotal += card->getNumber();
|
||||
}
|
||||
|
||||
out << "// " << cardTotal << " " << zoneNode->getVisibleName() << "\n";
|
||||
|
||||
// print cards to stream
|
||||
foreach(QString cardType, cardsByType.uniqueKeys())
|
||||
{
|
||||
|
||||
out << "// " << cardTotalByType[cardType] << " " << cardType << "\n";
|
||||
QList <DecklistCardNode*> cards = cardsByType.values(cardType);
|
||||
|
||||
saveToStream_DeckZoneCards(out, zoneNode, cards);
|
||||
|
||||
out << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
void DeckLoader::saveToStream_DeckZoneCards(QTextStream &out, const InnerDecklistNode *zoneNode, QList <DecklistCardNode*> cards)
|
||||
{
|
||||
// QMultiMap sorts values in reverse order
|
||||
for(int i = cards.size() - 1; i >= 0; --i)
|
||||
{
|
||||
DecklistCardNode* card = cards[i];
|
||||
|
||||
if (zoneNode->getName() == "side")
|
||||
out << "SB: ";
|
||||
|
||||
out << card->getNumber() << " " << card->getName() << "\n";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue