Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/resource/src/orxonox/Main.cc @ 4036

Last change on this file since 4036 was 3358, checked in by rgrieder, 15 years ago

Moved startup argument parsing (console, dedicated, server, client and standalone) from GSRoot.cc to Main.cc.
This allows to finally prevent GameState request while loading/unloading them (changed the code in Game.cc to enforce this).

  • Property svn:eol-style set to native
File size: 3.7 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Benjamin Knecht <beni_at_orxonox.net>, (C) 2007
24 *      Reto Grieder
25 *   Co-authors:
26 *      ...
27 *
28 */
29 
30/**
31@file
32@brief
33    Entry point of the program.
34*/
35
36#include "OrxonoxPrereqs.h"
37#include "SpecialConfig.h"
38
39#ifdef ORXONOX_USE_WINMAIN
40# ifndef WIN32_LEAN_AND_MEAN
41#  define WIN32_LEAN_AND_MEAN
42# endif
43#include <windows.h>
44#endif
45
46#include "util/Debug.h"
47#include "util/Exception.h"
48#include "core/CommandLine.h"
49#include "core/Game.h"
50
51SetCommandLineSwitch(console).information("Start in console mode (text IO only)");
52// Shortcuts for easy direct loading
53SetCommandLineSwitch(server).information("Start in server mode");
54SetCommandLineSwitch(client).information("Start in client mode");
55SetCommandLineSwitch(dedicated).information("Start in dedicated server mode");
56SetCommandLineSwitch(standalone).information("Start in standalone mode");
57
58/*
59@brief
60    Main method. Game starts here (except for static initialisations).
61*/
62#ifdef ORXONOX_USE_WINMAIN
63INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT)
64#else
65int main(int argc, char** argv)
66#endif
67{
68    using namespace orxonox;
69
70    Game* game = 0;
71    try
72    {
73#ifndef ORXONOX_USE_WINMAIN
74        std::string strCmdLine;
75        for (int i = 1; i < argc; ++i)
76            strCmdLine += argv[i] + std::string(" ");
77#endif
78        game = new Game(strCmdLine);
79
80        game->setStateHierarchy(
81        "root"
82        " graphics"
83        "  mainMenu"
84        "  standalone"
85        "   level"
86        "  server"
87        "   level"
88        "  client"
89        "   level"
90        " dedicated"
91        "  level"
92        " ioConsole"
93        );
94
95        game->requestState("root");
96
97        // Some development hacks (not really, but in the future, this calls won't make sense anymore)
98        if (CommandLine::getValue("standalone").getBool())
99            Game::getInstance().requestStates("graphics, standalone, level");
100        else if (CommandLine::getValue("server").getBool())
101            Game::getInstance().requestStates("graphics, server, level");
102        else if (CommandLine::getValue("client").getBool())
103            Game::getInstance().requestStates("graphics, client, level");
104        else if (CommandLine::getValue("dedicated").getBool())
105            Game::getInstance().requestStates("dedicated, level");
106        else if (CommandLine::getValue("console").getBool())
107            Game::getInstance().requestStates("ioConsole");
108        else
109            Game::getInstance().requestStates("graphics, mainMenu");
110    }
111    catch (const std::exception& ex)
112    {
113        COUT(0) << "Orxonox failed to initialise: " << ex.what() << std::endl;
114        COUT(0) << "Terminating program." << std::endl;
115        return 1;
116    }
117    catch (...)
118    {
119        COUT(0) << "Orxonox failed to initialise: " << std::endl;
120        COUT(0) << "Terminating program." << std::endl;
121        return 1;
122    }
123
124    game->run();
125    delete game;
126
127    return 0;
128}
Note: See TracBrowser for help on using the repository browser.