1
0
mirror of https://github.com/OpenTTD/OpenTTD synced 2026-01-23 12:14:11 +01:00

Codechange: simplify some complicated logic

This commit is contained in:
Rubidium
2025-03-16 06:08:00 +01:00
committed by rubidium42
parent d6a1a0b058
commit f214c81e97
3 changed files with 52 additions and 31 deletions

View File

@@ -481,18 +481,27 @@ template <class Tbase_set>
if (BaseMedia<Tbase_set>::used_set != nullptr) return true;
const Tbase_set *best = nullptr;
auto IsBetter = [&best] (const auto *current) {
/* Nothing chosen yet. */
if (best == nullptr) return true;
/* Not being a fallback is better. */
if (best->fallback && !current->fallback) return true;
/* Having more valid files is better. */
if (best->valid_files < current->valid_files) return true;
/* Having (essentially) fewer valid files is worse. */
if (best->valid_files != current->valid_files) return false;
/* Having a later version of the same base set is better. */
if (best->shortname == current->shortname && best->version < current->version) return true;
/* The DOS palette is the better palette. */
return best->palette != PAL_DOS && current->palette == PAL_DOS;
};
for (const Tbase_set *c = BaseMedia<Tbase_set>::available_sets; c != nullptr; c = c->next) {
/* Skip unusable sets */
if (c->GetNumMissing() != 0) continue;
if (best == nullptr ||
(best->fallback && !c->fallback) ||
best->valid_files < c->valid_files ||
(best->valid_files == c->valid_files && (
(best->shortname == c->shortname && best->version < c->version) ||
(best->palette != PAL_DOS && c->palette == PAL_DOS)))) {
best = c;
}
if (IsBetter(c)) best = c;
}
BaseMedia<Tbase_set>::used_set = best;