Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Aug 20, 2008, 10:30:28 PM (16 years ago)
Author:
rgrieder
Message:

Added CommandLine class.
You can now call SetCommandLineArgument like SetConsoleCommand and hereby define a new command line argument. They are passed in main() and then they can be accessed by commandLine::getCommandLineArgument().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/gui/src/orxonox/Orxonox.cc

    r1662 r1663  
    108108    , bAbort_(false)
    109109    , timefactor_(1.0f)
    110     , mode_(GameMode::GM_Unspecified)
    111110    , debugRefreshTime_(0.0f)
    112111    , graphicsEngine_(0)
     
    119118
    120119    //assert(singletonRef_s == 0);
    121     OrxAssert(singletonRef_s == 0, "asdfasdfasdfasdfblahblah");
     120    OrxAssert(singletonRef_s == 0, "Cannot instantiate Orxonox class twice");
    122121    singletonRef_s = this;
    123122  }
     
    229228        setConfigValues();
    230229
    231         const Settings::CommandLineArgument* mode = Settings::getCommandLineArgument("mode");
    232         assert(mode);
    233         if (!mode->bHasDefaultValue_)
    234         {
    235             Settings::setGameMode(mode->value_);
    236             this->mode_ = Settings::getGameMode();
    237         }
    238         COUT(3) << "Orxonox: Game mode is " << mode_.name << "." << std::endl;
    239 
    240         const Settings::CommandLineArgument* dataPath = Settings::getCommandLineArgument("dataPath");
    241         assert(dataPath);
    242         if (!dataPath->bHasDefaultValue_)
    243         {
    244             if (*dataPath->value_.getString().end() != '/' && *dataPath->value_.getString().end() != '\\')
    245                 Settings::tsetDataPath(dataPath->value_.getString() + "/");
    246             else
    247                 Settings::tsetDataPath(dataPath->value_.getString());
    248         }
     230        //const Settings::CommandLineArgument* dataPath = Settings::getCommandLineArgument("dataPath");
     231        //assert(dataPath);
     232        //if (!dataPath->bHasDefaultValue_)
     233        //{
     234        //    if (*dataPath->value_.getString().end() != '/' && *dataPath->value_.getString().end() != '\\')
     235        //        Settings::tsetDataPath(dataPath->value_.getString() + "/");
     236        //    else
     237        //        Settings::tsetDataPath(dataPath->value_.getString());
     238        //}
    249239
    250240        try
     
    256246            graphicsEngine_->setup();       // creates ogre root and other essentials
    257247
    258             if (mode_.showsGraphics)
     248            if (Settings::showsGraphics())
    259249            {
    260250                graphicsEngine_->loadRenderer();    // creates the render window
     
    286276                // We probably want to use std::cin to catch input (OIS uses DirectX or X server)
    287277            }
    288 
    289             bool showGUI = true;
    290             if (mode_.mode != GameMode::Unspecified)
    291             {
    292                 showGUI = false;
    293                 // a game mode was specified with the command line
    294                 // we therefore load the game and level directly
    295 
    296                 if (!loadLevel(this->mode_))
    297                 {
    298                     COUT(1) << "Loading with predefined mode failed. Showing main menu." << std::endl;
    299                     showGUI = true;
    300                     mode_ = GameMode::GM_Unspecified;
    301                 }
    302             }
    303 
    304             if (showGUI)
    305             {
    306                 // show main menu
    307                 GUIManager::getInstance().showGUI("MainMenu", 0);
    308                 GraphicsEngine::getInstance().getViewport()->setCamera(GUIManager::getInstance().getCamera());
    309             }
    310278        }
    311279        catch (std::exception& ex)
     
    316284        }
    317285
    318         modeRequest_ = mode_;
    319286        // here happens the game
    320287        startRenderLoop();
    321288
    322         if (mode_.mode == GameMode::Client)
    323             network::Client::getSingleton()->closeConnection();
    324 
    325         if (mode_.hasServer)
    326             server_g->close();
    327     }
    328 
    329     /*static*/ void Orxonox::loadGame(const std::string& name)
    330     {
    331         const GameMode& mode = Settings::getGameMode(name);
    332         if (mode.mode == GameMode::None)
    333             return;
    334 
    335         getInstance().modeRequest_ = mode;
    336     }
    337 
    338     bool Orxonox::loadLevel(const GameMode& mode)
    339     {
    340         bool success = true;
    341 
    342         if (mode.showsGraphics)
    343         {
    344             // create Ogre SceneManager for the level
    345             graphicsEngine_->createNewScene();
    346 
    347             if (!loadPlayground())
    348                 return false;
    349         }
    350 
    351         switch (mode.mode)
    352         {
    353         case GameMode::Server:
    354             success &= serverLoad();
    355             break;
    356         case GameMode::Client:
    357             success &= clientLoad();
    358             break;
    359         case GameMode::Dedicated:
    360             success &= serverLoad();
    361             break;
    362         case GameMode::Standalone:
    363             success &= standaloneLoad();
    364             break;
    365         default: // never happens
    366             assert(false);
    367         }
    368 
    369         if (success)
    370         {
    371             InputManager::getInstance().requestEnterState("game");
    372             this->mode_ = mode;
    373         }
    374 
    375         return success;
     289        //if (mode_.mode == GameMode::Client)
     290        //    network::Client::getSingleton()->closeConnection();
     291
     292        //if (mode_.hasServer)
     293        //    server_g->close();
    376294    }
    377295
     
    408326    COUT(0) << "Loading level in server mode" << std::endl;
    409327
    410     assert(Settings::getCommandLineArgument("port"));
    411     int serverPort = Settings::getCommandLineArgument("port")->value_;
    412     //server_g = new network::Server(serverPort_);
    413     server_g = network::Server::createSingleton(serverPort);
     328    //assert(Settings::getCommandLineArgument("port"));
     329    //int serverPort = Settings::getCommandLineArgument("port")->value_;
     330    ////server_g = new network::Server(serverPort_);
     331    //server_g = network::Server::createSingleton(serverPort);
    414332
    415333    if (!loadScene())
     
    428346    COUT(0) << "Loading level in client mode" << std::endl;\
    429347
    430     assert(Settings::getCommandLineArgument("port"));
    431     assert(Settings::getCommandLineArgument("ip"));
    432     int serverPort = Settings::getCommandLineArgument("port")->value_;
    433     std::string serverIP = Settings::getCommandLineArgument("ip")->value_;
    434 
    435     if (serverIP.compare("") == 0)
    436       client_g = network::Client::createSingleton();
    437     else
    438       client_g = network::Client::createSingleton(serverIP, serverPort);
     348    //assert(Settings::getCommandLineArgument("port"));
     349    //assert(Settings::getCommandLineArgument("ip"));
     350    //int serverPort = Settings::getCommandLineArgument("port")->value_;
     351    //std::string serverIP = Settings::getCommandLineArgument("ip")->value_;
     352
     353    //if (serverIP.compare("") == 0)
     354    //  client_g = network::Client::createSingleton();
     355    //else
     356    //  client_g = network::Client::createSingleton(serverIP, serverPort);
    439357
    440358    if(!client_g->establishConnection())
     
    504422        float dt = (timeBeforeTick - timeBeforeTickOld) / 1000000.0;
    505423
    506         // check whether we have to load a game
    507         if (mode_.mode != modeRequest_.mode && mode_.mode == GameMode::Unspecified)
    508         {
    509             this->loadLevel(modeRequest_);
    510             this->modeRequest_ = GameMode::GM_None;
    511         }
    512 
    513424
    514425        // tick the core (needs real time for input and tcl thread management)
     
    552463        ogreRoot._fireFrameStarted(evt);
    553464
    554         if (mode_.showsGraphics)
     465        if (Settings::showsGraphics())
    555466        {
    556467          // Pump messages in all registered RenderWindows
Note: See TracChangeset for help on using the changeset viewer.