Loading [MathJax]/extensions/tex2jax.js
gldemo
All Classes Functions Variables Modules Pages
Input.h
1 #pragma once
2 
3 #include <vector>
4 #include <map>
5 #include <qapplication.h>
6 #include <qpoint.h>
7 
8 
16 static class Input {
17 
18 private:
19 
20  static std::map<Qt::MouseButton, bool> mouseButtonState, mouseButtonStateCache, mouseButtonStatePrevCache;
21  static std::map<Qt::Key, bool> keyState, keyStateCache, keyStatePrevCache;
22  static float mouseDelta, mouseDeltaCache;
23  static std::map<QString, float> axisValues, axisValuesCache, axisValuesPrevCache;
24 
25  template <class TKey, class TValue>
26  static TValue mapDefaultGet(std::map<TKey, TValue>& m, TKey key, TValue defaultValue) {
27  if (m.count(key) == 0) return defaultValue;
28  return m[key];
29  }
30 
31 public:
32 
33  // ---key----
34  static bool getKey(Qt::Key keycode) {
35  return mapDefaultGet(keyStateCache, keycode, false);
36  }
37  static bool getKeyDown(Qt::Key keycode) {
38  return mapDefaultGet(keyStateCache, keycode, false) && !mapDefaultGet(keyStatePrevCache, keycode, false);
39  }
40  static bool getKeyUp(Qt::Key keycode) {
41  return (!mapDefaultGet(keyStateCache, keycode, false)) && mapDefaultGet(keyStatePrevCache, keycode, false);
42  }
43  static void setKey(Qt::Key keycode, bool down) {
44  keyState[keycode] = down;
45  }
46 
47  // ---mouse---
48  static bool getMouseButton(Qt::MouseButton i) {
49  return mapDefaultGet(mouseButtonStateCache, i, false);
50  }
51  static bool getMouseButtonDown(Qt::MouseButton i) {
52  return mapDefaultGet(mouseButtonStateCache, i, false) && !mapDefaultGet(mouseButtonStatePrevCache, i, false);
53  }
54  static bool getMouseButtonUp(Qt::MouseButton i) {
55  return (!mapDefaultGet(mouseButtonStateCache, i, false)) && mapDefaultGet(mouseButtonStatePrevCache, i, false);
56  }
57  static void setMouseButton(Qt::MouseButton i, bool down) {
58  //assert(i >= 0 && i < 3);
59  mouseButtonState[i] = down;
60  }
61 
62  // ----mouse wheel----
63  static float getMouseWheelDelta() {
64  return mouseDeltaCache;
65  }
66  static void setMouseWheelDelta(float delta) {
67  mouseDelta = delta;
68  }
69 
70  // ----axis-----
71  static float getAxis(const QString& name) {
72  return mapDefaultGet(axisValuesCache, name, 0.0f);
73  }
74  static float getAxisDelta(const QString& name) {
75  return mapDefaultGet(axisValuesCache, name, 0.0f) - mapDefaultGet(axisValuesPrevCache, name, 0.0f);
76  }
77  static void setAxis(const QString& name, float value) {
78  axisValues[name] = value;
79  }
80 
81 
82  static void beforeUpdate() {
83  // copy
84  keyStatePrevCache = keyStateCache;
85  mouseButtonStatePrevCache = mouseButtonStateCache;
86  axisValuesPrevCache = axisValuesCache;
87  keyStateCache = keyState;
88  mouseButtonStateCache = mouseButtonState;
89  axisValuesCache = axisValues;
90  // mouse wheel
91  mouseDeltaCache = mouseDelta;
92  mouseDelta = 0; // clear
93  }
94 
95 
96 };
97 
统一处理鼠标、键盘等各种输入
Definition: Input.h:16