You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.4 KiB
92 lines
2.4 KiB
#ifndef KEYMAP_H
|
|
#define KEYMAP_H
|
|
#include <QObject>
|
|
#include <QPointF>
|
|
#include <QVector>
|
|
#include <QRectF>
|
|
|
|
|
|
class KeyMap : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
enum KeyMapType {
|
|
KMT_INVALID = -1,
|
|
KMT_CLICK = 0,
|
|
KMT_CLICK_TWICE,
|
|
KMT_STEER_WHEEL,
|
|
};
|
|
Q_ENUM(KeyMapType)
|
|
|
|
struct KeyNode {
|
|
int key = Qt::Key_unknown;
|
|
QPointF pos = QPointF(0, 0);
|
|
};
|
|
|
|
struct KeyMapNode {
|
|
KeyMapType type = KMT_INVALID;
|
|
union {
|
|
struct {
|
|
KeyNode keyNode;
|
|
bool switchMap = false;
|
|
} click;
|
|
struct {
|
|
KeyNode keyNode;
|
|
} clickTwice;
|
|
struct {
|
|
// 方向盘矩形中心位置
|
|
QPointF centerPos = {0.0f, 0.0f};
|
|
|
|
// 方向盘矩形四个方向偏移量
|
|
float leftOffset = 0.0f;
|
|
float rightOffset = 0.0f;
|
|
float upOffset = 0.0f;
|
|
float downOffset = 0.0f;
|
|
|
|
// 方向盘矩形四个方向按键
|
|
int leftKey = Qt::Key_unknown;
|
|
int rightKey = Qt::Key_unknown;
|
|
int upKey = Qt::Key_unknown;
|
|
int downKey = Qt::Key_unknown;
|
|
|
|
// 辅助变量
|
|
// 方向键的按下状态
|
|
bool leftKeyPressed = false;
|
|
bool rightKeyPressed = false;
|
|
bool upKeyPressed = false;
|
|
bool downKeyPressed = false;
|
|
// 按下方向键的数量
|
|
int pressKeysNum = 0;
|
|
// 第一次按下的键
|
|
int firstPressKey = 0;
|
|
} steerWheel;
|
|
};
|
|
KeyMapNode() {}
|
|
~KeyMapNode() {}
|
|
};
|
|
|
|
struct MouseMoveMap {
|
|
QPointF startPos = {0.0f, 0.0f};
|
|
int speedRatio = 1;
|
|
};
|
|
|
|
KeyMap(QObject *parent = Q_NULLPTR);
|
|
virtual ~KeyMap();
|
|
|
|
void loadKeyMap(const QString &json);
|
|
KeyMap::KeyMapNode getKeyMapNode(int key);
|
|
int getSwitchKey();
|
|
MouseMoveMap getMouseMoveMap();
|
|
bool enableMouseMoveMap();
|
|
|
|
static const QString& getKeyMapPath();
|
|
|
|
private:
|
|
QVector<KeyMapNode> m_keyMapNodes;
|
|
int m_switchKey = Qt::Key_QuoteLeft;
|
|
MouseMoveMap m_mouseMoveMap;
|
|
static QString s_keyMapPath;
|
|
};
|
|
|
|
#endif // KEYMAP_H
|