- Timestamp:
- Jul 23, 2009, 2:20:51 PM (15 years ago)
- Location:
- code/branches/resource/src/orxonox
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/resource/src/orxonox/GraphicsManager.cc
r3336 r3338 37 37 38 38 #include <fstream> 39 #include <memory> 39 40 #include <boost/filesystem.hpp> 40 41 #include <boost/shared_ptr.hpp> -
code/branches/resource/src/orxonox/gamestates/GSGraphics.cc
r3327 r3338 125 125 126 126 // load the CEGUI interface 127 guiManager_ = new GUIManager(); 128 guiManager_->initialise(renderWindow); 127 guiManager_ = new GUIManager(renderWindow); 129 128 130 129 // add console command to toggle GUI -
code/branches/resource/src/orxonox/gui/GUIManager.cc
r3337 r3338 36 36 #include "GUIManager.h" 37 37 38 #include <memory> 38 39 extern "C" { 39 40 #include <lua.h> … … 89 90 GUIManager* GUIManager::singletonRef_s = 0; 90 91 91 GUIManager::GUIManager() 92 : renderWindow_(0) 93 , guiRenderer_(0) 94 , resourceProvider_(0) 95 , scriptModule_(0) 96 , guiSystem_(0) 97 , state_(Uninitialised) 98 { 99 assert(singletonRef_s == 0); 100 singletonRef_s = this; 101 } 102 103 /** 104 @brief 105 Deconstructor of the GUIManager 106 107 Basically shuts down CEGUI and destroys the Lua engine and afterwards the interface to the Ogre engine. 108 */ 109 GUIManager::~GUIManager() 110 { 111 if (guiSystem_) 112 delete guiSystem_; 113 114 if (scriptModule_) 115 { 116 // destroy our own tolua interfaces 117 lua_pushnil(luaState_); 118 lua_setglobal(luaState_, "Orxonox"); 119 lua_pushnil(luaState_); 120 lua_setglobal(luaState_, "Core"); 121 delete scriptModule_; 122 } 123 124 if (guiRenderer_) 125 delete guiRenderer_; 126 127 singletonRef_s = 0; 128 } 129 130 /** 131 @brief 132 Initialises the GUIManager by starting up CEGUI 133 @param renderWindow 134 Ogre's render window. Without this, the GUI cannot be displayed. 135 @return true if success, otherwise false 136 137 Before this call the GUIManager won't do anything, but can be accessed. 92 /** 93 @brief 94 Constructs the GUIManager by starting up CEGUI 138 95 139 96 Creates the interface to Ogre, sets up the CEGUI renderer and the Lua script module together with the Lua engine. … … 141 98 After Lua setup tolua++-elements are linked to Lua-state to give Lua access to C++-code. 142 99 Finally initial Lua code is executed (maybe we can do this with the CEGUI startup script automatically). 143 */ 144 bool GUIManager::initialise(Ogre::RenderWindow* renderWindow) 145 { 100 @param renderWindow 101 Ogre's render window. Without this, the GUI cannot be displayed. 102 @return true if success, otherwise false 103 */ 104 GUIManager::GUIManager(Ogre::RenderWindow* renderWindow) 105 : renderWindow_(renderWindow) 106 , resourceProvider_(0) 107 { 108 assert(singletonRef_s == 0); 109 singletonRef_s = this; 110 146 111 using namespace CEGUI; 147 if (state_ == Uninitialised) 148 { 149 COUT(3) << "Initialising CEGUI." << std::endl; 150 151 try 152 { 153 // save the render window 154 renderWindow_ = renderWindow; 155 156 // Note: No SceneManager specified yet 157 this->guiRenderer_ = new OgreCEGUIRenderer(renderWindow_, Ogre::RENDER_QUEUE_OVERLAY, false, 3000); 158 this->resourceProvider_ = guiRenderer_->createResourceProvider(); 159 this->resourceProvider_->setDefaultResourceGroup("GUI"); 160 161 // setup scripting 162 this->scriptModule_ = new LuaScriptModule(); 163 this->luaState_ = this->scriptModule_->getLuaState(); 164 165 // Create our own logger to specify the filepath 166 this->ceguiLogger_ = new CEGUILogger(); 167 this->ceguiLogger_->setLogFilename(Core::getLogPathString() + "cegui.log"); 168 // set the log level according to ours (translate by subtracting 1) 169 this->ceguiLogger_->setLoggingLevel( 170 (LoggingLevel)(Core::getSoftDebugLevel(OutputHandler::LD_Logfile) - 1)); 171 172 // create the CEGUI system singleton 173 this->guiSystem_ = new System(this->guiRenderer_, this->resourceProvider_, 0, this->scriptModule_); 174 175 // do this after 'new CEGUI::Sytem' because that creates the lua state in the first place 176 tolua_Core_open(this->scriptModule_->getLuaState()); 177 tolua_Orxonox_open(this->scriptModule_->getLuaState()); 178 179 // initialise the basic lua code 180 loadLuaCode(); 181 } 182 catch (CEGUI::Exception& ex) 183 { 112 113 COUT(3) << "Initialising CEGUI." << std::endl; 114 115 try 116 { 117 // Note: No SceneManager specified yet 118 guiRenderer_.reset(new OgreCEGUIRenderer(renderWindow_, Ogre::RENDER_QUEUE_OVERLAY, false, 3000)); 119 resourceProvider_ = guiRenderer_->createResourceProvider(); 120 resourceProvider_->setDefaultResourceGroup("GUI"); 121 122 // setup scripting 123 scriptModule_.reset(new LuaScriptModule()); 124 luaState_ = scriptModule_->getLuaState(); 125 126 // Create our own logger to specify the filepath 127 std::auto_ptr<CEGUILogger> ceguiLogger(new CEGUILogger()); 128 ceguiLogger->setLogFilename(Core::getLogPathString() + "cegui.log"); 129 // set the log level according to ours (translate by subtracting 1) 130 ceguiLogger->setLoggingLevel( 131 static_cast<LoggingLevel>(Core::getSoftDebugLevel(OutputHandler::LD_Logfile) - 1)); 132 this->ceguiLogger_ = ceguiLogger.release(); 133 134 // create the CEGUI system singleton 135 guiSystem_.reset(new System(guiRenderer_.get(), resourceProvider_, 0, scriptModule_.get())); 136 137 // do this after 'new CEGUI::Sytem' because that creates the lua state in the first place 138 tolua_Core_open(this->scriptModule_->getLuaState()); 139 tolua_Orxonox_open(this->scriptModule_->getLuaState()); 140 141 // initialise the basic lua code 142 this->loadLuaCode(); 143 } 144 catch (CEGUI::Exception& ex) 145 { 184 146 #if CEGUI_VERSION_MAJOR == 0 && CEGUI_VERSION_MINOR < 6 185 147 throw GeneralException(ex.getMessage().c_str()); 186 148 #else 187 188 149 throw GeneralException(ex.getMessage().c_str(), ex.getLine(), 150 ex.getFileName().c_str(), ex.getName().c_str()); 189 151 #endif 190 } 191 192 state_ = Ready; 193 } 194 195 return true; 152 } 153 } 154 155 /** 156 @brief 157 Destructor of the GUIManager 158 159 Basically shuts down CEGUI and destroys the Lua engine and afterwards the interface to the Ogre engine. 160 */ 161 GUIManager::~GUIManager() 162 { 163 // destroy our own tolua interfaces 164 lua_pushnil(luaState_); 165 lua_setglobal(luaState_, "Orxonox"); 166 lua_pushnil(luaState_); 167 lua_setglobal(luaState_, "Core"); 168 169 singletonRef_s = 0; 196 170 } 197 171 … … 245 219 246 220 /** 247 @brief248 Executes Lua code249 @param str250 reference to string object holding the Lua code which is to be executed251 252 This function gives total access to the GUI. You can execute ANY Lua code here.253 */254 void GUIManager::executeCode(const std::string& str)255 {256 try257 {258 this->scriptModule_->executeString(str);259 }260 catch (CEGUI::Exception& ex)261 {262 COUT(2) << "CEGUI Error: \"" << ex.getMessage() << "\" while executing code \"" << str << "\"" << std::endl;263 }264 }265 266 /**267 221 268 222 */ … … 305 259 /** 306 260 @brief 261 Executes Lua code 262 @param str 263 reference to string object holding the Lua code which is to be executed 264 265 This function gives total access to the GUI. You can execute ANY Lua code here. 266 */ 267 void GUIManager::executeCode(const std::string& str) 268 { 269 try 270 { 271 this->scriptModule_->executeString(str); 272 } 273 catch (const CEGUI::Exception& ex) 274 { 275 COUT(2) << "CEGUI Error: \"" << ex.getMessage() << "\" while executing code \"" << str << "\"" << std::endl; 276 } 277 catch (...) 278 { 279 COUT(2) << "Couldn't execute GUI related Lua code due to unknown reasons." << std::endl; 280 } 281 } 282 283 /** 284 @brief 307 285 Displays specified GUI on screen 308 286 @param name … … 314 292 void GUIManager::showGUI(const std::string& name) 315 293 { 316 if (state_ != Uninitialised) 317 { 318 //COUT(3) << "Loading GUI " << name << std::endl; 319 try 320 { 321 this->scriptModule_->executeString(std::string("showGUI(\"") + name + "\")"); 322 } 323 catch (CEGUI::Exception& ex) 324 { 325 COUT(2) << "Error while executing lua script. Message:\n" << ex.getMessage() << std::endl; 326 } 327 catch (...) 328 { 329 COUT(2) << "Could show a menu due to unknown reasons." << std::endl; 330 } 331 } 332 else 333 { 334 COUT(2) << "Warning: GUI Manager not yet initialised, cannot load a GUI" << std::endl; 335 } 294 this->executeCode(std::string("showGUI(\"") + name + "\")"); 336 295 } 337 296 -
code/branches/resource/src/orxonox/gui/GUIManager.h
r3337 r3338 42 42 #include <string> 43 43 #include <CEGUIForwardRefs.h> 44 #include <boost/scoped_ptr.hpp> 44 45 45 46 #include "util/OgreForwardRefs.h" … … 67 68 // tolua_end 68 69 public: 69 /** 70 @enum State 71 The current state of the GUIManager. There should maybe be more (or we can omit this totally). 72 */ 73 enum State 74 { 75 Uninitialised, //!< Initial state of the GUIManager 76 Ready, //!< State after initialisation if ready 77 OnDisplay //!< State if GUI is displayed 78 }; 79 80 GUIManager(); 70 GUIManager(Ogre::RenderWindow* renderWindow); 81 71 ~GUIManager(); 82 83 bool initialise(Ogre::RenderWindow* renderWindow);84 72 85 73 void update(const Clock& time); … … 110 98 void mouseScrolled (int abs, int rel); 111 99 112 Ogre::RenderWindow* renderWindow_; //!< Ogre's render window to give CEGUI access to it113 CEGUI::OgreCEGUIRenderer* guiRenderer_; //!< CEGUI's interface to the Ogre Engine114 CEGUI::ResourceProvider* resourceProvider_; //!< CEGUI's resource provider115 CEGUI::LuaScriptModule* scriptModule_; //!< CEGUI's script module to use Lua116 CEGUI:: Logger* ceguiLogger_; //!< CEGUI's logger to be able to log CEGUI errors in our log117 CEGUI:: System* guiSystem_; //!< CEGUI's main system118 lua_State* luaState_;//!< Lua state, access point to the Lua engine100 boost::scoped_ptr<CEGUI::OgreCEGUIRenderer> guiRenderer_; //!< CEGUI's interface to the Ogre Engine 101 boost::scoped_ptr<CEGUI::LuaScriptModule> scriptModule_; //!< CEGUI's script module to use Lua 102 boost::scoped_ptr<CEGUI::System> guiSystem_; //!< CEGUI's main system 103 Ogre::RenderWindow* renderWindow_; //!< Ogre's render window to give CEGUI access to it 104 CEGUI::ResourceProvider* resourceProvider_; //!< CEGUI's resource provider 105 CEGUI::Logger* ceguiLogger_; //!< CEGUI's logger to be able to log CEGUI errors in our log 106 lua_State* luaState_; //!< Lua state, access point to the Lua engine 119 107 120 State state_; //!< reflects state of the GUIManager 121 122 static GUIManager* singletonRef_s; //!< Singleton reference to GUIManager 108 static GUIManager* singletonRef_s; //!< Singleton reference to GUIManager 123 109 124 110 }; // tolua_export
Note: See TracChangeset
for help on using the changeset viewer.