mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-23 07:03:54 -07:00
feat: set prioritization by set type (#5097)
* feat: prefer 'Core' and 'Expansion' sets for prioritization * rework set prioritization * clean up priority enum * formatting * revert changes to CockatriceXml3Parser * re-add missing null check * remove priority fallback ternary from CardSet model * make defaultSort logic easier to follow * revert changes to v3 card database xsd * remove unused invisible priority col from sets dialog * move draft innovation and duel deck sets to secondary prio * minor fixes * change PriorityFallback to 1 * make priority optional in xml * remove PriorityUndefined and set PriorityFallback to 0 * set priority when not found to PriorityOther in case a new set type is added it's unlikey we want it sorted first, it'll probably be a new product so it's probably best to sort it with the funny things * simplify sort function --------- Co-authored-by: tooomm <tooomm@users.noreply.github.com> Co-authored-by: ebbit1q <ebbit1q@gmail.com>
This commit is contained in:
parent
5156495b47
commit
b9ed9a6c0b
11 changed files with 128 additions and 36 deletions
|
|
@ -23,8 +23,9 @@ const char *CardDatabase::TOKENS_SETNAME = "TK";
|
|||
CardSet::CardSet(const QString &_shortName,
|
||||
const QString &_longName,
|
||||
const QString &_setType,
|
||||
const QDate &_releaseDate)
|
||||
: shortName(_shortName), longName(_longName), releaseDate(_releaseDate), setType(_setType)
|
||||
const QDate &_releaseDate,
|
||||
const CardSet::Priority _priority)
|
||||
: shortName(_shortName), longName(_longName), releaseDate(_releaseDate), setType(_setType), priority(_priority)
|
||||
{
|
||||
loadSetOptions();
|
||||
}
|
||||
|
|
@ -32,9 +33,10 @@ CardSet::CardSet(const QString &_shortName,
|
|||
CardSetPtr CardSet::newInstance(const QString &_shortName,
|
||||
const QString &_longName,
|
||||
const QString &_setType,
|
||||
const QDate &_releaseDate)
|
||||
const QDate &_releaseDate,
|
||||
const Priority _priority)
|
||||
{
|
||||
CardSetPtr ptr(new CardSet(_shortName, _longName, _setType, _releaseDate));
|
||||
CardSetPtr ptr(new CardSet(_shortName, _longName, _setType, _releaseDate, _priority));
|
||||
// ptr->setSmartPointer(ptr);
|
||||
return ptr;
|
||||
}
|
||||
|
|
@ -195,25 +197,31 @@ void SetList::markAllAsKnown()
|
|||
|
||||
void SetList::guessSortKeys()
|
||||
{
|
||||
// sort by release date DESC; invalid dates to the bottom.
|
||||
QDate distantFuture(2050, 1, 1);
|
||||
int aHundredYears = 36500;
|
||||
defaultSort();
|
||||
for (int i = 0; i < size(); ++i) {
|
||||
CardSetPtr set = at(i);
|
||||
if (set.isNull()) {
|
||||
qDebug() << "guessSortKeys set is null";
|
||||
continue;
|
||||
}
|
||||
|
||||
QDate date = set->getReleaseDate();
|
||||
if (date.isNull()) {
|
||||
set->setSortKey(static_cast<unsigned int>(aHundredYears));
|
||||
} else {
|
||||
set->setSortKey(static_cast<unsigned int>(date.daysTo(distantFuture)));
|
||||
}
|
||||
set->setSortKey(i);
|
||||
}
|
||||
}
|
||||
|
||||
void SetList::defaultSort()
|
||||
{
|
||||
std::sort(begin(), end(), [](const CardSetPtr &a, const CardSetPtr &b) {
|
||||
// Sort by priority, then by release date, then by short name
|
||||
if (a->getPriority() != b->getPriority()) {
|
||||
return a->getPriority() < b->getPriority(); // lowest first
|
||||
} else if (a->getReleaseDate() != b->getReleaseDate()) {
|
||||
return a->getReleaseDate() > b->getReleaseDate(); // most recent first
|
||||
} else {
|
||||
return a->getShortName() < b->getShortName(); // alphabetically
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
CardInfoPerSet::CardInfoPerSet(const CardSetPtr &_set) : set(_set)
|
||||
{
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue