Changeset 8079 for code/trunk/src/libraries/core
- Timestamp:
- Mar 15, 2011, 9:47:11 PM (14 years ago)
- Location:
- code/trunk
- Files:
-
- 26 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
-
code/trunk/src/libraries/core/CMakeLists.txt
r7284 r8079 35 35 OrxonoxClass.cc 36 36 Resource.cc 37 WindowEventListener.cc38 37 39 38 # hierarchy … … 49 48 Template.cc 50 49 XMLPort.cc 50 51 COMPILATION_BEGIN ListenerCompilation.cc 52 ViewportEventListener.cc 53 WindowEventListener.cc 51 54 XMLNameListener.cc 55 COMPILATION_END 52 56 53 57 COMPILATION_BEGIN FilesystemCompilation.cc … … 76 80 Game.h 77 81 GameMode.h 82 GraphicsManager.h 78 83 GUIManager.h 79 84 Loader.h -
code/trunk/src/libraries/core/Core.cc
r7872 r8079 208 208 #ifdef ORXONOX_RELEASE 209 209 const unsigned int defaultLevelLogFile = 3; 210 SetConfigValue(bDevMode_, false) 211 .description("Developer mode. If not set, hides some things from the user to not confuse him."); 210 212 #else 211 213 const unsigned int defaultLevelLogFile = 4; 214 SetConfigValue(bDevMode_, true) 215 .description("Developer mode. If not set, hides some things from the user to not confuse him."); 212 216 #endif 213 217 SetConfigValueExternal(softDebugLevelLogFile_, "OutputHandler", "softDebugLevelLogFile", defaultLevelLogFile) -
code/trunk/src/libraries/core/Core.h
r7870 r8079 91 91 { return this->ogreConfigTimestamp_; } 92 92 93 inline bool inDevMode(void) const 94 { return this->bDevMode_; } 95 93 96 private: 94 97 Core(const Core&); //!< Don't use (undefined symbol) … … 130 133 long long lastLevelTimestamp_; ///< Timestamp when the last level was started 131 134 long long ogreConfigTimestamp_; ///< Timestamp wehen the ogre config level was modified 135 bool bDevMode_; //!< Developers bit. If set to false, some options are not available as to not confuse the normal user. 132 136 133 137 static Core* singletonPtr_s; -
code/trunk/src/libraries/core/CorePrereqs.h
r7849 r8079 182 182 class Thread; 183 183 class ThreadPool; 184 class ViewportEventListener; 184 185 template <class T> 185 186 class WeakPtr; -
code/trunk/src/libraries/core/GUIManager.cc
r7876 r8079 32 32 #include <boost/bind.hpp> 33 33 #include <memory> 34 extern "C" { 35 #include <lua.h> 36 } 34 37 35 #include <CEGUIDefaultLogger.h> 38 36 #include <CEGUIExceptions.h> … … 107 105 SetConsoleCommand("showGUI", &GUIManager::showGUI).defaultValue(1, false).defaultValue(2, false); 108 106 SetConsoleCommand("hideGUI", &GUIManager::hideGUI); 107 SetConsoleCommand("toggleGUI", &GUIManager::toggleGUI).defaultValue(1, false).defaultValue(2, false); 109 108 110 109 /** … … 284 283 { 285 284 GUIManager::getInstance().executeCode("hideMenuSheet(\"" + name + "\")"); 285 } 286 287 /** 288 @brief 289 Toggles specified GUI. 290 If the GUI with the input name is already shown and on the top, it is hidden, else it is shown. 291 */ 292 /*static*/ void GUIManager::toggleGUI(const std::string& name, bool bHidePrevious, bool bNoInput) 293 { 294 GUIManager::getInstance().executeCode("getGUIFirstActive(\"" + name + "\", " + multi_cast<std::string>(bHidePrevious) + ", " + multi_cast<std::string>(bNoInput) + ")"); 295 } 296 297 /** 298 @brief 299 Helper method to toggle a specified GUI. 300 Is called by lua. 301 */ 302 void GUIManager::toggleGUIHelper(const std::string& name, bool bHidePrevious, bool bNoInput, bool show) 303 { 304 if(show) 305 GUIManager::showGUI(name, bHidePrevious, bNoInput); 306 else 307 GUIManager::hideGUI(name); 286 308 } 287 309 … … 512 534 void GUIManager::windowResized(unsigned int newWidth, unsigned int newHeight) 513 535 { 514 this->guiRenderer_->setDisplaySize(CEGUI::Size( newWidth,newHeight));515 } 516 517 /** 518 @brief Notify CEGUI if the windows loses the focus (stops hig lightof menu items, etc).536 this->guiRenderer_->setDisplaySize(CEGUI::Size((float)newWidth, (float)newHeight)); 537 } 538 539 /** 540 @brief Notify CEGUI if the windows loses the focus (stops highlighting of menu items, etc). 519 541 */ 520 542 void GUIManager::windowFocusChanged(bool bFocus) -
code/trunk/src/libraries/core/GUIManager.h
r7874 r8079 49 49 #include "util/Singleton.h" 50 50 #include "input/InputHandler.h" 51 #include "Core.h" 51 52 #include "OrxonoxClass.h" 52 53 #include "WindowEventListener.h" … … 88 89 void showGUIExtra(const std::string& name, const std::string& ptr, bool bHidePrevious = false, bool bNoInput = false); 89 90 static void hideGUI(const std::string& name); 91 static void toggleGUI(const std::string& name, bool bHidePrevious = false, bool bNoInput = false); 92 void toggleGUIHelper(const std::string& name, bool bHidePrevious, bool bNoInput, bool show); // tolua_export 90 93 void keyESC(); 91 94 void setBackgroundImage(const std::string& imageSet, const std::string imageName); // tolua_export 92 95 void setBackgroundImage(const std::string& image); 96 97 /** 98 @brief Helper method to get the developer's mode without having to export Core.h. 99 @see Core::inDevMode 100 */ 101 static bool inDevMode(void) { return Core::getInstance().inDevMode(); } // tolua_export 93 102 94 103 //! Creates a new InputState to be used with a GUI Sheet -
code/trunk/src/libraries/core/Game.cc
r7284 r8079 50 50 #include "GameMode.h" 51 51 #include "GameState.h" 52 #include "GraphicsManager.h" 52 53 #include "GUIManager.h" 53 54 #include "command/ConsoleCommand.h" … … 60 61 static void printFPS() 61 62 { COUT(0) << Game::getInstance().getAvgFPS() << std::endl; } 62 SetConsoleCommand(" printFPS", &printFPS);63 SetConsoleCommand("Stats", "printFPS", &printFPS); 63 64 static void printTickTime() 64 65 { COUT(0) << Game::getInstance().getAvgTickTime() << std::endl; } 65 SetConsoleCommand(" printTickTime", &printTickTime);66 SetConsoleCommand("Stats", "printTickTime", &printTickTime); 66 67 67 68 std::map<std::string, GameStateInfo> Game::gameStateDeclarations_s; … … 142 143 SetConfigValue(statisticsAvgLength_, 1000000) 143 144 .description("Sets the time in microseconds interval at which average fps, etc. gets calculated."); 144 SetConfigValue(fpsLimit_, 50) 145 146 SetConfigValueExternal(fpsLimit_, "GraphicsSettings", "fpsLimit", 50) 145 147 .description("Sets the desired frame rate (0 for no limit)."); 146 148 } … … 207 209 208 210 // Limit frame rate 209 this->updateFPSLimiter(); 211 static bool hasVSync = GraphicsManager::getInstance().hasVSyncEnabled(); // can be static since changes of VSync currently require a restart 212 if (this->fpsLimit_ > 0 && !hasVSync) 213 this->updateFPSLimiter(); 210 214 } 211 215 -
code/trunk/src/libraries/core/GraphicsManager.cc
r7874 r8079 49 49 #include "SpecialConfig.h" 50 50 #include "util/Clock.h" 51 #include "util/Convert.h" 51 52 #include "util/Exception.h" 52 53 #include "util/StringUtils.h" … … 57 58 #include "Game.h" 58 59 #include "GameMode.h" 60 #include "GUIManager.h" 59 61 #include "Loader.h" 60 62 #include "MemoryArchive.h" 61 63 #include "PathConfig.h" 64 #include "ViewportEventListener.h" 62 65 #include "WindowEventListener.h" 63 66 #include "XMLFile.h" 64 67 #include "command/ConsoleCommand.h" 68 #include "input/InputManager.h" 65 69 66 70 namespace orxonox 67 71 { 72 static const std::string __CC_GraphicsManager_group = "GraphicsManager"; 73 static const std::string __CC_setScreenResolution_name = "setScreenResolution"; 74 static const std::string __CC_setFSAA_name = "setFSAA"; 75 static const std::string __CC_setVSync_name = "setVSync"; 76 DeclareConsoleCommand(__CC_GraphicsManager_group, __CC_setScreenResolution_name, &prototype::string__uint_uint_bool); 77 DeclareConsoleCommand(__CC_GraphicsManager_group, __CC_setFSAA_name, &prototype::string__string); 78 DeclareConsoleCommand(__CC_GraphicsManager_group, __CC_setVSync_name, &prototype::string__bool); 79 68 80 static const std::string __CC_printScreen_name = "printScreen"; 69 81 DeclareConsoleCommand(__CC_printScreen_name, &prototype::void__void); … … 95 107 , renderWindow_(0) 96 108 , viewport_(0) 109 , lastFrameStartTime_(0.0f) 110 , lastFrameEndTime_(0.0f) 97 111 { 98 112 RegisterObject(GraphicsManager); … … 136 150 Ogre::WindowEventUtilities::removeWindowEventListener(renderWindow_, ogreWindowEventListener_.get()); 137 151 ModifyConsoleCommand(__CC_printScreen_name).resetFunction(); 152 ModifyConsoleCommand(__CC_GraphicsManager_group, __CC_setScreenResolution_name).resetFunction(); 153 ModifyConsoleCommand(__CC_GraphicsManager_group, __CC_setFSAA_name).resetFunction(); 154 ModifyConsoleCommand(__CC_GraphicsManager_group, __CC_setVSync_name).resetFunction(); 138 155 139 156 // Undeclare the resources … … 304 321 CCOUT(4) << "Configuring Renderer" << std::endl; 305 322 306 if (!ogreRoot_->restoreConfig() || Core::getInstance().getOgreConfigTimestamp() > Core::getInstance().getLastLevelTimestamp()) 323 bool updatedConfig = Core::getInstance().getOgreConfigTimestamp() > Core::getInstance().getLastLevelTimestamp(); 324 if (updatedConfig) 325 COUT(2) << "Ogre config file has changed, but no level was started since then. Displaying config dialogue again to verify the changes." << std::endl; 326 327 if (!ogreRoot_->restoreConfig() || updatedConfig) 307 328 { 308 329 if (!ogreRoot_->showConfigDialog()) … … 330 351 // add console commands 331 352 ModifyConsoleCommand(__CC_printScreen_name).setFunction(&GraphicsManager::printScreen, this); 353 ModifyConsoleCommand(__CC_GraphicsManager_group, __CC_setScreenResolution_name).setFunction(&GraphicsManager::setScreenResolution, this); 354 ModifyConsoleCommand(__CC_GraphicsManager_group, __CC_setFSAA_name).setFunction(&GraphicsManager::setFSAA, this); 355 ModifyConsoleCommand(__CC_GraphicsManager_group, __CC_setVSync_name).setFunction(&GraphicsManager::setVSync, this); 332 356 } 333 357 … … 343 367 @note 344 368 A note about the Ogre::FrameListener: Even though we don't use them, 345 they still get called. However, the delta times are not correct (except 346 for timeSinceLastFrame, which is the most important). A little research 347 as shown that there is probably only one FrameListener that doesn't even 348 need the time. So we shouldn't run into problems. 369 they still get called. 349 370 */ 350 371 void GraphicsManager::postUpdate(const Clock& time) 351 372 { 373 // Time before rendering 374 uint64_t timeBeforeTick = time.getRealMicroseconds(); 375 376 // Ogre's time keeping object 352 377 Ogre::FrameEvent evt; 353 evt.timeSinceLastFrame = time.getDeltaTime(); 354 evt.timeSinceLastEvent = time.getDeltaTime(); // note: same time, but shouldn't matter anyway 355 356 // don't forget to call _fireFrameStarted to OGRE to make sure 357 // everything goes smoothly 378 379 // Translate to Ogre float times before the update 380 float temp = lastFrameStartTime_; 381 lastFrameStartTime_ = (float)timeBeforeTick * 0.000001f; 382 evt.timeSinceLastFrame = lastFrameStartTime_ - temp; 383 evt.timeSinceLastEvent = lastFrameStartTime_ - lastFrameEndTime_; 384 385 // Ogre requires the time too 358 386 ogreRoot_->_fireFrameStarted(evt); 359 387 … … 361 389 // This calls the WindowEventListener objects. 362 390 Ogre::WindowEventUtilities::messagePump(); 363 // make sure the window stays active even when not focused391 // Make sure the window stays active even when not focused 364 392 // (probably only necessary on windows) 365 393 this->renderWindow_->setActive(true); 366 367 // Time before rendering368 uint64_t timeBeforeTick = time.getRealMicroseconds();369 394 370 395 // Render frame … … 375 400 Game::getInstance().subtractTickTime((int32_t)(timeAfterTick - timeBeforeTick)); 376 401 377 // again, just to be sure OGRE works fine 378 ogreRoot_->_fireFrameEnded(evt); // note: uses the same time as _fireFrameStarted 402 // Translate to Ogre float times after the update 403 temp = lastFrameEndTime_; 404 lastFrameEndTime_ = (float)timeBeforeTick * 0.000001f; 405 evt.timeSinceLastFrame = lastFrameEndTime_ - temp; 406 evt.timeSinceLastEvent = lastFrameEndTime_ - lastFrameStartTime_; 407 408 // Ogre also needs the time after the frame finished 409 ogreRoot_->_fireFrameEnded(evt); 379 410 } 380 411 381 412 void GraphicsManager::setCamera(Ogre::Camera* camera) 382 413 { 414 Ogre::Camera* oldCamera = this->viewport_->getCamera(); 415 383 416 this->viewport_->setCamera(camera); 417 GUIManager::getInstance().setCamera(camera); 418 419 for (ObjectList<ViewportEventListener>::iterator it = ObjectList<ViewportEventListener>::begin(); it != ObjectList<ViewportEventListener>::end(); ++it) 420 it->cameraChanged(this->viewport_, oldCamera); 384 421 } 385 422 … … 440 477 bool GraphicsManager::isFullScreen() const 441 478 { 479 return this->renderWindow_->isFullScreen(); 480 } 481 482 unsigned int GraphicsManager::getWindowWidth() const 483 { 484 return this->renderWindow_->getWidth(); 485 } 486 487 unsigned int GraphicsManager::getWindowHeight() const 488 { 489 return this->renderWindow_->getHeight(); 490 } 491 492 bool GraphicsManager::hasVSyncEnabled() const 493 { 442 494 Ogre::ConfigOptionMap& options = ogreRoot_->getRenderSystem()->getConfigOptions(); 443 if (options.find("Full Screen") != options.end()) 444 { 445 if (options["Full Screen"].currentValue == "Yes") 446 return true; 447 else 448 return false; 449 } 495 Ogre::ConfigOptionMap::iterator it = options.find("VSync"); 496 if (it != options.end()) 497 return (it->second.currentValue == "Yes"); 450 498 else 451 {452 COUT(0) << "Could not find 'Full Screen' render system option. Fix This!!!" << std::endl;453 499 return false; 454 } 500 } 501 502 std::string GraphicsManager::getFSAAMode() const 503 { 504 Ogre::ConfigOptionMap& options = ogreRoot_->getRenderSystem()->getConfigOptions(); 505 Ogre::ConfigOptionMap::iterator it = options.find("FSAA"); 506 if (it != options.end()) 507 return it->second.currentValue; 508 else 509 return ""; 510 } 511 512 std::string GraphicsManager::setScreenResolution(unsigned int width, unsigned int height, bool fullscreen) 513 { 514 // workaround to detect if the colour depth should be written to the config file 515 bool bWriteColourDepth = false; 516 Ogre::ConfigOptionMap& options = ogreRoot_->getRenderSystem()->getConfigOptions(); 517 Ogre::ConfigOptionMap::iterator it = options.find("Video Mode"); 518 if (it != options.end()) 519 bWriteColourDepth = (it->second.currentValue.find('@') != std::string::npos); 520 521 if (bWriteColourDepth) 522 { 523 this->ogreRoot_->getRenderSystem()->setConfigOption("Video Mode", multi_cast<std::string>(width) 524 + " x " + multi_cast<std::string>(height) 525 + " @ " + multi_cast<std::string>(this->getRenderWindow()->getColourDepth()) + "-bit colour"); 526 } 527 else 528 { 529 this->ogreRoot_->getRenderSystem()->setConfigOption("Video Mode", multi_cast<std::string>(width) 530 + " x " + multi_cast<std::string>(height)); 531 } 532 533 this->ogreRoot_->getRenderSystem()->setConfigOption("Full Screen", fullscreen ? "Yes" : "No"); 534 535 std::string validate = this->ogreRoot_->getRenderSystem()->validateConfigOptions(); 536 537 if (validate == "") 538 { 539 GraphicsManager::getInstance().getRenderWindow()->setFullscreen(fullscreen, width, height); 540 this->ogreRoot_->saveConfig(); 541 Core::getInstance().updateOgreConfigTimestamp(); 542 // Also reload the input devices 543 InputManager::getInstance().reload(); 544 } 545 546 return validate; 547 } 548 549 std::string GraphicsManager::setFSAA(const std::string& mode) 550 { 551 this->ogreRoot_->getRenderSystem()->setConfigOption("FSAA", mode); 552 553 std::string validate = this->ogreRoot_->getRenderSystem()->validateConfigOptions(); 554 555 if (validate == "") 556 { 557 //this->ogreRoot_->getRenderSystem()->reinitialise(); // can't use this that easily, because it recreates the render window, invalidating renderWindow_ 558 this->ogreRoot_->saveConfig(); 559 Core::getInstance().updateOgreConfigTimestamp(); 560 } 561 562 return validate; 563 } 564 565 std::string GraphicsManager::setVSync(bool vsync) 566 { 567 this->ogreRoot_->getRenderSystem()->setConfigOption("VSync", vsync ? "Yes" : "No"); 568 569 std::string validate = this->ogreRoot_->getRenderSystem()->validateConfigOptions(); 570 571 if (validate == "") 572 { 573 //this->ogreRoot_->getRenderSystem()->reinitialise(); // can't use this that easily, because it recreates the render window, invalidating renderWindow_ 574 this->ogreRoot_->saveConfig(); 575 Core::getInstance().updateOgreConfigTimestamp(); 576 } 577 578 return validate; 455 579 } 456 580 -
code/trunk/src/libraries/core/GraphicsManager.h
r7401 r8079 54 54 #include "OrxonoxClass.h" 55 55 56 // tolua_begin 56 57 namespace orxonox 57 58 { … … 60 61 Graphics engine manager class 61 62 */ 62 class _CoreExport GraphicsManager : public Singleton<GraphicsManager>, public OrxonoxClass, public Ogre::LogListener 63 { 63 class _CoreExport GraphicsManager 64 // tolua_end 65 : public Singleton<GraphicsManager>, public OrxonoxClass, public Ogre::LogListener 66 { // tolua_export 64 67 friend class Singleton<GraphicsManager>; 65 68 public: … … 74 77 Ogre::RenderWindow* getRenderWindow() { return this->renderWindow_; } 75 78 size_t getRenderWindowHandle(); 79 80 // tolua_begin 81 static GraphicsManager& getInstance() { return Singleton<GraphicsManager>::getInstance(); } // tolua_export 82 76 83 bool isFullScreen() const; 84 unsigned int getWindowWidth() const; 85 unsigned int getWindowHeight() const; 86 87 bool hasVSyncEnabled() const; 88 std::string getFSAAMode() const; 89 // tolua_end 77 90 78 91 void upgradeToGraphics(); … … 96 109 // console commands 97 110 void printScreen(); 111 std::string setScreenResolution(unsigned int width, unsigned int height, bool fullscreen); 112 std::string setFSAA(const std::string& mode); 113 std::string setVSync(bool vsync); 98 114 99 115 scoped_ptr<OgreWindowEventListener> ogreWindowEventListener_; //!< Pimpl to hide OgreWindowUtilities.h … … 105 121 Ogre::RenderWindow* renderWindow_; //!< the one and only render window 106 122 Ogre::Viewport* viewport_; //!< default full size viewport 123 float lastFrameStartTime_; //!< Time stamp of the beginning of the last frame 124 float lastFrameEndTime_; //!< Time stamp of the end of the last frame 107 125 108 126 // XML files for the resources and the debug overlay … … 121 139 122 140 static GraphicsManager* singletonPtr_s; //!< Pointer to the Singleton 141 // tolua_begin 123 142 }; 124 143 } 144 // tolua_end 125 145 126 146 #endif /* _GraphicsManager_H__ */ -
code/trunk/src/libraries/core/Loader.cc
r7648 r8079 147 147 Returns true if successful. 148 148 */ 149 bool Loader::load(const XMLFile* file, const ClassTreeMask& mask, bool verbose )149 bool Loader::load(const XMLFile* file, const ClassTreeMask& mask, bool verbose, bool bRemoveLuaTags) 150 150 { 151 151 if (!file) … … 155 155 156 156 std::string xmlInput; 157 if (file->getLuaSupport() )157 if (file->getLuaSupport() && !bRemoveLuaTags) 158 158 { 159 159 // Use the LuaState to replace the XML tags (calls our function) … … 172 172 } 173 173 xmlInput = Resource::open(file->getFilename())->getAsString(); 174 175 if (bRemoveLuaTags) 176 { 177 // Remove all Lua code. 178 // Note: we only need this to speed up parsing of level files at the 179 // start of the program. 180 // Assumption: the LevelInfo tag does not use Lua scripting 181 xmlInput = removeLuaTags(xmlInput); 182 } 174 183 } 175 184 … … 271 280 } 272 281 273 std::string Loader::replaceLuaTags(const std::string& text) 274 { 275 // create map with all Lua tags 276 std::map<size_t, bool> luaTags; 282 bool Loader::getLuaTags(const std::string& text, std::map<size_t, bool>& luaTags) 283 { 284 // fill map with all Lua tags 277 285 { 278 286 size_t pos = 0; … … 328 336 { 329 337 COUT(2) << "Warning: Error in level file" << std::endl; 330 // todo: errorhandling 331 return ""; 332 } 333 } 338 // TODO: error handling 339 return false; 340 } 341 } 342 343 return true; 344 } 345 346 std::string Loader::replaceLuaTags(const std::string& text) 347 { 348 // create a map with all lua tags 349 std::map<size_t, bool> luaTags; 350 if (!getLuaTags(text, luaTags)) 351 return ""; 334 352 335 353 // Use a stringstream object to speed up the parsing … … 421 439 return output.str(); 422 440 } 441 442 std::string Loader::removeLuaTags(const std::string& text) 443 { 444 // create a map with all lua tags 445 std::map<size_t, bool> luaTags; 446 if (!getLuaTags(text, luaTags)) 447 return ""; 448 449 // Use a stringstream object to speed up the concatenation 450 std::ostringstream output; 451 452 // cut the original string into pieces and only write the non Lua parts 453 std::map<size_t, bool>::iterator it = luaTags.begin(); 454 bool bLuaCode = false; 455 size_t start = 0; 456 size_t end = 0; 457 458 do 459 { 460 if (it != luaTags.end()) 461 end = (it++)->first; 462 else 463 end = std::string::npos; 464 465 if (!bLuaCode) 466 { 467 output << text.substr(start, end - start); 468 start = end + 5; 469 } 470 else 471 start = end + 2; 472 473 bLuaCode = !bLuaCode; 474 } 475 while (end != std::string::npos); 476 477 return output.str(); 478 } 423 479 } -
code/trunk/src/libraries/core/Loader.h
r7648 r8079 42 42 #include "CorePrereqs.h" 43 43 44 #include <map> 44 45 #include <vector> 45 46 #include "ClassTreeMask.h" … … 61 62 static bool reload(const ClassTreeMask& mask = ClassTreeMask(), bool verbose = true); 62 63 63 static bool load(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(), bool verbose = true); 64 static bool load(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(), 65 bool verbose = true, bool bRemoveLuaTags = false); 64 66 static void unload(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask()); 65 67 static bool reload(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(), bool verbose = true); 66 68 67 69 static std::string replaceLuaTags(const std::string& text); 70 static std::string removeLuaTags(const std::string& text); 68 71 69 72 static ClassTreeMask currentMask_s; 70 73 71 74 private: 75 static bool getLuaTags(const std::string& text, std::map<size_t, bool>& luaTags); 76 72 77 static std::vector<std::pair<const XMLFile*, ClassTreeMask> > files_s; 73 78 }; -
code/trunk/src/libraries/core/OrxonoxClass.h
r7850 r8079 194 194 195 195 protected: 196 virtual ~DestructionListener() {} 197 196 198 inline void registerAsDestructionListener(OrxonoxClass* object) 197 199 { if (object) { object->registerDestructionListener(this); } } -
code/trunk/src/libraries/core/WeakPtr.h
r7850 r8079 129 129 130 130 /// Destructor 131 inline ~WeakPtr()131 inline virtual ~WeakPtr() 132 132 { 133 133 this->unregisterAsDestructionListener(this->base_); -
code/trunk/src/libraries/core/command/CommandEvaluation.h
r7401 r8079 70 70 71 71 @remarks execCommand_ and hintCommand_ can be different in this case: There are multiple 72 commands avaliable, let's say "tcl" , "tclexecute", and "tclquery". The user enters73 "tcl", which is already a valid command. Now execCommand_ points to the "tcl"-command,74 but hintCommand_ still points to the autocompletion command of CommandExecutor, because75 the auto-completion list must still return the three possible commands, "tcl tclexecute tclquery"76 because the user may want to execute "tclquery" and needs auto-completion.72 commands avaliable, let's say "tcl" and "TclThreadManager". The user enters "tcl", which 73 is already a valid command. Now execCommand_ points to the "tcl"-command, but hintCommand_ 74 still points to the autocompletion command of CommandExecutor, because the auto-completion 75 list must still return the two possible commands, "tcl TclThreadManager" because the user 76 may want to write "TclThreadManager ..." and needs auto-completion. 77 77 78 78 @see See @ref CommandExecutorExample "this description" for an example. -
code/trunk/src/libraries/core/command/ConsoleCommand.h
r7861 r8079 317 317 inline void void__void(void) {} 318 318 inline void void__string(const std::string&) {} 319 320 inline std::string string__bool(bool) { return ""; } 321 inline std::string string__string(const std::string&) { return ""; } 322 inline std::string string__uint_uint_bool(unsigned int, unsigned int, bool) { return ""; } 319 323 } 320 324 -
code/trunk/src/libraries/core/command/ConsoleCommandCompilation.cc
r7401 r8079 46 46 namespace orxonox 47 47 { 48 SetConsoleCommand("source", source).argumentCompleter(0, autocompletion::files()); 48 // SetConsoleCommand("source", source).argumentCompleter(0, autocompletion::files()); // disabled because we use the implementation in Tcl 49 49 SetConsoleCommand("echo", echo); 50 SetConsoleCommand("puts", puts); 51 52 SetConsoleCommand("read", read).argumentCompleter(0, autocompletion::files()); 53 SetConsoleCommand("append", append).argumentCompleter(0, autocompletion::files()); 54 SetConsoleCommand("write", write).argumentCompleter(0, autocompletion::files()); 50 // SetConsoleCommand("puts", puts); // disabled because we use the implementation in Tcl 51 52 // SetConsoleCommand("read", read).argumentCompleter(0, autocompletion::files()); // disabled because we use the implementation in Tcl 53 // SetConsoleCommand("append", append).argumentCompleter(0, autocompletion::files()); // disabled because we use the implementation in Tcl 54 // SetConsoleCommand("write", write).argumentCompleter(0, autocompletion::files()); // disabled because we use the implementation in Tcl 55 55 56 56 SetConsoleCommand("calculate", calculate); -
code/trunk/src/libraries/core/command/Shell.cc
r7401 r8079 46 46 { 47 47 SetConsoleCommand("log", OutputHandler::log ); 48 SetConsoleCommand("error", OutputHandler::error ) ;49 SetConsoleCommand("warning", OutputHandler::warning) ;50 SetConsoleCommand("info", OutputHandler::info ) ;51 SetConsoleCommand("debug", OutputHandler::debug ) ;48 SetConsoleCommand("error", OutputHandler::error ).hide(); 49 SetConsoleCommand("warning", OutputHandler::warning).hide(); 50 SetConsoleCommand("info", OutputHandler::info ).hide(); 51 SetConsoleCommand("debug", OutputHandler::debug ).hide(); 52 52 53 53 unsigned int Shell::cacheSize_s; -
code/trunk/src/libraries/core/command/TclBind.cc
r7401 r8079 45 45 { 46 46 SetConsoleCommand("tcl", &TclBind::tcl); 47 SetConsoleCommand("bgerror", &TclBind::bgerror) ;47 SetConsoleCommand("bgerror", &TclBind::bgerror).hide(); 48 48 49 49 TclBind* TclBind::singletonPtr_s = 0; … … 91 91 92 92 this->interpreter_->def("::orxonox::query", TclBind::tcl_query, Tcl::variadic()); 93 this->interpreter_->def("::orxonox::execute", TclBind::tcl_execute, Tcl::variadic()); 93 94 this->interpreter_->def("::orxonox::crossquery", TclThreadManager::tcl_crossquery, Tcl::variadic()); 94 this->interpreter_->def("execute", TclBind::tcl_execute, Tcl::variadic());95 95 this->interpreter_->def("::orxonox::crossexecute", TclThreadManager::tcl_crossexecute, Tcl::variadic()); 96 96 97 97 try 98 98 { 99 this->interpreter_->eval("proc query {args} { ::orxonox::query $args }"); 99 this->interpreter_->def("query", TclBind::tcl_query, Tcl::variadic()); 100 this->interpreter_->def("execute", TclBind::tcl_execute, Tcl::variadic()); 100 101 this->interpreter_->eval("proc crossquery {id args} { ::orxonox::crossquery 0 $id $args }"); 101 this->interpreter_->eval("proc crossexecute {id args} { ::orxonox::cross query0 $id $args }");102 this->interpreter_->eval("proc crossexecute {id args} { ::orxonox::crossexecute 0 $id $args }"); 102 103 this->interpreter_->eval("proc running {} { return 1 }"); 103 104 this->interpreter_->eval("set id 0"); … … 154 155 { 155 156 COUT(4) << "Tcl_query: " << args.get() << std::endl; 156 157 return TclBind::tcl_helper(args, true); 158 } 159 160 /** 161 @brief Callback: Used to send an Orxonox-command from Tcl to the CommandExecutor. 162 */ 163 void TclBind::tcl_execute(Tcl::object const &args) 164 { 165 COUT(4) << "Tcl_execute: " << args.get() << std::endl; 166 TclBind::tcl_helper(args, false); 167 } 168 169 /** 170 @brief Helper function, used by tcl_query() and tcl_execute(). 171 */ 172 std::string TclBind::tcl_helper(Tcl::object const &args, bool bQuery) 173 { 157 174 const std::string& command = stripEnclosingBraces(args.get()); 158 175 159 176 int error; 177 std::string result; 178 160 179 CommandEvaluation evaluation = CommandExecutor::evaluate(command); 161 const std::string& result = evaluation.query(&error); 180 181 if (bQuery) 182 result = evaluation.query(&error).getString(); 183 else 184 error = evaluation.execute(); 185 162 186 switch (error) 163 187 { … … 175 199 176 200 /** 177 @brief Callback: Used to send an Orxonox-command from Tcl to the CommandExecutor.178 */179 void TclBind::tcl_execute(Tcl::object const &args)180 {181 COUT(4) << "Tcl_execute: " << args.get() << std::endl;182 const std::string& command = stripEnclosingBraces(args.get());183 184 if (CommandExecutor::execute(command, false))185 {186 COUT(1) << "Error: Can't execute command \"" << command << "\"!" << std::endl;187 }188 }189 190 /**191 201 @brief Console command, executes Tcl code. Can be used to bind Tcl-commands to a key, because native 192 202 Tcl-commands can not be evaluated and are thus not supported by the key-binder. … … 198 208 try 199 209 { 200 const std::string& output = TclBind::getInstance().interpreter_->eval("uplevel #0 " + tclcode); 201 if (!output.empty()) 202 { 203 COUT(0) << "tcl> " << output << std::endl; 204 } 205 return output; 210 return TclBind::getInstance().interpreter_->eval("uplevel #0 " + tclcode); 206 211 } 207 212 catch (Tcl::tcl_error const &e) 208 { COUT(1) << " tcl> Error: " << e.what() << std::endl; }213 { COUT(1) << "Tcl error: " << e.what() << std::endl; } 209 214 } 210 215 -
code/trunk/src/libraries/core/command/TclBind.h
r7401 r8079 126 126 TclBind(const TclBind& other); ///< Copy-constructor, not implemented 127 127 128 static std::string tcl_helper(Tcl::object const &args, bool bQuery); 129 128 130 Tcl::interpreter* interpreter_; ///< The wrapped Tcl interpreter 129 131 std::string tclDataPath_; ///< The path to the directory that contains the Orxonox-specific Tcl-files -
code/trunk/src/libraries/core/command/TclThreadManager.cc
r7401 r8079 55 55 const float TCLTHREADMANAGER_MAX_CPU_USAGE = 0.50f; 56 56 57 SetConsoleCommand("tclexecute", &TclThreadManager::execute).argumentCompleter(0, autocompletion::tclthreads());58 SetConsoleCommand("tclquery", &TclThreadManager::query ).argumentCompleter(0, autocompletion::tclthreads());59 57 SetConsoleCommand("TclThreadManager", "create", &TclThreadManager::create); 60 58 SetConsoleCommand("TclThreadManager", "destroy", &TclThreadManager::destroy).argumentCompleter(0, autocompletion::tclthreads()); -
code/trunk/src/libraries/core/input/InputManager.cc
r7874 r8079 641 641 state->destroy(); 642 642 } 643 644 bool InputManager::setMouseExclusive(const std::string& name, TriBool::Value value) 645 { 646 if (name == "empty") 647 { 648 COUT(2) << "InputManager: Changing the empty state is not allowed!" << std::endl; 649 return false; 650 } 651 std::map<std::string, InputState*>::iterator it = statesByName_.find(name); 652 if (it != statesByName_.end()) 653 { 654 it->second->setMouseExclusive(value); 655 return true; 656 } 657 return false; 658 } 643 659 } -
code/trunk/src/libraries/core/input/InputManager.h
r7874 r8079 163 163 */ 164 164 bool destroyState(const std::string& name); // tolua_export 165 /** 166 @brief 167 Changes the mouse mode of an input state. 168 @return 169 True if the call was successful, fals if the name was not found 170 */ 171 bool setMouseExclusive(const std::string& name, TriBool::Value value); // tolua_export 165 172 166 173 //------------------------------- -
code/trunk/src/libraries/core/input/KeyBinder.cc
r7958 r8079 431 431 // decrease counter 432 432 button->nCommands_[mode_index]--; 433 // note: we don't replace the old array - it's not one element too large, but no one cares since nCommands_ defines the size 433 // old array would not get deleted if nCommands_ is now 0 434 // otherwise: nobody cares about an array that is one element too large - nCommands_ defines the size 435 if (button->nCommands_[mode_index] == 0) 436 { 437 delete[] button->commands_[mode_index]; 438 button->commands_[mode_index] = 0; 439 } 434 440 435 441 // decrement the index since we shifted the array and continue searching for more occurrences of the command -
code/trunk/src/libraries/core/input/Keyboard.cc
r6422 r8079 36 36 { 37 37 // update modifiers 38 if (arg.key == OIS::KC_RMENU || arg.key == OIS::KC_LMENU) 39 modifiers_ |= KeyboardModifier::Alt; // alt key 40 if (arg.key == OIS::KC_RCONTROL || arg.key == OIS::KC_LCONTROL) 41 modifiers_ |= KeyboardModifier::Ctrl; // ctrl key 42 if (arg.key == OIS::KC_RSHIFT || arg.key == OIS::KC_LSHIFT) 43 modifiers_ |= KeyboardModifier::Shift; // shift key 38 switch (arg.key) 39 { 40 case OIS::KC_RMENU: 41 case OIS::KC_LMENU: 42 modifiers_ |= KeyboardModifier::Alt; // alt key 43 break; 44 case OIS::KC_RCONTROL: 45 case OIS::KC_LCONTROL: 46 modifiers_ |= KeyboardModifier::Ctrl; // ctrl key 47 break; 48 case OIS::KC_RSHIFT: 49 case OIS::KC_LSHIFT: 50 modifiers_ |= KeyboardModifier::Shift; // shift key 51 break; 52 case OIS::KC_TAB: 53 // Do not distribute the alt+tab event (messes with the operating system) 54 if ((modifiers_ & KeyboardModifier::Alt) != 0) 55 return true; 56 default:; 57 } 44 58 45 // Do not distribute the alt+tab event (messes with the operating system) 46 if ((modifiers_ & KeyboardModifier::Alt) != 0 && arg.key == OIS::KC_TAB) 47 return true; 48 49 KeyEvent evt(arg); 59 KeyEvent evt(static_cast<KeyCode::ByEnum>(arg.key), Keyboard::getKeyText(arg), 0); 50 60 super::buttonPressed(evt); 51 61 return true; … … 56 66 { 57 67 // update modifiers 58 if (arg.key == OIS::KC_RMENU || arg.key == OIS::KC_LMENU) 59 modifiers_ &= ~KeyboardModifier::Alt; // alt key 60 if (arg.key == OIS::KC_RCONTROL || arg.key == OIS::KC_LCONTROL) 61 modifiers_ &= ~KeyboardModifier::Ctrl; // ctrl key 62 if (arg.key == OIS::KC_RSHIFT || arg.key == OIS::KC_LSHIFT) 63 modifiers_ &= ~KeyboardModifier::Shift; // shift key 68 switch (arg.key) 69 { 70 case OIS::KC_RMENU: 71 case OIS::KC_LMENU: 72 modifiers_ &= ~KeyboardModifier::Alt; // alt key 73 break; 74 case OIS::KC_RCONTROL: 75 case OIS::KC_LCONTROL: 76 modifiers_ &= ~KeyboardModifier::Ctrl; // ctrl key 77 break; 78 case OIS::KC_RSHIFT: 79 case OIS::KC_LSHIFT: 80 modifiers_ &= ~KeyboardModifier::Shift; // shift key 81 break; 82 default:; 83 } 64 84 65 KeyEvent evt( arg);85 KeyEvent evt(static_cast<KeyCode::ByEnum>(arg.key), Keyboard::getKeyText(arg), 0); 66 86 super::buttonReleased(evt); 67 87 return true; 68 88 } 89 90 /// A map which returns the corresponding chars for some key codes 91 unsigned int Keyboard::getKeyText(const OIS::KeyEvent& arg) 92 { 93 switch (arg.key) 94 { 95 case OIS::KC_NUMPAD0: return static_cast<unsigned int>('0'); 96 case OIS::KC_NUMPAD1: return static_cast<unsigned int>('1'); 97 case OIS::KC_NUMPAD2: return static_cast<unsigned int>('2'); 98 case OIS::KC_NUMPAD3: return static_cast<unsigned int>('3'); 99 case OIS::KC_NUMPAD4: return static_cast<unsigned int>('4'); 100 case OIS::KC_NUMPAD5: return static_cast<unsigned int>('5'); 101 case OIS::KC_NUMPAD6: return static_cast<unsigned int>('6'); 102 case OIS::KC_NUMPAD7: return static_cast<unsigned int>('7'); 103 case OIS::KC_NUMPAD8: return static_cast<unsigned int>('8'); 104 case OIS::KC_NUMPAD9: return static_cast<unsigned int>('9'); 105 case OIS::KC_DECIMAL: return static_cast<unsigned int>('.'); 106 case OIS::KC_DIVIDE: return static_cast<unsigned int>('/'); 107 case OIS::KC_NUMPADENTER: return static_cast<unsigned int>('\n'); 108 default: return arg.text; 109 } 110 } 69 111 } -
code/trunk/src/libraries/core/input/Keyboard.h
r7809 r8079 83 83 static std::string getClassNameImpl() { return "Keyboard"; } 84 84 85 static unsigned int getKeyText(const OIS::KeyEvent& arg); 86 85 87 //! Bit mask representing keyboard modifiers 86 88 int modifiers_;
Note: See TracChangeset
for help on using the changeset viewer.