Changeset 3349
- Timestamp:
- Jul 25, 2009, 2:14:05 PM (15 years ago)
- Location:
- code/branches/resource/src
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/resource/src/core/Core.cc
r3348 r3349 41 41 #include <cstdio> 42 42 #include <boost/filesystem.hpp> 43 #include <OgreRenderWindow.h> 43 44 44 45 #ifdef ORXONOX_PLATFORM_WINDOWS … … 69 70 #include "Factory.h" 70 71 #include "GameMode.h" 72 #include "GraphicsManager.h" 73 #include "GUIManager.h" 71 74 #include "Identifier.h" 72 75 #include "Language.h" … … 75 78 #include "TclBind.h" 76 79 #include "TclThreadManager.h" 80 #include "input/InputManager.h" 77 81 78 82 namespace orxonox … … 346 350 return; 347 351 352 // Load OGRE including the render window 353 this->graphicsManager_ = new GraphicsManager(); 354 355 // The render window width and height are used to set up the mouse movement. 356 size_t windowHnd = 0; 357 Ogre::RenderWindow* renderWindow = GraphicsManager::getInstance().getRenderWindow(); 358 renderWindow->getCustomAttribute("WINDOW", &windowHnd); 359 360 // Calls the InputManager which sets up the input devices. 361 inputManager_ = new InputManager(windowHnd); 362 363 // load the CEGUI interface 364 guiManager_ = new GUIManager(renderWindow); 365 348 366 GameMode::setShowsGraphics(true); 349 367 bGraphicsLoaded_ = true; … … 354 372 if (!bGraphicsLoaded_) 355 373 return; 374 375 delete this->guiManager_; 376 delete this->inputManager_; 377 delete graphicsManager_; 356 378 357 379 bGraphicsLoaded_ = false; … … 646 668 } 647 669 648 void Core::update(const Clock& time) 649 { 650 this->tclThreadManager_->update(time); 670 bool Core::preUpdate(const Clock& time) throw() 671 { 672 std::string exceptionMessage; 673 try 674 { 675 // process input events 676 this->inputManager_->update(time); 677 // process gui events 678 this->guiManager_->update(time); 679 // process thread commands 680 this->tclThreadManager_->update(time); 681 } 682 catch (const std::exception& ex) 683 { exceptionMessage = ex.what(); } 684 catch (...) 685 { exceptionMessage = "Unknown exception"; } 686 if (!exceptionMessage.empty()) 687 { 688 COUT(0) << "An exception occurred in the Core preUpdate: " << exceptionMessage << std::endl; 689 COUT(0) << "This should really never happen! Closing the program." << std::endl; 690 return false; 691 } 692 return true; 693 } 694 695 bool Core::postUpdate(const Clock& time) throw() 696 { 697 std::string exceptionMessage; 698 try 699 { 700 // Render (doesn't throw) 701 this->graphicsManager_->update(time); 702 } 703 catch (const std::exception& ex) 704 { exceptionMessage = ex.what(); } 705 catch (...) 706 { exceptionMessage = "Unknown exception"; } 707 if (!exceptionMessage.empty()) 708 { 709 COUT(0) << "An exception occurred in the Core postUpdate: " << exceptionMessage << std::endl; 710 COUT(0) << "This should really never happen! Closing the program." << std::endl; 711 return false; 712 } 713 return true; 651 714 } 652 715 } -
code/branches/resource/src/core/Core.h
r3345 r3349 71 71 void setConfigValues(); 72 72 73 void update(const Clock& time); 73 bool preUpdate(const Clock& time) throw(); 74 bool postUpdate(const Clock& time) throw(); 74 75 75 76 void loadGraphics(); … … 119 120 TclBind* tclBind_; 120 121 TclThreadManager* tclThreadManager_; 122 // graphical 123 InputManager* inputManager_; //!< Interface to OIS 124 GUIManager* guiManager_; //!< Interface to GUI 125 GraphicsManager* graphicsManager_; //!< Interface to OGRE 121 126 122 127 bool bDevRun_; //!< True for runs in the build directory (not installed) -
code/branches/resource/src/core/Game.cc
r3323 r3349 245 245 } 246 246 247 // UPDATE, Core first 248 bool threwException = false; 249 try 250 { 251 this->core_->update(*this->gameClock_); 252 } 253 catch (const std::exception& ex) 254 { 255 threwException = true; 256 COUT(0) << "Exception while ticking the Core: " << ex.what() << std::endl; 257 } 258 catch (...) 259 { 260 threwException = true; 261 } 262 if (threwException) 263 { 264 COUT(0) << "An exception occured while ticking the Core. This should really never happen!" << std::endl; 265 COUT(0) << "Closing the program." << std::endl; 247 // UPDATE, Core preUpdate (doesn't throw) 248 if (!this->core_->preUpdate(*this->gameClock_)) 249 { 266 250 this->stop(); 267 251 break; … … 273 257 it != this->activeStates_.end(); ++it) 274 258 { 275 bool threwException = false;259 std::string exceptionMessage; 276 260 try 277 261 { 278 262 // Add tick time for most of the states 279 263 uint64_t timeBeforeTick; 280 if ( !(*it)->ignoreTickTime())264 if ((*it)->ignoreTickTime()) 281 265 timeBeforeTick = this->gameClock_->getRealMicroseconds(); 282 266 (*it)->update(*this->gameClock_); 283 if ( !(*it)->ignoreTickTime())284 this-> addTickTime(static_cast<uint32_t>(this->gameClock_->getRealMicroseconds() - timeBeforeTick));267 if ((*it)->ignoreTickTime()) 268 this->subtractTickTime(static_cast<int32_t>(this->gameClock_->getRealMicroseconds() - timeBeforeTick)); 285 269 } 286 270 catch (const std::exception& ex) 271 { exceptionMessage = ex.what(); } 272 catch (...) 273 { exceptionMessage = "Unknown exception"; } 274 if (!exceptionMessage.empty()) 287 275 { 288 threwException = true; 289 COUT(0) << "Exception while ticking: " << ex.what() << std::endl; 290 } 291 catch (...) 292 { 293 threwException = true; 294 } 295 if (threwException) 296 { 297 COUT(1) << "An exception occured while ticking GameState '" << (*it)->getName() << "'. This should really never happen!" << std::endl; 276 COUT(1) << "An exception occurred while updating '" << (*it)->getName() << "': " << exceptionMessage << std::endl; 277 COUT(1) << "This should really never happen!" << std::endl; 298 278 COUT(1) << "Unloading all GameStates depending on the one that crashed." << std::endl; 299 279 if ((*it)->getParent() != NULL) … … 304 284 } 305 285 286 } 287 288 // UPDATE, Core postUpdate (doesn't throw) 289 if (!this->core_->postUpdate(*this->gameClock_)) 290 { 291 this->stop(); 292 break; 306 293 } 307 294 … … 344 331 } 345 332 346 void Game:: addTickTime(uint32_t length)333 void Game::subtractTickTime(int32_t length) 347 334 { 348 335 assert(!this->statisticsTickTimes_.empty()); 349 this->statisticsTickTimes_.back().tickLength += length;350 this->periodTickTime_ +=length;336 this->statisticsTickTimes_.back().tickLength -= length; 337 this->periodTickTime_ -= length; 351 338 } 352 339 -
code/branches/resource/src/core/Game.h
r3323 r3349 86 86 float getAvgFPS() { return this->avgFPS_; } 87 87 88 void addTickTime(uint32_t length);88 void subtractTickTime(int32_t length); 89 89 90 90 template <class T> -
code/branches/resource/src/core/GraphicsManager.cc
r3346 r3349 196 196 this->renderWindow_->setActive(true); 197 197 198 // render 198 // Time before rendering 199 uint64_t timeBeforeTick = time.getRealMicroseconds(); 200 201 // Render frame 199 202 ogreRoot_->_updateAllRenderTargets(); 203 204 uint64_t timeAfterTick = time.getRealMicroseconds(); 205 // Subtract the time used for rendering from the tick time counter 206 Game::getInstance().subtractTickTime(timeAfterTick - timeBeforeTick); 200 207 201 208 // again, just to be sure OGRE works fine -
code/branches/resource/src/orxonox/gamestates/GSGraphics.cc
r3346 r3349 35 35 #include "GSGraphics.h" 36 36 37 #include <boost/filesystem.hpp>38 #include <OgreRenderWindow.h>39 40 37 #include "util/Convert.h" 41 38 #include "core/Clock.h" … … 44 41 #include "core/Core.h" 45 42 #include "core/Game.h" 46 #include "core/GameMode.h"47 #include "core/GraphicsManager.h"48 43 #include "core/GUIManager.h" 49 44 #include "core/input/InputManager.h" … … 60 55 namespace orxonox 61 56 { 62 DeclareGameState(GSGraphics, "graphics", true, true);57 DeclareGameState(GSGraphics, "graphics", false, true); 63 58 64 59 GSGraphics::GSGraphics(const GameStateConstrParams& params) 65 60 : GameState(params) 66 , inputManager_(0)67 61 , console_(0) 68 , guiManager_(0)69 , graphicsManager_(0)70 62 , soundManager_(0) 71 63 , masterKeyBinder_(0) … … 99 91 Core::getInstance().loadGraphics(); 100 92 101 // Load OGRE including the render window102 this->graphicsManager_ = new GraphicsManager();103 104 93 // load debug overlay 105 94 COUT(3) << "Loading Debug Overlay..." << std::endl; 106 this->debugOverlay_ = new XMLFile( (Core::getMediaPath() / "overlay" / "debug.oxo").string());95 this->debugOverlay_ = new XMLFile(Core::getMediaPathString() + "overlay/debug.oxo"); 107 96 Loader::open(debugOverlay_); 108 109 // The render window width and height are used to set up the mouse movement.110 size_t windowHnd = 0;111 Ogre::RenderWindow* renderWindow = GraphicsManager::getInstance().getRenderWindow();112 renderWindow->getCustomAttribute("WINDOW", &windowHnd);113 114 // Calls the InputManager which sets up the input devices.115 inputManager_ = new InputManager(windowHnd);116 117 97 // load master key bindings 118 98 masterInputState_ = InputManager::getInstance().createInputState("master", true); … … 127 107 console_ = new InGameConsole(); 128 108 console_->initialise(); 129 130 // load the CEGUI interface131 guiManager_ = new GUIManager(renderWindow);132 109 133 110 // add console command to toggle GUI … … 161 138 delete this->masterKeyBinder_; 162 139 163 delete this->guiManager_;164 140 delete this->console_; 165 141 … … 169 145 delete this->soundManager_; 170 146 171 delete this->inputManager_; 172 this->inputManager_ = 0; 173 174 // HACK: 147 // HACK: (destroys a resource smart pointer) 175 148 Map::hackDestroyMap(); 176 177 delete graphicsManager_;178 149 179 150 // Unload OGRE, CEGUI and OIS … … 210 181 } 211 182 212 uint64_t timeBeforeTick = time.getRealMicroseconds();213 214 this->inputManager_->update(time);215 183 this->console_->update(time); 216 217 uint64_t timeAfterTick = time.getRealMicroseconds();218 219 // Also add our tick time220 Game::getInstance().addTickTime(timeAfterTick - timeBeforeTick);221 222 // Process gui events223 this->guiManager_->update(time);224 // Render225 this->graphicsManager_->update(time);226 184 } 227 185 } -
code/branches/resource/src/orxonox/gamestates/GSGraphics.h
r3327 r3349 61 61 private: 62 62 // managed singletons 63 InputManager* inputManager_; //!< Reference to input management64 63 InGameConsole* console_; 65 GUIManager* guiManager_; //!< Interface to GUI66 GraphicsManager* graphicsManager_; //!< Interface to Ogre67 64 SoundManager* soundManager_; //!< Keeps track of SoundBase objects 68 65 -
code/branches/resource/src/orxonox/gamestates/GSRoot.cc
r3340 r3349 45 45 namespace orxonox 46 46 { 47 DeclareGameState(GSRoot, "root", true, false);47 DeclareGameState(GSRoot, "root", false, false); 48 48 SetCommandLineSwitch(console).information("Start in console mode (text IO only)"); 49 49 // Shortcuts for easy direct loading … … 155 155 } 156 156 157 uint64_t timeBeforeTick = time.getRealMicroseconds();158 159 157 for (ObjectList<TimerBase>::iterator it = ObjectList<TimerBase>::begin(); it; ++it) 160 158 it->tick(time); … … 171 169 it->tick(leveldt * this->timeFactor_); 172 170 /*** HACK *** HACK ***/ 173 174 uint64_t timeAfterTick = time.getRealMicroseconds();175 176 // Also add our tick time177 Game::getInstance().addTickTime(timeAfterTick - timeBeforeTick);178 171 } 179 172 -
code/branches/resource/src/orxonox/objects/quest/QuestListener.cc
r3280 r3349 81 81 /** 82 82 @brief 83 Makes all QuestListener in the list aware that a certain status change has occur ed and executes them if the status change affects them.83 Makes all QuestListener in the list aware that a certain status change has occurred and executes them if the status change affects them. 84 84 @param listeners 85 85 The list of QuestListeners that have to be made aware of the status change. … … 182 182 else 183 183 { 184 COUT(1) << "An unforseen, never to happen, Error has occur ed. This is impossible!" << std::endl;184 COUT(1) << "An unforseen, never to happen, Error has occurred. This is impossible!" << std::endl; 185 185 return ""; 186 186 } -
code/branches/resource/src/orxonox/objects/quest/QuestManager.cc
r3337 r3349 323 323 { 324 324 container->status = ""; 325 COUT(1) << "An error occur ed. A Quest of un-specified status wanted to be displayed." << std::endl;325 COUT(1) << "An error occurred. A Quest of un-specified status wanted to be displayed." << std::endl; 326 326 } 327 327
Note: See TracChangeset
for help on using the changeset viewer.