diff options
| author | ladevieq <ladevie.quentin@gmail.com> | 2021-01-25 20:29:22 +0100 |
|---|---|---|
| committer | ladevieq <ladevie.quentin@gmail.com> | 2021-01-25 20:32:53 +0100 |
| commit | c730c0214abfe851555df5793d4aca82782be1d0 (patch) | |
| tree | 8c8c4d83474d00da97b5ab2be1d0c57bd3a874b2 /src/main.cpp | |
| parent | 2cd8461c738e857f054f4c65c0a1baf8bb9ba5b3 (diff) | |
Fix input handling for Windows
Windows generate keydown events for the last pressed key only
If we are pressing two key together this is troublesome as we don't get
notified we are pressing two keys
Fixed by updating an array of key states on key down/release and
generating event while the key state is pressed
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/src/main.cpp b/src/main.cpp index 9d4a0bf..17d7fb2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -78,31 +78,34 @@ int main() { } vec3 move_vec {}; - if (wnd.keyboard[KEYS::W]) { - move_vec += renderer.mapped_data->cam.forward; - } - if (wnd.keyboard[KEYS::S]) { - move_vec += -renderer.mapped_data->cam.forward; - } - if (wnd.keyboard[KEYS::D]) { - move_vec += renderer.mapped_data->cam.right; - } - if (wnd.keyboard[KEYS::A]) { - move_vec += -renderer.mapped_data->cam.right; - } - move_vec = move_vec.unit() * move_speed; + switch (event.key) { + case KEYS::W: { + move_vec = renderer.mapped_data->cam.forward.unit() * move_speed; + break; + } + case KEYS::S: { + move_vec = -renderer.mapped_data->cam.forward.unit() * move_speed; + break; + } + case KEYS::D: { + move_vec = renderer.mapped_data->cam.right.unit() * move_speed; + break; + } + case KEYS::A: { + move_vec = -renderer.mapped_data->cam.right.unit() * move_speed; + break; + } + default: + break; + } renderer.mapped_data->cam.move(move_vec); break; } - case EVENT_TYPES::MOVE: { - std::cerr << "X : " << event.x << " Y : " << event.y << std::endl; + default: break; - } - default: { - } } } |
