Beispiel #1
0
			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;
}
Beispiel #3
0
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;
}