bool peripheralsInputTick(void) { static SDL_Event e; while(SDL_PollEvent(&e) != 0) { switch(e.type) { case SDL_WINDOWEVENT: handleWindowEvent(e.window); break; case SDL_KEYDOWN: if(hasFocus) ; break; case SDL_MOUSEMOTION: if(hasMouse) ; break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: if(hasMouse) ; break; case SDL_MOUSEWHEEL: // treat mouse wheel as up/down arrow keys if(hasMouse) ; break; case SDL_QUIT: shouldQuit = true; break; } } return !shouldQuit; }
int main() { sf::RenderWindow renderWindow(sf::VideoMode(800u, 600u), "TMX Loader"); sf::Font font = loadFont(); sf::Text fpsText = getFpsText(font); //set the debugging output mode tmx::setLogLevel(tmx::Logger::Info | tmx::Logger::Error); //create map loader and load map tmx::MapLoader ml("maps/"); ml.load("desert.tmx"); sf::Clock deltaClock, frameClock; const float dt = 0.01f; float previousUpdateTime = deltaClock.getElapsedTime().asSeconds(); float accumulator = 0.f; while(renderWindow.isOpen()) { handleWindowEvent(renderWindow); //update float currentTime = deltaClock.getElapsedTime().asSeconds(); float frameTime = currentTime - previousUpdateTime; previousUpdateTime = currentTime; accumulator += frameTime; sf::Vector2f movement; while ( accumulator >= dt ) { movement = getViewMovement(dt); accumulator -= dt; } //allow moving of view sf::View view = renderWindow.getView(); view.move(movement); renderWindow.setView(view); //show fps float fpsCount = (1.f / frameClock.restart().asSeconds()); fpsText.setString( "FPS: " + (std::to_string(fpsCount))); fpsText.move(movement); //draw renderWindow.clear(); renderWindow.draw(ml); renderWindow.draw(fpsText); renderWindow.display(); } return 0; }
void InputWrapper::capture() { SDL_Event evt; while(SDL_PollEvent(&evt)) { switch(evt.type) { case SDL_MOUSEMOTION: //ignore this if it happened due to a warp if(!_handleWarpMotion(evt.motion)) { mMouseListener->mouseMoved(_packageMouseMotion(evt)); //try to keep the mouse inside the window _wrapMousePointer(evt.motion); } break; case SDL_MOUSEWHEEL: mMouseListener->mouseMoved(_packageMouseMotion(evt)); break; case SDL_MOUSEBUTTONDOWN: mMouseListener->mousePressed(evt.button, evt.button.button); break; case SDL_MOUSEBUTTONUP: mMouseListener->mouseReleased(evt.button, evt.button.button); break; case SDL_KEYDOWN: if (!evt.key.repeat) mKeyboardListener->keyPressed(evt.key); break; case SDL_KEYUP: if (!evt.key.repeat) mKeyboardListener->keyReleased(evt.key); break; case SDL_TEXTINPUT: mKeyboardListener->textInput(evt.text); break; case SDL_WINDOWEVENT: handleWindowEvent(evt); break; case SDL_QUIT: Ogre::Root::getSingleton().queueEndRendering(); break; default: std::cerr << "Unhandled SDL event of type " << evt.type << std::endl; break; } } }
void SDLWindow::handlePollEvent() { while (SDL_PollEvent(&m_sdlEvent)) { switch (m_sdlEvent.type) { case SDL_WINDOWEVENT: { handleWindowEvent(); } break; case SDL_KEYUP: { handleKeyUpEvent(); } break; case SDL_KEYDOWN: { handleKeyDownEvent(); } break; case SDL_QUIT: { onClose(); } break; } } }
void MacOSXLoop::run() { // Main event loop while( !m_exit ) { EventRef pEvent; OSStatus err = ReceiveNextEvent( 0, NULL, kEventDurationForever, true, &pEvent ); if( err != noErr ) { // Get the event type UInt32 evClass = GetEventClass( pEvent ); switch( evClass ) { case kEventClassMouse: { break; } case kEventClassKeyboard: { break; } case kEventClassWindow: { handleWindowEvent( pEvent ); break; } default: { EventTargetRef pTarget; pTarget = GetEventDispatcherTarget(); SendEventToEventTarget( pEvent, pTarget ); ReleaseEvent( pEvent ); } } } } }
////////////////////////////////////////////////////////////////////////// // handleEvent void OsClientHTML5::handleEvent( const SDL_Event& SDLEvent ) { switch( SDLEvent.type ) { case SDL_KEYDOWN: case SDL_KEYUP: handleKeyEvent( SDLEvent ); break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: case SDL_MOUSEMOTION: handleMouseEvent( SDLEvent ); break; case SDL_WINDOWEVENT: handleWindowEvent( SDLEvent ); break; } }
static pascal OSStatus eventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData) { ::UInt32 eventClass = GetEventClass(event); switch (eventClass) { // Mouse events case kEventClassMouse: return handleMouseEvent(nextHandler, event, userData); // Key press events case kEventClassTextInput: return handleKeyEvent(nextHandler, event, userData); // Window events case kEventClassWindow: return handleWindowEvent(nextHandler, event, userData); default: return eventNotHandledErr; } }
void InputWrapper::capture(bool windowEventsOnly) { mViewer->getEventQueue()->frame(0.f); SDL_PumpEvents(); SDL_Event evt; if (windowEventsOnly) { // During loading, just handle window events, and keep others for later while (SDL_PeepEvents(&evt, 1, SDL_GETEVENT, SDL_WINDOWEVENT, SDL_WINDOWEVENT)) handleWindowEvent(evt); return; } while(SDL_PollEvent(&evt)) { switch(evt.type) { case SDL_MOUSEMOTION: // Ignore this if it happened due to a warp if(!_handleWarpMotion(evt.motion)) { // If in relative mode, don't trigger events unless window has focus if (!mWantRelative || mWindowHasFocus) mMouseListener->mouseMoved(_packageMouseMotion(evt)); // Try to keep the mouse inside the window if (mWindowHasFocus) _wrapMousePointer(evt.motion); } break; case SDL_MOUSEWHEEL: mMouseListener->mouseMoved(_packageMouseMotion(evt)); break; case SDL_MOUSEBUTTONDOWN: mMouseListener->mousePressed(evt.button, evt.button.button); break; case SDL_MOUSEBUTTONUP: mMouseListener->mouseReleased(evt.button, evt.button.button); break; case SDL_KEYDOWN: mKeyboardListener->keyPressed(evt.key); if (!isModifierHeld(KMOD_ALT) && evt.key.keysym.sym >= SDLK_F1 && evt.key.keysym.sym <= SDLK_F12) { mViewer->getEventQueue()->keyPress(osgGA::GUIEventAdapter::KEY_F1 + (evt.key.keysym.sym - SDLK_F1)); } break; case SDL_KEYUP: if (!evt.key.repeat) { mKeyboardListener->keyReleased(evt.key); if (!isModifierHeld(KMOD_ALT) && evt.key.keysym.sym >= SDLK_F1 && evt.key.keysym.sym <= SDLK_F12) mViewer->getEventQueue()->keyRelease(osgGA::GUIEventAdapter::KEY_F1 + (evt.key.keysym.sym - SDLK_F1)); } break; case SDL_TEXTEDITING: break; case SDL_TEXTINPUT: mKeyboardListener->textInput(evt.text); break; #if SDL_VERSION_ATLEAST(2, 0, 4) case SDL_KEYMAPCHANGED: break; #endif case SDL_JOYHATMOTION: //As we manage everything with GameController, don't even bother with these. case SDL_JOYAXISMOTION: case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: case SDL_JOYDEVICEADDED: case SDL_JOYDEVICEREMOVED: break; case SDL_CONTROLLERDEVICEADDED: if(mConListener) mConListener->controllerAdded(1, evt.cdevice); //We only support one joystick, so give everything a generic deviceID break; case SDL_CONTROLLERDEVICEREMOVED: if(mConListener) mConListener->controllerRemoved(evt.cdevice); break; case SDL_CONTROLLERBUTTONDOWN: if(mConListener) mConListener->buttonPressed(1, evt.cbutton); break; case SDL_CONTROLLERBUTTONUP: if(mConListener) mConListener->buttonReleased(1, evt.cbutton); break; case SDL_CONTROLLERAXISMOTION: if(mConListener) mConListener->axisMoved(1, evt.caxis); break; case SDL_WINDOWEVENT: handleWindowEvent(evt); break; case SDL_QUIT: if (mWindowListener) mWindowListener->windowClosed(); break; case SDL_CLIPBOARDUPDATE: break; // We don't need this event, clipboard is retrieved on demand case SDL_FINGERDOWN: case SDL_FINGERUP: case SDL_FINGERMOTION: case SDL_DOLLARGESTURE: case SDL_DOLLARRECORD: case SDL_MULTIGESTURE: // No use for touch & gesture events break; default: Log(Debug::Info) << "Unhandled SDL event of type 0x" << std::hex << evt.type; break; } } }
//----------------------------------------------------------------------------------- void SdlInputHandler::_handleSdlEvents( const SDL_Event& evt ) { switch( evt.type ) { case SDL_MOUSEMOTION: // Ignore this if it happened due to a warp if( !handleWarpMotion(evt.motion) ) { // If in relative mode, don't trigger events unless window has focus if( (!mWantRelative || mWindowHasFocus) && mMouseListener ) mMouseListener->mouseMoved( evt ); // Try to keep the mouse inside the window if (mWindowHasFocus) wrapMousePointer( evt.motion ); if( mLogicSystem ) mGraphicsSystem->queueSendMessage( mLogicSystem, Mq::SDL_EVENT, evt ); } break; case SDL_MOUSEWHEEL: { if( mMouseListener ) mMouseListener->mouseMoved( evt ); if( mLogicSystem ) mGraphicsSystem->queueSendMessage( mLogicSystem, Mq::SDL_EVENT, evt ); } break; case SDL_MOUSEBUTTONDOWN: { if( mMouseListener ) mMouseListener->mousePressed( evt.button, evt.button.button ); if( mLogicSystem ) mGraphicsSystem->queueSendMessage( mLogicSystem, Mq::SDL_EVENT, evt ); } break; case SDL_MOUSEBUTTONUP: { if( mMouseListener ) mMouseListener->mouseReleased( evt.button, evt.button.button ); if( mLogicSystem ) mGraphicsSystem->queueSendMessage( mLogicSystem, Mq::SDL_EVENT, evt ); } break; case SDL_KEYDOWN: { if( !evt.key.repeat && mKeyboardListener ) mKeyboardListener->keyPressed( evt.key ); if( mLogicSystem ) mGraphicsSystem->queueSendMessage( mLogicSystem, Mq::SDL_EVENT, evt ); } break; case SDL_KEYUP: { if( !evt.key.repeat && mKeyboardListener ) mKeyboardListener->keyReleased( evt.key ); if( mLogicSystem ) mGraphicsSystem->queueSendMessage( mLogicSystem, Mq::SDL_EVENT, evt ); } break; case SDL_TEXTINPUT: { if( mKeyboardListener ) mKeyboardListener->textInput( evt.text ); if( mLogicSystem ) mGraphicsSystem->queueSendMessage( mLogicSystem, Mq::SDL_EVENT, evt ); } break; case SDL_JOYAXISMOTION: { if( mJoystickListener ) mJoystickListener->joyAxisMoved( evt.jaxis, evt.jaxis.axis ); if( mLogicSystem ) mGraphicsSystem->queueSendMessage( mLogicSystem, Mq::SDL_EVENT, evt ); } break; case SDL_JOYBUTTONDOWN: { if( mJoystickListener ) mJoystickListener->joyButtonPressed( evt.jbutton, evt.jbutton.button ); if( mLogicSystem ) mGraphicsSystem->queueSendMessage( mLogicSystem, Mq::SDL_EVENT, evt ); } break; case SDL_JOYBUTTONUP: { if( mJoystickListener ) mJoystickListener->joyButtonReleased( evt.jbutton, evt.jbutton.button ); if( mLogicSystem ) mGraphicsSystem->queueSendMessage( mLogicSystem, Mq::SDL_EVENT, evt ); } break; case SDL_JOYDEVICEADDED: //SDL_JoystickOpen(evt.jdevice.which); //std::cout << "Detected a new joystick: " << SDL_JoystickNameForIndex(evt.jdevice.which) << std::endl; break; case SDL_JOYDEVICEREMOVED: //std::cout << "A joystick has been removed" << std::endl; break; case SDL_WINDOWEVENT: handleWindowEvent(evt); break; /*default: std::cerr << "Unhandled SDL event of type " << evt.type << std::endl; break;*/ } }
void InputWrapper::capture(bool windowEventsOnly) { SDL_PumpEvents(); SDL_Event evt; if (windowEventsOnly) { // During loading, just handle window events, and keep others for later while (SDL_PeepEvents(&evt, 1, SDL_GETEVENT, SDL_WINDOWEVENT, SDL_WINDOWEVENT)) handleWindowEvent(evt); return; } while(SDL_PollEvent(&evt)) { switch(evt.type) { case SDL_MOUSEMOTION: // Ignore this if it happened due to a warp if(!_handleWarpMotion(evt.motion)) { // If in relative mode, don't trigger events unless window has focus if (!mWantRelative || mWindowHasFocus) mMouseListener->mouseMoved(_packageMouseMotion(evt)); // Try to keep the mouse inside the window if (mWindowHasFocus) _wrapMousePointer(evt.motion); } break; case SDL_MOUSEWHEEL: mMouseListener->mouseMoved(_packageMouseMotion(evt)); break; case SDL_MOUSEBUTTONDOWN: mMouseListener->mousePressed(evt.button, evt.button.button); break; case SDL_MOUSEBUTTONUP: mMouseListener->mouseReleased(evt.button, evt.button.button); break; case SDL_KEYDOWN: if (!evt.key.repeat) mKeyboardListener->keyPressed(evt.key); break; case SDL_KEYUP: if (!evt.key.repeat) mKeyboardListener->keyReleased(evt.key); break; case SDL_TEXTINPUT: mKeyboardListener->textInput(evt.text); break; case SDL_JOYAXISMOTION: if (mJoyListener) mJoyListener->axisMoved(evt.jaxis, evt.jaxis.axis); break; case SDL_JOYBUTTONDOWN: if (mJoyListener) mJoyListener->buttonPressed(evt.jbutton, evt.jbutton.button); break; case SDL_JOYBUTTONUP: if (mJoyListener) mJoyListener->buttonReleased(evt.jbutton, evt.jbutton.button); break; case SDL_JOYDEVICEADDED: //SDL_JoystickOpen(evt.jdevice.which); //std::cout << "Detected a new joystick: " << SDL_JoystickNameForIndex(evt.jdevice.which) << std::endl; break; case SDL_JOYDEVICEREMOVED: //std::cout << "A joystick has been removed" << std::endl; break; case SDL_WINDOWEVENT: handleWindowEvent(evt); break; case SDL_QUIT: if (mWindowListener) mWindowListener->windowClosed(); break; default: std::cerr << "Unhandled SDL event of type " << evt.type << std::endl; break; } } }
void InputWrapper::capture(bool windowEventsOnly) { SDL_PumpEvents(); SDL_Event evt; if (windowEventsOnly) { // During loading, just handle window events, and keep others for later while (SDL_PeepEvents(&evt, 1, SDL_GETEVENT, SDL_WINDOWEVENT, SDL_WINDOWEVENT)) handleWindowEvent(evt); return; } while(SDL_PollEvent(&evt)) { switch(evt.type) { case SDL_MOUSEMOTION: // Ignore this if it happened due to a warp if(!_handleWarpMotion(evt.motion)) { // If in relative mode, don't trigger events unless window has focus if (!mWantRelative || mWindowHasFocus) mMouseListener->mouseMoved(_packageMouseMotion(evt)); // Try to keep the mouse inside the window if (mWindowHasFocus) _wrapMousePointer(evt.motion); } break; case SDL_MOUSEWHEEL: mMouseListener->mouseMoved(_packageMouseMotion(evt)); break; case SDL_MOUSEBUTTONDOWN: mMouseListener->mousePressed(evt.button, evt.button.button); break; case SDL_MOUSEBUTTONUP: mMouseListener->mouseReleased(evt.button, evt.button.button); break; case SDL_KEYDOWN: if (!evt.key.repeat) mKeyboardListener->keyPressed(evt.key); break; case SDL_KEYUP: if (!evt.key.repeat) mKeyboardListener->keyReleased(evt.key); break; case SDL_TEXTINPUT: mKeyboardListener->textInput(evt.text); break; case SDL_JOYHATMOTION: //As we manage everything with GameController, don't even bother with these. case SDL_JOYAXISMOTION: case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: case SDL_JOYDEVICEADDED: case SDL_JOYDEVICEREMOVED: break; case SDL_CONTROLLERDEVICEADDED: if(mConListener) mConListener->controllerAdded(1, evt.cdevice); //We only support one joystick, so give everything a generic deviceID break; case SDL_CONTROLLERDEVICEREMOVED: if(mConListener) mConListener->controllerRemoved(evt.cdevice); break; case SDL_CONTROLLERBUTTONDOWN: if(mConListener) mConListener->buttonPressed(1, evt.cbutton); break; case SDL_CONTROLLERBUTTONUP: if(mConListener) mConListener->buttonReleased(1, evt.cbutton); break; case SDL_CONTROLLERAXISMOTION: if(mConListener) mConListener->axisMoved(1, evt.caxis); break; case SDL_WINDOWEVENT: handleWindowEvent(evt); break; case SDL_QUIT: if (mWindowListener) mWindowListener->windowClosed(); break; case SDL_CLIPBOARDUPDATE: break; // We don't need this event, clipboard is retrieved on demand default: std::ios::fmtflags f(std::cerr.flags()); std::cerr << "Unhandled SDL event of type 0x" << std::hex << evt.type << std::endl; std::cerr.flags(f); break; } } }