inline void onEvent(Node& node, Event& event) { switch(event.type) { case Event::FRAME_RENDERING: { const Ogre::Vector3 lastMotion = translateVector_; if(!event.mouse.buffered() || !event.keyboard.buffered()) { moveScale_ = moveSpeed_ * event.frameEvent.timeSinceLastFrame; rotateScale_ = rotateSpeed_ * event.frameEvent.timeSinceLastFrame; rotX_ = 0; rotY_ = 0; translateVector_ = Ogre::Vector3::ZERO; } if(!event.keyboard.buffered()){ processUnbufferedKeyInput(event); } if(!event.mouse.buffered()){ processUnbufferedMouseInput(event); } if(translateVector_ == Ogre::Vector3::ZERO) { currentSpeed_ -= event.frameEvent.timeSinceLastFrame * 0.3; translateVector_ = lastMotion; } else { currentSpeed_ += event.frameEvent.timeSinceLastFrame; } // Limit speed. if(currentSpeed_ > 1.0) { currentSpeed_ = 1.0; } else if(currentSpeed_ < 0.0) { currentSpeed_ = 0.0; } translateVector_ *= currentSpeed_; if(!event.mouse.buffered() || !event.keyboard.buffered()) { moveCamera(); } break; } default: { break; } } }
/** The FrameStarted implementation * * \param evt The FrameEvet got from Ogre * * \return \c true to continue rendering, \c false to stop Ogre main loop */ bool RainbruRPG::Core::ExampleFrameListener:: frameStarted(const FrameEvent& evt){ if(mWindow->isClosed()) return false; // if (!mInputTypeSwitchingOn){ // mInputDevice->capture(); // } if ( !mUseBufferedInputMouse || !mUseBufferedInputKeys){ // one of the input modes is immediate, so setup what is // needed for immediate mouse/key movement if (mTimeUntilNextToggle >= 0) mTimeUntilNextToggle -= evt.timeSinceLastFrame; // If this is the first frame, pick a speed if (evt.timeSinceLastFrame == 0){ mMoveScale = 1; mRotScale = 0.1; } // Otherwise scale movement units by time passed since last frame else{ // Move about 100 units per second, mMoveScale = mMoveSpeed * evt.timeSinceLastFrame; // Take about 10 seconds for full rotation mRotScale = mRotateSpeed * evt.timeSinceLastFrame; } mRotX = 0; mRotY = 0; mTranslateVector = Ogre::Vector3::ZERO; } if (processUnbufferedKeyInput(evt) == false){ return false; } if (processUnbufferedMouseInput(evt) == false){ return false; } moveCamera(); return true; }
bool inputSystem::processInput() // processes all input { renderEngine *render = renderEngine::Instance(); keyPressed = ""; // resets value of keyPressed // Ogre::LogManager::getSingletonPtr()->logMessage("Processing input"); // SDL_StartTextInput(); // processes keyboard input /* if (processUnbufferedKeyInput() == false) { return false; } // SDL_StopTextInput(); */ // logMsg("sdl grab = " +Ogre::StringConverter::toString(SDL_GetWindowGrab(renderE->getSDLWindow()))); /*#ifndef __ANDROID__ logMsg("input!"); struct android_app *state = renderE->getApp(); // state->onInputEvent = &handleInput; logMsg("input??"); AInputEvent* event; struct android_poll_source* source; int ident; int fdesc; int events; while((ident = ALooper_pollAll(0, &fdesc, &events, (void**)&source)) >= 0) { // process this event if (source) source->process(state, source); } #else */ // SDL_PumpEvents(); int motion = SDL_EventState(SDL_FINGERMOTION, SDL_QUERY); logMsg ("motion = " +Ogre::StringConverter::toString(motion)); // exit(0); SDL_StartTextInput(); while (SDL_PollEvent(&inputEvent)) { int numTouch = SDL_GetNumTouchDevices(); logMsg ("numTouch = " +Ogre::StringConverter::toString(numTouch)); // exit(0); // Ogre::LogManager::getSingletonPtr()->logMessage("Crash??"); switch (inputEvent.type) { /* case SDL_WINDOWEVENT: logMsg("windowevent!"); // exit(0); break;*/ case SDL_FINGERMOTION: logMsg("Motion!"); exit(0); // processes touch input if (processUnbufferedTouchInput() == false) { return false; } break; case SDL_FINGERDOWN: logMsg("Finger Down!"); logMsg("tfinger.x = " +Ogre::StringConverter::toString(inputEvent.tfinger.x*render->getWindowWidth())); logMsg("tfinger.y = " +Ogre::StringConverter::toString(inputEvent.tfinger.y)); // exit(0); // processes touch input if (processUnbufferedTouchInput() == false) { return false; } break; case SDL_FINGERUP: logMsg("Finger Up!"); // exit(0); // processes touch input if (processUnbufferedTouchInput() == false) { return false; } break; case SDL_MULTIGESTURE: logMsg("Multigesture!"); // exit(0); // processes touch input if (processUnbufferedTouchInput() == false) { return false; } break; case SDL_TEXTINPUT: keyPressed = ""; if (processUnbufferedKeyInput(true) == false) { return false; } logMsg("Key Pressed!"); // exit(0); break; /* case SDL_KEYDOWN: logMsg("Keydown!"); if (processUnbufferedKeyInput(false) == false) { return false; } break; case SDL_KEYUP: keyPressed = ""; break; */ case SDL_MOUSEMOTION: case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: case SDL_MOUSEWHEEL: logMsg("Mouse!"); // processes mouse input if (processUnbufferedMouseInput() == false) { return false; } // exit(0); break; case SDL_CONTROLLERAXISMOTION: case SDL_CONTROLLERBUTTONDOWN: case SDL_CONTROLLERBUTTONUP: case SDL_CONTROLLERDEVICEADDED: case SDL_CONTROLLERDEVICEREMOVED: case SDL_CONTROLLERDEVICEREMAPPED: logMsg("Controller!"); // processes gamepad input if (processUnbufferedGamepadInput() == false) { return false; } exit(0); break; case SDL_QUIT: break; default: break; } } //#endif /* // processes touch input if (processUnbufferedTouchInput() == false) { return false; } /* // processes gamepad input if (processUnbufferedGamepadInput() == false) { return false; } */ // logMsg("Input processed"); processUnbufferedMouseInput(); return true; }