25 #include "plugins/engineplugin.h"
26 #include "serverapi/gamecreateparams.h"
27 #include "serverapi/message.h"
29 #include "apprunner.h"
33 #include <QStringList>
35 #define BAIL_ON_ERROR(method) \
38 if (d->message.isError()) \
47 QString argBexLoading;
48 QString argDehLoading;
49 QString argIwadLoading;
50 QString argOptionalWadLoading;
52 QString argPwadLoading;
53 QString argDemoPlayback;
54 QString argDemoRecord;
55 QString argServerLaunch;
71 d->argBexLoading =
"-deh";
72 d->argDehLoading =
"-deh";
73 d->argIwadLoading =
"-iwad";
74 d->argOptionalWadLoading =
"-file";
76 d->argPwadLoading =
"-file";
77 d->argDemoPlayback =
"-playdemo";
78 d->argDemoRecord =
"-record";
79 d->currentCmdLine = NULL;
82 set_addIwad(&GameHost::addIwad_default);
83 set_addPwads(&GameHost::addPwads_default);
84 set_addDMFlags(&GameHost::addDMFlags_default);
91 POLYMORPHIC_DEFINE(
void,
GameHost, addIwad, (), ());
92 POLYMORPHIC_DEFINE(
void,
GameHost, addPwads, (), ());
93 POLYMORPHIC_DEFINE(
void,
GameHost, addDMFlags, (), ());
100 void GameHost::addDemoPlaybackIfApplicable()
102 if (
params().hostMode() == GameCreateParams::Demo)
109 void GameHost::addDemoRecordIfApplicable()
111 if (
params().hostMode() == GameCreateParams::Offline
112 &&
params().demoRecord() != GameDemo::NoDemo)
119 void GameHost::addDMFlags_default()
127 void GameHost::addIwad_default()
129 const QString& iwadPath =
params().iwadPath();
131 if (iwadPath.isEmpty())
137 QFileInfo fi(iwadPath);
141 QString error = tr(
"Iwad Path error:\n\"%1\" doesn't exist or is a directory!").arg(iwadPath);
148 void GameHost::addPwads_default()
150 const QList<bool> &pwadsOptional =
params().pwadsOptional();
151 for(
int i = 0;i <
params().pwadsPaths().size();++i)
153 const QString &pwad =
params().pwadsPaths()[i];
158 QString error = tr(
"Pwad path error:\n\"%1\" doesn't exist or is a directory!").arg(pwad);
162 if (pwad.toLower().endsWith(
".deh"))
166 else if (pwad.toLower().endsWith(
".bex"))
172 if(pwadsOptional.size() > i && pwadsOptional[i])
182 return d->argBexLoading;
187 return d->argDehLoading;
192 return d->argIwadLoading;
197 return d->argOptionalWadLoading;
207 return d->argPwadLoading;
212 return d->argDemoPlayback;
217 return d->argDemoRecord;
222 return d->argServerLaunch;
227 return d->currentCmdLine->args;
236 if (
params().hostMode() == GameCreateParams::Host &&
params().port() > 0)
248 if (
params().hostMode() == GameCreateParams::Host)
261 addDemoPlaybackIfApplicable();
262 addDemoRecordIfApplicable();
269 d->currentCmdLine = &cmdLine;
275 if (d->message.isError())
295 const bool WRAP_IN_SSS_CONSOLE =
false;
297 const bool WRAP_IN_SSS_CONSOLE = params.hostMode() == GameCreateParams::Host;
300 if (WRAP_IN_SSS_CONSOLE)
312 return AppRunner::runExecutable(cmdLine);
326 void GameHost::saveDemoMetaData()
328 if (
params().demoRecord() == GameDemo::Managed)
330 GameDemo::saveDemoMetaData(
params().demoPath(), *
plugin(),
335 void GameHost::setArgForBexLoading(
const QString& arg)
337 d->argBexLoading = arg;
340 void GameHost::setArgForDehLoading(
const QString& arg)
342 d->argDehLoading = arg;
345 void GameHost::setArgForIwadLoading(
const QString& arg)
347 d->argIwadLoading = arg;
350 void GameHost::setArgForOptionalWadLoading(
const QString& arg)
352 d->argOptionalWadLoading = arg;
355 void GameHost::setArgForPort(
const QString& arg)
360 void GameHost::setArgForPwadLoading(
const QString& arg)
362 d->argPwadLoading = arg;
365 void GameHost::setArgForDemoPlayback(
const QString& arg)
367 d->argDemoPlayback = arg;
370 void GameHost::setArgForDemoRecord(
const QString& arg)
372 d->argDemoRecord = arg;
375 void GameHost::setArgForServerLaunch(
const QString& arg)
377 d->argServerLaunch = arg;
382 d->message = message;
385 void GameHost::setupGamePaths()
387 QFileInfo fileInfo(
params().executablePath());
388 if (!fileInfo.isFile() && !fileInfo.isBundle())
390 QString error = tr(
"%1\n doesn't exist or is not a file.").arg(fileInfo.filePath());
395 d->currentCmdLine->applicationDir = fileInfo.dir();
EnginePlugin * plugin() const
EnginePlugin that this GameHost is associated with.
Game parametrization data used when creating new games.
Structure holding parameters for application launch.
Message object used to pass messages throughout the Doomseeker's system.
const QString & argForBexLoading() const
Command line parameter that is used to load a BEX file.
const QString & argForDemoPlayback() const
Command line parameter for playing back a demo.
const QString & argForPort() const
Command line parameter that is used to set network port for the game.
const QString & argForServerLaunch() const
Command line parameter used to launch a server.
void setMessage(const Message &message)
Call this method to convey errors.
const QString & executablePath() const
Path to the game executable.
const QString & demoPath() const
Use if running in HostMode::Demo mode or recording a demo.
const GameCreateParams & params() const
GameCreateParams with which this game should be configured.
const QString & argForOptionalWadLoading() const
Command line parameter that is used to load optional WADs.
virtual void addCustomParameters()
"Custom parameters" are specified directly by user in "Create Game" dialog box.
bool isIgnore() const
True for 'Null' messages.
void addDMFlags()
[Virtual] Creates engine specific command line parameters out of passed DM flags list.
const QString & argForPwadLoading() const
Command line parameter that is used to load a PWAD.
void addPwads()
[Virtual] Loads PWADs and other mod files (dehacked patches, pk3s, etc.)
static void runExecutableWrappedInStandardServerConsole(const QIcon &icon, const CommandLineInfo &cli)
Executes predefined command line.
QStringList & args()
Reference to command line arguments.
virtual void createCommandLineArguments()
Builds command line arguments sequentially by calling other methods.
Message createHostCommandLine(const GameCreateParams ¶ms, CommandLineInfo &cmdLine)
QList< GameCVar > & cvars()
Contents of this list will be passed as "+consoleCommand value" to the command line.
Creates game servers, offline games or demo playbacks.
const QString & argForDemoRecord() const
Command line parameter for recording a demo.
const QString & argForIwadLoading() const
Command line parameter that is used to set IWAD.
Message host(const GameCreateParams ¶ms)
void addIwad()
[Virtual] Loads IWAD.
static Message customError(const QString &content)
Convenience method. Sets type to Type::CUSTOM_ERROR.
A general game setting or variable (like fraglimit).
const QString & command() const
Command-line argument that sets this GameCVar.
virtual void addExtra()
Creates engine specific command line parameters out of Server class fields.
const QString & argForDehLoading() const
Command line parameter that is used to load a DEHACKED file.