Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 993


Ignore:
Timestamp:
Apr 5, 2008, 3:40:10 AM (16 years ago)
Author:
landauf
Message:
  • added exit command: quits orxonox (no, it's not a hidden segfault :D)
  • added exec command: executes files (that contain other commands)

funny: use the log function to write commands into orxonox.log and then use 'exec orxonox.log' - it works. I've even added a recursion-blocker to avoid an (almost) endless loop after logging 'exec orxonox.log' ;)

I'm currently thinking about more complex commands (what about delayed commands? or commands with returnvalue and a pipeline symbol?).

Location:
code/branches/core2/src/orxonox
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • code/branches/core2/src/orxonox/GraphicsEngine.cc

    r790 r993  
    4242namespace orxonox {
    4343
    44   using namespace Ogre;
    45 
    4644  GraphicsEngine::GraphicsEngine()
    4745  {
     
    7169    std::string plugin_filename = "plugins.cfg";
    7270#endif
    73     root_ = new Root(plugin_filename);
     71    root_ = new Ogre::Root(plugin_filename);
    7472  }
    7573
     
    7775   * @return scene manager
    7876   */
    79   SceneManager* GraphicsEngine::getSceneManager()
     77  Ogre::SceneManager* GraphicsEngine::getSceneManager()
    8078  {
    8179    if(!scene_)
    8280    {
    83       scene_ = root_->createSceneManager(ST_GENERIC, "Default SceneManager");
     81      scene_ = root_->createSceneManager(Ogre::ST_GENERIC, "Default SceneManager");
    8482      COUT(3) << "Info: Created SceneMan: " << scene_ << std::endl;
    8583    }
     
    9896  {
    9997    root_->initialise(true, "OrxonoxV2");
    100     TextureManager::getSingleton().setDefaultNumMipmaps(5);
    101     ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
     98    Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5);
     99    Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
    102100  }
    103101
     
    107105    //TODO: Work with ressource groups (should be generated by a special loader)
    108106    // Load resource paths from data file using configfile ressource type
    109     ConfigFile cf;
     107    Ogre::ConfigFile cf;
    110108    cf.load(dataPath + "resources.cfg");
    111109
    112110    // Go through all sections & settings in the file
    113     ConfigFile::SectionIterator seci = cf.getSectionIterator();
     111    Ogre::ConfigFile::SectionIterator seci = cf.getSectionIterator();
    114112
    115113    std::string secName, typeName, archName;
     
    117115    {
    118116      secName = seci.peekNextKey();
    119       ConfigFile::SettingsMultiMap *settings = seci.getNext();
    120       ConfigFile::SettingsMultiMap::iterator i;
     117      Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext();
     118      Ogre::ConfigFile::SettingsMultiMap::iterator i;
    121119      for (i = settings->begin(); i != settings->end(); ++i)
    122120      {
     
    124122        archName = i->second; // name (and location) of archive
    125123
    126         ResourceGroupManager::getSingleton().addResourceLocation(
     124        Ogre::ResourceGroupManager::getSingleton().addResourceLocation(
    127125                                           std::string(dataPath + archName),
    128126                                           typeName, secName);
  • code/branches/core2/src/orxonox/Orxonox.cc

    r972 r993  
    8686#include "objects/test3.h"
    8787
     88#include "core/ConsoleCommand.h"
    8889#include "core/CommandExecutor.h"
    8990#include "core/InputBuffer.h"
     
    9394namespace orxonox
    9495{
     96    ConsoleCommandShortcut(Orxonox, exit, AccessLevel::None);
     97
    9598    class Testlistener : public InputBufferListener
    9699    {
     
    150153
    151154        mKeyboard->capture();
    152         return !mKeyboard->isKeyDown(OIS::KC_ESCAPE);
     155        return (!mKeyboard->isKeyDown(OIS::KC_ESCAPE) && !Orxonox::getSingleton()->shouldExit());
    153156      }
    154157/*
     
    185188    this->frameListener_ = 0;
    186189    this->root_ = 0;
     190    this->bExit_ = false;
    187191  }
    188192
  • code/branches/core2/src/orxonox/Orxonox.h

    r873 r993  
    4545      inline OIS::Mouse* getMouse()                        { return this->mouse_; }
    4646//      inline BulletManager* getBulletMgr()                 { return this->bulletMgr_; }
     47      static inline void exit()                            { Orxonox::getSingleton()->bExit_ = true; }
     48      inline bool shouldExit()                             { return this->bExit_; }
    4749
    4850    private:
     
    7880      OrxListener*          frameListener_;
    7981      Ogre::Root*           root_;
     82      bool                  bExit_;
    8083
    8184      // this is used to identify the mode (server/client/...) we're in
  • code/branches/core2/src/orxonox/core/CommandExecutor.cc

    r972 r993  
    4545    ConsoleCommandShortcutGeneric(keyword3, createExecutor((FunctorStatic*)0, "bind", AccessLevel::User));
    4646
     47    ConsoleCommandShortcutExtern(exec, AccessLevel::None);
     48
     49    void exec(const std::string& filename)
     50    {
     51        static std::set<std::string> executingFiles;
     52
     53        std::set<std::string>::const_iterator it = executingFiles.find(filename);
     54        if (it != executingFiles.end())
     55        {
     56            COUT(1) << "Error: Recurring exec command in \"" << filename << "\". Stopped execution." << std::endl;
     57            return;
     58        }
     59
     60        // Open the file
     61        std::ifstream file;
     62        file.open(filename.c_str(), std::fstream::in);
     63
     64        if (!file.is_open())
     65        {
     66            COUT(1) << "Error: Couldn't execute file \"" << filename << "\"." << std::endl;
     67            return;
     68        }
     69
     70        executingFiles.insert(filename);
     71
     72        // Iterate through the file and put the lines into the CommandExecutor
     73        char line[1024];
     74        while (file.good() && !file.eof())
     75        {
     76            file.getline(line, 1024);
     77            CommandExecutor::execute(line);
     78        }
     79
     80        executingFiles.erase(filename);
     81    }
     82
    4783
    4884    ///////////////////////
  • code/branches/core2/src/orxonox/core/CommandExecutor.h

    r972 r993  
    6060        CS_Error
    6161    };
     62
     63    void exec(const std::string& filename);
    6264
    6365    enum KeybindMode {}; // temporary
  • code/branches/core2/src/orxonox/core/ConsoleCommand.h

    r949 r993  
    4343
    4444
    45 #define ConsoleCommandShortcut(function, accesslevel) \
     45#define ConsoleCommandShortcut(classname, function, accesslevel) \
    4646    ConsoleCommandShortcutGeneric(function##consolecommand__, orxonox::createExecutor(orxonox::createFunctor(&classname::function), #function, accesslevel))
     47
     48#define ConsoleCommandShortcutExtern(function, accesslevel) \
     49    ConsoleCommandShortcutGeneric(function##consolecommand__, orxonox::createExecutor(orxonox::createFunctor(&function), #function, accesslevel))
    4750
    4851#define ConsoleCommandShortcutGeneric(fakevariable, executor) \
  • code/branches/core2/src/orxonox/core/CorePrereqs.h

    r952 r993  
    9393  class CommandEvaluation;
    9494  class CommandExecutor;
     95  class ConfigFile;
     96  class ConfigFileEntry;
     97  class ConfigFileEntryComment;
     98  class ConfigFileEntryValue;
     99  class ConfigFileManager;
     100  class ConfigFileSection;
    95101  class ConfigValueContainer;
    96102  class DebugLevel;
Note: See TracChangeset for help on using the changeset viewer.