Changeset 5670
- Timestamp:
- Aug 24, 2009, 9:43:34 AM (15 years ago)
- Location:
- code/branches/resource2/src
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/resource2/src/core/Core.cc
r5658 r5670 41 41 #include <cstdio> 42 42 #include <boost/filesystem.hpp> 43 #include <OgreRenderWindow.h>44 43 45 44 #ifdef ORXONOX_PLATFORM_WINDOWS … … 309 308 graphicsManager_->upgradeToGraphics(); 310 309 311 // The render window width and height are used to set up the mouse movement.312 size_t windowHnd = 0;313 graphicsManager_->getRenderWindow()->getCustomAttribute("WINDOW", &windowHnd);314 315 310 // Calls the InputManager which sets up the input devices. 316 inputManager_.reset(new InputManager( windowHnd));311 inputManager_.reset(new InputManager()); 317 312 318 313 // load the CEGUI interface 319 guiManager_.reset(new GUIManager(graphicsManager_->getRenderWindow())); 314 guiManager_.reset(new GUIManager(graphicsManager_->getRenderWindow(), 315 inputManager_->getMousePosition(), graphicsManager_->isFullScreen())); 320 316 321 317 unloader.Dismiss(); … … 331 327 332 328 // Load Ogre::Root again, but without the render system 333 this->graphicsManager_.reset(new GraphicsManager(false)); 329 try 330 { this->graphicsManager_.reset(new GraphicsManager(false)); } 331 catch (...) 332 { 333 COUT(0) << "An exception occurred during 'new GraphicsManager' while " 334 << "another exception was being handled. This will lead to undefined behaviour!" << std::endl 335 << "Terminating the program." << std::endl; 336 abort(); 337 } 334 338 335 339 bGraphicsLoaded_ = false; -
code/branches/resource2/src/core/GUIManager.cc
r5661 r5670 37 37 #include <CEGUIExceptions.h> 38 38 #include <CEGUIInputEvent.h> 39 #include <CEGUIMouseCursor.h> 39 40 #include <CEGUIResourceProvider.h> 40 41 #include <CEGUISystem.h> … … 96 97 @return true if success, otherwise false 97 98 */ 98 GUIManager::GUIManager(Ogre::RenderWindow* renderWindow )99 GUIManager::GUIManager(Ogre::RenderWindow* renderWindow, const std::pair<int, int>& mousePosition, bool bFullScreen) 99 100 : renderWindow_(renderWindow) 100 101 , resourceProvider_(0) … … 127 128 rootFileInfo_ = Resource::getInfo("InitialiseGUI.lua", "GUI"); 128 129 this->luaState_->doFile("InitialiseGUI.lua", "GUI", false); 130 131 // Align CEGUI mouse with OIS mouse 132 guiSystem_->injectMousePosition(mousePosition.first, mousePosition.second); 133 134 #ifdef ORXONOX_PLATFORM_WINDOWS 135 // Hide the mouse cursor unless playing in fullscreen mode 136 if (!bFullScreen) 137 CEGUI::MouseCursor::getSingleton().hide(); 138 #endif 129 139 } 130 140 … … 254 264 void GUIManager::mouseMoved(IntVector2 abs, IntVector2 rel, IntVector2 clippingSize) 255 265 { 256 guiSystem_->injectMouse Move(static_cast<float>(rel.x), static_cast<float>(rel.y));266 guiSystem_->injectMousePosition(static_cast<float>(abs.x), static_cast<float>(abs.y)); 257 267 } 258 268 void GUIManager::mouseScrolled(int abs, int rel) -
code/branches/resource2/src/core/GUIManager.h
r5661 r5670 60 60 friend class Singleton<GUIManager>; 61 61 public: 62 GUIManager(Ogre::RenderWindow* renderWindow );62 GUIManager(Ogre::RenderWindow* renderWindow, const std::pair<int, int>& mousePosition, bool bFullScreen); 63 63 ~GUIManager(); 64 64 -
code/branches/resource2/src/core/GraphicsManager.cc
r5662 r5670 128 128 GraphicsManager::~GraphicsManager() 129 129 { 130 Ogre::WindowEventUtilities::removeWindowEventListener(renderWindow_, ogreWindowEventListener_.get()); 130 131 // TODO: Destroy the console command 131 132 } … … 337 338 } 338 339 340 size_t GraphicsManager::getRenderWindowHandle() 341 { 342 size_t windowHnd = 0; 343 renderWindow_->getCustomAttribute("WINDOW", &windowHnd); 344 return windowHnd; 345 } 346 347 bool GraphicsManager::isFullScreen() const 348 { 349 Ogre::ConfigOptionMap& options = ogreRoot_->getRenderSystem()->getConfigOptions(); 350 if (options.find("Full Screen") != options.end()) 351 { 352 if (options["Full Screen"].currentValue == "Yes") 353 return true; 354 else 355 return false; 356 } 357 else 358 { 359 COUT(0) << "Could not find 'Full Screen' render system option. Fix This!!!" << std::endl; 360 return false; 361 } 362 } 363 339 364 void GraphicsManager::printScreen() 340 365 { -
code/branches/resource2/src/core/GraphicsManager.h
r5657 r5670 67 67 Ogre::Viewport* getViewport() { return this->viewport_; } 68 68 Ogre::RenderWindow* getRenderWindow() { return this->renderWindow_; } 69 size_t getRenderWindowHandle(); 70 bool isFullScreen() const; 69 71 70 72 void upgradeToGraphics(); -
code/branches/resource2/src/core/input/InputManager.cc
r3370 r5670 41 41 #include <boost/foreach.hpp> 42 42 43 #include "util/Convert.h" 43 44 #include "util/Exception.h" 44 45 #include "util/ScopeGuard.h" … … 49 50 #include "core/CommandLine.h" 50 51 #include "core/Functor.h" 52 #include "core/GraphicsManager.h" 51 53 52 54 #include "InputBuffer.h" … … 82 84 // ########## ########## 83 85 // ############################################################ 84 InputManager::InputManager( size_t windowHnd)86 InputManager::InputManager() 85 87 : internalState_(Bad) 86 88 , oisInputManager_(0) 87 89 , devices_(2) 88 , windowHnd_(0)90 , bExclusiveMouse_(false) 89 91 , emptyState_(0) 90 92 , keyDetector_(0) … … 97 99 this->setConfigValues(); 98 100 99 this->loadDevices( windowHnd);101 this->loadDevices(); 100 102 101 103 // Lowest priority empty InputState … … 147 149 Creates the OIS::InputMananger, the keyboard, the mouse and 148 150 the joys ticks. If either of the first two fail, this method throws an exception. 149 @param windowHnd150 The window handle of the render window151 151 @param windowWidth 152 152 The width of the render window … … 154 154 The height of the render window 155 155 */ 156 void InputManager::loadDevices( size_t windowHnd)157 { 158 CCOUT( 3) << "Loading input devices..." << std::endl;156 void InputManager::loadDevices() 157 { 158 CCOUT(4) << "Loading input devices..." << std::endl; 159 159 160 160 // When loading the devices they should not already be loaded … … 164 164 assert(devices_.size() == InputDeviceEnumerator::FirstJoyStick); 165 165 166 // store handle internally so we can reload OIS 167 windowHnd_ = windowHnd; 168 166 // Fill parameter list 169 167 OIS::ParamList paramList; 170 std::ostringstream windowHndStr; 171 172 // Fill parameter list 173 windowHndStr << static_cast<unsigned int>(windowHnd); 174 paramList.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str())); 168 size_t windowHnd = GraphicsManager::getInstance().getRenderWindowHandle(); 169 paramList.insert(std::make_pair(std::string("WINDOW"), multi_cast<std::string>(windowHnd))); 175 170 #if defined(ORXONOX_PLATFORM_WINDOWS) 176 //paramList.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_NONEXCLUSIVE"))); 177 //paramList.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_FOREGROUND"))); 178 //paramList.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_NONEXCLUSIVE"))); 179 //paramList.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_FOREGROUND"))); 171 // Load in non exclusive mode and change later 172 if (bExclusiveMouse_ || GraphicsManager::getInstance().isFullScreen()) 173 paramList.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_EXCLUSIVE"))); 174 else 175 paramList.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_NONEXCLUSIVE"))); 176 paramList.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_FOREGROUND"))); 180 177 #elif defined(ORXONOX_PLATFORM_LINUX) 181 178 paramList.insert(std::make_pair(std::string("XAutoRepeatOn"), std::string("true"))); … … 212 209 } 213 210 214 // TODO: Remove the two parameters215 211 this->loadMouse(); 216 212 this->loadJoySticks(); … … 219 215 this->updateActiveStates(); 220 216 221 CCOUT( 3) << "Input devices loaded." << std::endl;217 CCOUT(4) << "Input devices loaded." << std::endl; 222 218 } 223 219 … … 275 271 InputManager::~InputManager() 276 272 { 277 CCOUT( 4) << "Destroying..." << std::endl;273 CCOUT(3) << "Destroying..." << std::endl; 278 274 279 275 // Destroy calibrator helper handler and state … … 293 289 this->destroyDevices(); 294 290 295 CCOUT( 4) << "Destruction complete." << std::endl;291 CCOUT(3) << "Destruction complete." << std::endl; 296 292 } 297 293 … … 304 300 void InputManager::destroyDevices() 305 301 { 306 CCOUT( 3) << "Destroying devices..." << std::endl;302 CCOUT(4) << "Destroying devices..." << std::endl; 307 303 308 304 BOOST_FOREACH(InputDevice*& device, devices_) … … 336 332 337 333 internalState_ |= Bad; 338 CCOUT( 3) << "Destroyed devices." << std::endl;334 CCOUT(4) << "Destroyed devices." << std::endl; 339 335 } 340 336 … … 365 361 366 362 this->destroyDevices(); 367 this->loadDevices( windowHnd_);363 this->loadDevices(); 368 364 369 365 internalState_ &= ~Bad; 370 366 internalState_ &= ~ReloadRequest; 371 CCOUT( 3) << "Reloading complete." << std::endl;367 CCOUT(4) << "Reloading complete." << std::endl; 372 368 } 373 369 … … 481 477 void InputManager::updateActiveStates() 482 478 { 479 assert((internalState_ & InputManager::Ticking) == 0); 483 480 // temporary resize 484 481 for (unsigned int i = 0; i < devices_.size(); ++i) … … 512 509 for (std::set<InputState*>::const_iterator it = tempSet.begin();it != tempSet.end(); ++it) 513 510 activeStatesTicked_.push_back(*it); 511 512 #ifdef ORXONOX_PLATFORM_WINDOWS 513 // Check whether we have to change the mouse mode 514 std::vector<InputState*>& mouseStates = devices_[InputDeviceEnumerator::Mouse]->getStateListRef(); 515 if (mouseStates.empty() && bExclusiveMouse_ || 516 !mouseStates.empty() && mouseStates.front()->getIsExclusiveMouse() != bExclusiveMouse_) 517 { 518 bExclusiveMouse_ = !bExclusiveMouse_; 519 if (!GraphicsManager::getInstance().isFullScreen()) 520 this->reloadInternal(); 521 } 522 #endif 514 523 } 515 524 … … 556 565 } 557 566 558 // ############################################################ 559 // ##### Iput States ##### 567 std::pair<int, int> InputManager::getMousePosition() const 568 { 569 Mouse* mouse = static_cast<Mouse*>(devices_[InputDeviceEnumerator::Mouse]); 570 if (mouse != NULL) 571 { 572 const OIS::MouseState state = mouse->getOISDevice()->getMouseState(); 573 return std::make_pair(state.X.abs, state.Y.abs); 574 } 575 else 576 return std::make_pair(0, 0); 577 } 578 579 // ############################################################ 580 // ##### Input States ##### 560 581 // ########## ########## 561 582 // ############################################################ -
code/branches/resource2/src/core/input/InputManager.h
r3370 r5670 84 84 the constructor fails with an std::exception. 85 85 */ 86 InputManager( size_t windowHnd);86 InputManager(); 87 87 //! Destroys all devices AND all input states! 88 88 ~InputManager(); … … 167 167 { return devices_.size() - InputDeviceEnumerator::FirstJoyStick; } 168 168 //! Returns a pointer to the OIS InputManager. Only you if you know what you're doing! 169 OIS::InputManager* getOISInputManager() 170 { return this->oisInputManager_; }169 OIS::InputManager* getOISInputManager() { return this->oisInputManager_; } 170 std::pair<int, int> getMousePosition() const; 171 171 172 172 private: // functions … … 175 175 176 176 // Intenal methods 177 void loadDevices( size_t windowHnd);177 void loadDevices(); 178 178 void loadMouse(); 179 179 void loadJoySticks(); … … 193 193 OIS::InputManager* oisInputManager_; //!< OIS input manager 194 194 std::vector<InputDevice*> devices_; //!< List of all input devices (keyboard, mouse, joy sticks) 195 // TODO: Get this from the GraphicsManager during reload 196 size_t windowHnd_; //!< Render window handle (used to reload the InputManager) 195 bool bExclusiveMouse_; //!< Currently applied mouse mode 197 196 198 197 // some internally handled states and handlers -
code/branches/resource2/src/core/input/InputState.cc
r3327 r5670 37 37 , bAlwaysGetsInput_(bAlwaysGetsInput) 38 38 , bTransparent_(bTransparent) 39 , bExclusiveMouse_(true) 39 40 , bExpired_(true) 40 41 , handlers_(2) -
code/branches/resource2/src/core/input/InputState.h
r3327 r5670 75 75 not influence ony other InputState at all. 76 76 77 Priorities 78 ********** 77 @par Priorities 79 78 Every InputState has a priority when on the stack, but mostly this 80 79 priority is dynamic (InputStatePriority::Dynamic) which means that a state … … 83 82 a high priority (InputStatePriority::HighPriority). These 'special' ones 84 83 are used for features like the KeyDetector or the console. Use with care! 84 85 @par Exclusive/Non-Exclusive mouse Mode 86 You can select a specific mouse mode that tells whether the application 87 should have exclusive accessto it or not. 88 When in non-exclusive mode, you can move the mouse out of the window 89 like with any other normal window (only for windowed mode!). 90 The setting is dictated by the topmost InputState that gets mouse events. 85 91 */ 86 92 class _CoreExport InputState : public JoyStickQuantityListener … … 114 120 void setHandler (InputHandler* handler); 115 121 122 void setIsExclusiveMouse(bool value) { bExclusiveMouse_ = value; this->bExpired_ = true; } 123 bool getIsExclusiveMouse() const { return bExclusiveMouse_; } 124 116 125 //! Returns the name of the state (which is unique!) 117 126 const std::string& getName() const { return name_; } … … 165 174 const bool bAlwaysGetsInput_; //!< See class declaration for explanation 166 175 const bool bTransparent_; //!< See class declaration for explanation 176 bool bExclusiveMouse_; //!< See class declaration for explanation 167 177 int priority_; //!< Current priority (might change) 168 178 bool bExpired_; //!< See hasExpired() -
code/branches/resource2/src/orxonox/gamestates/GSMainMenu.cc
r5661 r5670 52 52 inputState_->setHandler(GUIManager::getInstancePtr()); 53 53 inputState_->setJoyStickHandler(&InputHandler::EMPTY); 54 inputState_->setIsExclusiveMouse(false); 54 55 55 56 // create an empty Scene
Note: See TracChangeset
for help on using the changeset viewer.