From c730c0214abfe851555df5793d4aca82782be1d0 Mon Sep 17 00:00:00 2001 From: ladevieq Date: Mon, 25 Jan 2021 20:29:22 +0100 Subject: 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 --- src/main.cpp | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) (limited to 'src/main.cpp') 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: { - } } } -- cgit v1.3