From 62a9b70a37c6cb9c8c449d6edc99874a7596c0d7 Mon Sep 17 00:00:00 2001 From: rankun Date: Sat, 31 Aug 2019 08:49:34 +0800 Subject: [PATCH] feat: game keymap finish --- QtScrcpy/device/controller/controller.cpp | 4 +- .../inputconvert/inputconvertgame.cpp | 9 +++-- .../controller/inputconvert/keymap/keymap.cpp | 40 +++++++------------ .../controller/inputconvert/keymap/keymap.h | 3 +- QtScrcpy/dialog.ui | 4 +- 5 files changed, 27 insertions(+), 33 deletions(-) diff --git a/QtScrcpy/device/controller/controller.cpp b/QtScrcpy/device/controller/controller.cpp index aee1ab4..5940385 100644 --- a/QtScrcpy/device/controller/controller.cpp +++ b/QtScrcpy/device/controller/controller.cpp @@ -13,7 +13,9 @@ Controller::Controller(QString gameScript, QObject* parent) : QObject(parent) Q_ASSERT(m_receiver); if (!gameScript.isEmpty()) { - m_inputConvert = new InputConvertGame(this); + InputConvertGame* convertgame = new InputConvertGame(this); + convertgame->loadKeyMap(gameScript); + m_inputConvert = convertgame; } else { m_inputConvert = new InputConvertNormal(this); } diff --git a/QtScrcpy/device/controller/inputconvert/inputconvertgame.cpp b/QtScrcpy/device/controller/inputconvert/inputconvertgame.cpp index aa5f329..6c30759 100644 --- a/QtScrcpy/device/controller/inputconvert/inputconvertgame.cpp +++ b/QtScrcpy/device/controller/inputconvert/inputconvertgame.cpp @@ -60,7 +60,7 @@ void InputConvertGame::keyEvent(const QKeyEvent *from, const QSize& frameSize, c return; } - KeyMap::KeyMapNode node = m_keyMap.getKeyMapNode(from->key()); + KeyMap::KeyMapNode& node = m_keyMap.getKeyMapNode(from->key()); // 处理特殊按键:可以在按键映射和普通映射间切换的按键 if (m_needSwitchGameAgain && KeyMap::KMT_CLICK == node.type @@ -192,7 +192,7 @@ void InputConvertGame::processSteerWheel(KeyMap::KeyMapNode &node, const QKeyEve int id = attachTouchID(node.steerWheel.firstPressKey); if (-1 == id) { return; - } + } sendTouchDownEvent(id, node.steerWheel.centerPos); needMove = true; } else if (2 == keysNum) { @@ -200,7 +200,8 @@ void InputConvertGame::processSteerWheel(KeyMap::KeyMapNode &node, const QKeyEve } } else if (QEvent::KeyRelease == from->type()){ if (0 == keysNum) { - sendTouchUpEvent(getTouchID(node.steerWheel.firstPressKey), node.steerWheel.centerPos); + int id = getTouchID(node.steerWheel.firstPressKey); + sendTouchUpEvent(id, node.steerWheel.centerPos); detachTouchID(node.steerWheel.firstPressKey); node.steerWheel.firstPressKey = 0; } else if (1 == keysNum) { @@ -328,7 +329,7 @@ void InputConvertGame::processKeyClick(QPointF clickPos, bool clickTwice, bool s bool InputConvertGame::processMouseClick(const QMouseEvent *from) { - KeyMap::KeyMapNode node = m_keyMap.getKeyMapNode(from->button()); + KeyMap::KeyMapNode& node = m_keyMap.getKeyMapNode(from->button()); if (KeyMap::KMT_INVALID == node.type) { return false; } diff --git a/QtScrcpy/device/controller/inputconvert/keymap/keymap.cpp b/QtScrcpy/device/controller/inputconvert/keymap/keymap.cpp index fd7f482..bc75a6e 100644 --- a/QtScrcpy/device/controller/inputconvert/keymap/keymap.cpp +++ b/QtScrcpy/device/controller/inputconvert/keymap/keymap.cpp @@ -14,7 +14,7 @@ QString KeyMap::s_keyMapPath = ""; KeyMap::KeyMap(QObject *parent) : QObject(parent) { - loadKeyMap(""); + } KeyMap::~KeyMap() @@ -37,7 +37,6 @@ const QString& KeyMap::getKeyMapPath() void KeyMap::loadKeyMap(const QString &json) { QString errorString; - QByteArray allData; QJsonParseError jsonError; QJsonDocument jsonDoc; QJsonObject rootObj; @@ -46,7 +45,7 @@ void KeyMap::loadKeyMap(const QString &json) QMetaEnum metaEnumMouseButtons = QMetaEnum::fromType(); QMetaEnum metaEnumKeyMapType = QMetaEnum::fromType(); - jsonDoc = QJsonDocument::fromJson(allData, &jsonError); + jsonDoc = QJsonDocument::fromJson(json.toUtf8(), &jsonError); if(jsonError.error != QJsonParseError::NoError) { @@ -255,44 +254,35 @@ parseError: return; } -KeyMap::KeyMapNode KeyMap::getKeyMapNode(int key) +KeyMap::KeyMapNode& KeyMap::getKeyMapNode(int key) { - KeyMapNode retNode; - bool find = false; - for (auto& node : m_keyMapNodes) { - switch (node.type) { + for (auto& itemNode : m_keyMapNodes) { + switch (itemNode.type) { case KMT_CLICK: - if (node.click.keyNode.key == key) { - retNode = node; - find = true; + if (itemNode.click.keyNode.key == key) { + return itemNode; } break; case KMT_CLICK_TWICE: - if (node.clickTwice.keyNode.key == key) { - retNode = node; - find = true; + if (itemNode.clickTwice.keyNode.key == key) { + return itemNode; } break; case KMT_STEER_WHEEL: - if (node.steerWheel.leftKey == key - || node.steerWheel.rightKey == key - || node.steerWheel.upKey == key - || node.steerWheel.downKey == key + if (itemNode.steerWheel.leftKey == key + || itemNode.steerWheel.rightKey == key + || itemNode.steerWheel.upKey == key + || itemNode.steerWheel.downKey == key ) { - retNode = node; - find = true; + return itemNode; } break; default: break; } - - if (find) { - break; - } } - return retNode; + return m_invalidNode; } int KeyMap::getSwitchKey() diff --git a/QtScrcpy/device/controller/inputconvert/keymap/keymap.h b/QtScrcpy/device/controller/inputconvert/keymap/keymap.h index da01d44..1b4883b 100644 --- a/QtScrcpy/device/controller/inputconvert/keymap/keymap.h +++ b/QtScrcpy/device/controller/inputconvert/keymap/keymap.h @@ -74,7 +74,7 @@ public: virtual ~KeyMap(); void loadKeyMap(const QString &json); - KeyMap::KeyMapNode getKeyMapNode(int key); + KeyMap::KeyMapNode& getKeyMapNode(int key); int getSwitchKey(); MouseMoveMap getMouseMoveMap(); bool enableMouseMoveMap(); @@ -83,6 +83,7 @@ public: private: QVector m_keyMapNodes; + KeyMapNode m_invalidNode; int m_switchKey = Qt::Key_QuoteLeft; MouseMoveMap m_mouseMoveMap; static QString s_keyMapPath; diff --git a/QtScrcpy/dialog.ui b/QtScrcpy/dialog.ui index c767e19..53d449b 100644 --- a/QtScrcpy/dialog.ui +++ b/QtScrcpy/dialog.ui @@ -364,10 +364,10 @@ - + - Game for Peace + custom map