/**\brief Polls the event queue and sends the list of events to subsystems. */ list<InputEvent> Input::Update( bool &quitSignal ) { SDL_Event event; events.clear(); while( SDL_PollEvent( &event ) ) { switch( event.type ) { case SDL_QUIT: quitSignal = true; break; case SDL_KEYDOWN: { bool quitSignalUpdate = _UpdateHandleKeyDown( &event ); if( quitSignalUpdate ) quitSignal = quitSignalUpdate; break; } case SDL_KEYUP: { bool quitSignalUpdate = _UpdateHandleKeyUp( &event ); if( quitSignalUpdate ) quitSignal = quitSignalUpdate; break; } case SDL_MOUSEMOTION: { _UpdateHandleMouseMotion( &event ); break; } case SDL_MOUSEBUTTONUP: { _UpdateHandleMouseUp( &event ); break; } case SDL_MOUSEBUTTONDOWN: { _UpdateHandleMouseDown( &event ); break; } default: break; } } // Constantly emit InputEvent for held down Keys for(int k=0;k<SDLK_LAST;k++) { if(heldKeys[k]) events.push_back( InputEvent( KEY, KEYPRESSED, k ) ); } if((Timer::GetTicks() - lastMouseMove > OPTION(Uint32,"options/timing/mouse-fade")) ){ Video::DisableMouse(); } // this could be false - returning quitSignal doesn't imply quitting return events; }
bool Input::Update( void ) { SDL_Event event; bool quitSignal = false; while( SDL_PollEvent( &event ) ) { switch( event.type ) { case SDL_QUIT: quitSignal = true; break; case SDL_KEYDOWN: { bool quitSignalUpdate = _UpdateHandleKeyDown( &event ); if( quitSignalUpdate ) quitSignal = quitSignalUpdate; break; } case SDL_KEYUP: { bool quitSignalUpdate = _UpdateHandleKeyUp( &event ); if( quitSignalUpdate ) quitSignal = quitSignalUpdate; break; } case SDL_MOUSEMOTION: { _UpdateHandleMouseMotion( &event ); break; } case SDL_MOUSEBUTTONUP: { _UpdateHandleMouseUp( &event ); break; } case SDL_MOUSEBUTTONDOWN: { _UpdateHandleMouseDown( &event ); break; } default: break; } } // the list of sub-input systems that handle events UI::HandleInput( events ); // anything the UI doesn't care about will be left in the list for the next subsystem Console::Input( events ); Handle( events ); // default handler. player motion is handled here events.clear(); // this could be false - returning quitSignal doesn't imply quitting return quitSignal; }