feat: optimize process steer wheel

This commit is contained in:
rankun 2020-01-30 19:40:46 +08:00
parent b4b7b0dc25
commit 1b87d3b58b
2 changed files with 31 additions and 27 deletions

View file

@ -119,7 +119,6 @@ void InputConvertGame::loadKeyMap(const QString &json)
m_ctrlMouseMove.startPosPixel = calcFrameAbsolutePos(m_ctrlMouseMove.startPosRel); m_ctrlMouseMove.startPosPixel = calcFrameAbsolutePos(m_ctrlMouseMove.startPosRel);
} }
if(m_keyMap.isValidSteerWheelMap()){ if(m_keyMap.isValidSteerWheelMap()){
m_ctrlSteerWheel.valid = true;
m_ctrlMouseMove.touching = false; m_ctrlMouseMove.touching = false;
} }
} }
@ -222,46 +221,51 @@ void InputConvertGame::processSteerWheel(const KeyMap::KeyMapNode &node, const Q
int key = from->key(); int key = from->key();
bool flag = from->type() == QEvent::KeyPress; bool flag = from->type() == QEvent::KeyPress;
// identify keys // identify keys
if(key == node.data.steerWheel.up.key){ if (key == node.data.steerWheel.up.key) {
m_ctrlSteerWheel.pressedUp = flag; m_ctrlSteerWheel.pressedUp = flag;
}else if(key == node.data.steerWheel.right.key){ } else if (key == node.data.steerWheel.right.key) {
m_ctrlSteerWheel.pressedRight = flag; m_ctrlSteerWheel.pressedRight = flag;
}else if(key == node.data.steerWheel.down.key){ } else if (key == node.data.steerWheel.down.key) {
m_ctrlSteerWheel.pressedDown = flag; m_ctrlSteerWheel.pressedDown = flag;
}else{ // left } else { // left
m_ctrlSteerWheel.pressedLeft = flag; m_ctrlSteerWheel.pressedLeft = flag;
} }
// calc offset and pressed number
QPointF offset(0.0, 0.0); QPointF offset(0.0, 0.0);
int nPressed = 0; int pressedNum = 0;
if(m_ctrlSteerWheel.pressedUp){ if (m_ctrlSteerWheel.pressedUp) {
++nPressed; ++pressedNum;
offset.ry() -= node.data.steerWheel.up.extendOffset; offset.ry() -= node.data.steerWheel.up.extendOffset;
} }
if(m_ctrlSteerWheel.pressedRight){ if (m_ctrlSteerWheel.pressedRight) {
++nPressed; ++pressedNum;
offset.rx() += node.data.steerWheel.right.extendOffset; offset.rx() += node.data.steerWheel.right.extendOffset;
} }
if(m_ctrlSteerWheel.pressedDown){ if (m_ctrlSteerWheel.pressedDown) {
++nPressed; ++pressedNum;
offset.ry() += node.data.steerWheel.down.extendOffset; offset.ry() += node.data.steerWheel.down.extendOffset;
} }
if(m_ctrlSteerWheel.pressedLeft){ if (m_ctrlSteerWheel.pressedLeft) {
++nPressed; ++pressedNum;
offset.rx() -= node.data.steerWheel.left.extendOffset; offset.rx() -= node.data.steerWheel.left.extendOffset;
} }
// action // action
//qDebug()<<nPressed<<"-"<<char(from->key())<<"-"<<from->type()<<"-"<<offset; if(pressedNum == 0){
if(nPressed == 0){ // release all // touch up release all
int id = getTouchID(m_ctrlSteerWheel.touchKey); int id = getTouchID(m_ctrlSteerWheel.touchKey);
sendTouchUpEvent(id, node.data.steerWheel.centerPos + m_ctrlSteerWheel.lastOffset); sendTouchUpEvent(id, node.data.steerWheel.centerPos + m_ctrlSteerWheel.lastOffset);
detachTouchID(m_ctrlSteerWheel.touchKey); detachTouchID(m_ctrlSteerWheel.touchKey);
}else{ } else {
int id; int id;
if(nPressed == 1 && flag){ // first press // first press, get key and touch down
if (pressedNum == 1 && flag) {
m_ctrlSteerWheel.touchKey = from->key(); m_ctrlSteerWheel.touchKey = from->key();
id = attachTouchID(m_ctrlSteerWheel.touchKey); id = attachTouchID(m_ctrlSteerWheel.touchKey);
sendTouchDownEvent(id, node.data.steerWheel.centerPos); sendTouchDownEvent(id, node.data.steerWheel.centerPos);
}else{ } else {
// jsut get touch id and move
id = getTouchID(m_ctrlSteerWheel.touchKey); id = getTouchID(m_ctrlSteerWheel.touchKey);
} }
sendTouchMoveEvent(id, node.data.steerWheel.centerPos + offset); sendTouchMoveEvent(id, node.data.steerWheel.centerPos + offset);

View file

@ -67,14 +67,14 @@ private:
int multiTouchID[MULTI_TOUCH_MAX_NUM] = { 0 }; int multiTouchID[MULTI_TOUCH_MAX_NUM] = { 0 };
// steer wheel // steer wheel
struct{ struct {
bool valid = false; // the first key pressed
bool touching = false; int touchKey = Qt::Key_unknown;
int touchKey = Qt::Key_unknown; // the first key pressed bool pressedUp = false;
int nKeyPressed = 0; bool pressedDown = false;
bool pressedUp = false, pressedDown = false; bool pressedLeft = false;
bool pressedLeft = false, pressedRight = false; bool pressedRight = false;
QPointF centerPos; // for last up
QPointF lastOffset; QPointF lastOffset;
} m_ctrlSteerWheel; } m_ctrlSteerWheel;