void EventHandle::ParseInput() // Decides which keys have been pressed/released and which need to be repeated { if (m_vKeys.size() < m_vPrevKeys.size()) { for (int i = m_vKeys.size(); i < m_vPrevKeys.size(); ++i) OnKeyRelease(m_vPrevKeys[i]); } for (int i = 0; i < m_vKeys.size(); ++i) { if ((i >= m_vPrevKeys.size()) || (m_vKeys[i] != m_vPrevKeys[i])) { if (i >= m_vPrevKeys.size()) { m_vUntilPressed.push_back(clock() + KEY_PRESS_DELAY); m_vUntilRepeat.push_back(clock() + KEY_PRESS_DELAY + KEY_REPEAT_PRESS_DELAY); } OnKeyPress(m_vKeys[i]); } else if ((m_vKeys[i] == m_vPrevKeys[i]) && (clock() > m_vUntilRepeat[i]) && (clock() > m_vUntilPressed[i])) { m_vUntilRepeat[i] = clock() + KEY_REPEAT_PRESS_DELAY; OnKeyRepeat(m_vKeys[i]); } } m_vPrevKeys = m_vKeys; m_vKeys.clear(); }
void Module::OnEvent(const SDL_Event& event) { switch (event.type) { case SDL_WINDOWEVENT: { switch (event.window.event) { case SDL_WINDOWEVENT_ENTER: OnMouseFocus(); break; case SDL_WINDOWEVENT_LEAVE: OnMouseBlur(); break; case SDL_WINDOWEVENT_FOCUS_GAINED: OnInputFocus(); break; case SDL_WINDOWEVENT_FOCUS_LOST: OnInputBlur(); break; case SDL_WINDOWEVENT_RESTORED: OnRestore(); break; case SDL_WINDOWEVENT_MINIMIZED: OnMinimize(); break; case SDL_WINDOWEVENT_MAXIMIZED: OnMaximize(); break; case SDL_WINDOWEVENT_EXPOSED: OnExpose(); break; case SDL_WINDOWEVENT_SIZE_CHANGED: OnResize(event.window.data1, event.window.data2); break; default: break; } break; } case SDL_KEYDOWN: if (event.key.repeat) OnKeyRepeat(event.key.keysym); else OnKeyDown(event.key.keysym); break; case SDL_KEYUP: OnKeyUp(event.key.keysym); break; case SDL_MOUSEMOTION: OnMouseMove(event.motion); break; case SDL_MOUSEWHEEL: OnMouseWheel(event.wheel); break; case SDL_MOUSEBUTTONDOWN: OnMouseButtonDown(event.button); break; case SDL_MOUSEBUTTONUP: OnMouseButtonUp(event.button); break; case SDL_JOYAXISMOTION: OnJoyAxis(event.jaxis); break; case SDL_JOYBALLMOTION: OnJoyBall(event.jball); break; case SDL_JOYHATMOTION: OnJoyHat(event.jhat); break; case SDL_JOYBUTTONDOWN: OnJoyButtonDown(event.jbutton); break; case SDL_JOYBUTTONUP: OnJoyButtonUp(event.jbutton); break; case SDL_QUIT: OnExit(); break; case SDL_SYSWMEVENT: break; default: OnUser(event.user);break; } }