void InputManager::run(Real elapsedTime) { RL_LONGLONG start = CoreSubsystem::getSingleton().getClock(); CEGUI::System::getSingleton().injectTimePulse(elapsedTime); if (mScheduledInputSwitch == SWITCH_TO_BUFFERED) { switchMouseToBuffered(); mScheduledInputSwitch = SWITCH_NO_SWITCH; return; } else if (mScheduledInputSwitch == SWITCH_TO_UNBUFFERED) { switchMouseToUnbuffered(); mScheduledInputSwitch = SWITCH_NO_SWITCH; return; } if (mNumActiveWindowsKeyboardInput == 0) { mInputReader->capture(); while (mEventQueue->getSize() > 0) { InputEvent* ie = mEventQueue->pop(); if(ie->getID() == KeyEvent::KE_KEY_PRESSED) keyPressed(static_cast<KeyEvent*>(ie)); else if(ie->getID() == KeyEvent::KE_KEY_RELEASED) keyReleased(static_cast<KeyEvent*>(ie)); else if(ie->getID() == KeyEvent::KE_KEY_CLICKED) keyClicked(static_cast<KeyEvent*>(ie)); delete ie; } } if (!mBuffered) { int pressedButtonMask = 0, releasedButtonMask = 0; checkMouseButton(0, MouseEvent::BUTTON0_MASK, pressedButtonMask, releasedButtonMask); checkMouseButton(1, MouseEvent::BUTTON1_MASK, pressedButtonMask, releasedButtonMask); checkMouseButton(2, MouseEvent::BUTTON2_MASK, pressedButtonMask, releasedButtonMask); checkMouseButton(3, MouseEvent::BUTTON3_MASK, pressedButtonMask, releasedButtonMask); if (releasedButtonMask != 0 && mCharacterController!=NULL) mCharacterController->injectMouseUp(releasedButtonMask); if (pressedButtonMask != 0 && mCharacterController!=NULL) mCharacterController->injectMouseDown(pressedButtonMask); } Logger::getSingleton().log( Logger::CORE, Logger::LL_TRIVIAL, " IM time " + Ogre::StringConverter::toString( Ogre::Real((double)(CoreSubsystem::getSingleton().getClock()-start)))); }