#include "InputMapper.h" #include #include #include "EventManager.h" #include "PanDirectionChangedEvent.h" bool InputMapper::handleKeyPress(QKeyEvent* event) { // Auto-repeat says nothing new about which keys are down, and a held action is // already held. if (event->isAutoRepeat()) { return false; } switch (event->key()) { case Qt::Key_A: m_panLeftHeld = true; updatePanDirection(); return true; case Qt::Key_D: m_panRightHeld = true; updatePanDirection(); return true; default: return false; } } bool InputMapper::handleKeyRelease(QKeyEvent* event) { if (event->isAutoRepeat()) { return false; } switch (event->key()) { case Qt::Key_A: m_panLeftHeld = false; updatePanDirection(); return true; case Qt::Key_D: m_panRightHeld = false; updatePanDirection(); return true; default: return false; } } void InputMapper::releaseAll() { m_panLeftHeld = false; m_panRightHeld = false; updatePanDirection(); } void InputMapper::updatePanDirection() { // Holding both keys cancels out rather than favouring one. PanDirection direction = PanDirection::None; if (m_panLeftHeld != m_panRightHeld) { direction = m_panLeftHeld ? PanDirection::Left : PanDirection::Right; } if (direction == m_panDirection) { return; } m_panDirection = direction; EventManager::getInstance()->sendEventImmediately( std::make_shared(direction)); }