24 #include "wadseeker/entities/checksum.h"
25 #include "wadseeker/entities/hash.h"
26 #include "wadseeker/entities/modfile.h"
27 #include <QRegularExpression>
31 static QString coerceInternalName(
const QString &
name)
33 return name.toLower().remove(QRegularExpression(
"[^a-z0-9]"));
44 void setInternalName(
const QString &name)
46 internalName = coerceInternalName(name);
57 DMFlag::DMFlag(
const QString &internalName,
unsigned value)
60 d->setInternalName(internalName);
64 DMFlag::DMFlag(
const QString &internalName,
unsigned value,
const QString &name)
67 d->setInternalName(internalName);
71 DMFlag::DMFlag(
const DMFlag &other)
89 return d->internalName;
109 DClass<DMFlagsSection>
113 QString internalName;
114 QVector<DMFlag> flags;
116 void setInternalName(
const QString &name)
118 internalName = coerceInternalName(name);
128 DMFlagsSection::DMFlagsSection(
const QString &internalName)
131 d->setInternalName(internalName);
134 DMFlagsSection::DMFlagsSection(
const QString &internalName,
const QString &name)
137 d->setInternalName(internalName);
145 DMFlagsSection::~DMFlagsSection()
164 for (
const DMFlag &flag : d->flags)
166 result |= flag.
value();
174 copy.d->flags.clear();
180 return d->flags.count();
185 return d->internalName;
200 return d->flags[index];
205 return d->flags[index];
209 const QList<DMFlagsSection> &original,
210 const QList<DMFlagsSection> &removals)
212 QList<DMFlagsSection> copy;
218 if (section.internalName() == removal.internalName())
220 copy << section.
removed(removal);
236 for (
const DMFlag &removal : removals.d->flags)
238 QMutableVectorIterator<DMFlag> i(copy.d->flags);
268 GameCVar::GameCVar(
const QString &name,
const QString &command)
274 GameCVar::GameCVar(
const QString &name,
const QString &command,
const QVariant &value)
281 GameCVar::GameCVar(
const GameCVar &other)
286 GameCVar::~GameCVar()
304 return value().isValid();
329 DClass<GameCVarProvider>
339 GameCVarProvider::~GameCVarProvider()
346 return QList<GameCVar>();
363 d->
index = SGM_Unknown;
379 GameMode::~GameMode()
393 result.setTeamGame(
false);
404 return ffaGame(SGM_Cooperative, QObject::tr(
"Cooperative"));
409 return ffaGame(SGM_Deathmatch, QObject::tr(
"Deathmatch"));
412 GameMode GameMode::mkTeamDeathmatch()
414 return teamGame(SGM_TeamDeathmatch, QObject::tr(
"Team DM"));
417 GameMode GameMode::mkCaptureTheFlag()
419 return teamGame(SGM_CTF, QObject::tr(
"CTF"));
439 return !d->name.isEmpty();
442 void GameMode::setTeamGame(
bool b)
450 result.setTeamGame(
true);
461 QList<Checksum> checksums;
466 PWad::
PWad(const QString &name,
bool optional, const QList<Checksum> &checksums)
469 d->optional = optional;
470 d->checksums = checksums;
473 PWad::PWad(
const QString &name,
bool optional)
476 d->optional = optional;
479 PWad::PWad(
const ModFile &modFile)
481 d->name = modFile.fileName();
483 d->checksums = modFile.checksums();
486 PWad::PWad(
const PWad &other)
495 PWad &PWad::operator=(
const PWad &other)
502 PWad::operator ModFile()
504 ModFile modFile(d->name);
505 modFile.setChecksums(d->checksums);
526 d->checksums.append(Checksum(hash, algorithm));
531 for (
const Checksum checksum : d->checksums)
533 if (Hash::hashFile(path, checksum.algorithm()) != checksum.hash())