aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/window.hpp82
-rw-r--r--src/main.cpp42
-rw-r--r--src/window.cpp95
3 files changed, 171 insertions, 48 deletions
diff --git a/include/window.hpp b/include/window.hpp
index 7667bbc..66bd0eb 100644
--- a/include/window.hpp
+++ b/include/window.hpp
@@ -16,30 +16,64 @@ class vkrenderer;
#include <Windows.h>
#endif
-enum MODIFIERS {
- SHIFT = 1,
- LOCK = 2,
- CTRL = 4,
- ALT = 8,
- MOD2 = 16,
- MOD3 = 32,
- MOD4 = 64,
- MOD5 = 128,
- BUTTON1 = 256,
- BUTTON2 = 512,
- BUTTON3 = 1024,
- BUTTON4 = 2048,
- BUTTON5 = 4096,
-};
+// enum MODIFIERS: uint32_t {
+// SHIFT = 1,
+// LOCK = 2,
+// CTRL = 4,
+// ALT = 8,
+// MOD2 = 16,
+// MOD3 = 32,
+// MOD4 = 64,
+// MOD5 = 128,
+// BUTTON1 = 256,
+// BUTTON2 = 512,
+// BUTTON3 = 1024,
+// BUTTON4 = 2048,
+// BUTTON5 = 4096,
+// };
-enum KEYS {
- SPACE,
- Z,
+#if defined(WINDOWS)
+enum KEYS: uint32_t {
+ SHIFT = 0x10,
+ CTRL,
+ ALT,
+ A = 0x41,
+ B,
+ C,
+ D,
+ E,
+ F,
+ G,
+ H,
+ I,
+ J,
+ K,
+ L,
+ M,
+ N,
+ O,
+ P,
Q,
+ R,
S,
- D,
+ T,
+ U,
+ V,
+ W,
+ X,
+ Y,
+ Z,
+ MAX_KEYS = 255
};
+enum BUTTONS: uint32_t {
+ LEFT,
+ RIGHT,
+ MIDDLE,
+ MAX_BUTTONS = 255
+};
+#endif
+
enum EVENT_TYPES: int32_t {
QUIT,
RESIZE,
@@ -53,9 +87,10 @@ enum EVENT_TYPES: int32_t {
struct event {
uint32_t width;
uint32_t height;
- // KEYS key;
- uint32_t modifiers;
- uint32_t keycode;
+ KEYS key;
+ BUTTONS button;
+ // uint32_t modifiers;
+ // uint32_t keycode;
int32_t x;
int32_t y;
EVENT_TYPES type;
@@ -92,6 +127,9 @@ class window {
uint32_t height;
bool isOpen;
+
+ bool keyboard[KEYS::MAX_KEYS] = { false };
+ bool mouse[BUTTONS::MAX_BUTTONS] = { false };
};
#endif // !__WINDOW_HPP_
diff --git a/src/main.cpp b/src/main.cpp
index d7e6462..9d4a0bf 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -72,32 +72,34 @@ int main() {
break;
}
case EVENT_TYPES::KEY_PRESS: {
- auto move_speed = 0.1;
- if (event.modifiers & MODIFIERS::SHIFT) {
- move_speed *= 10;
+ auto move_speed = 0.1f;
+ if (wnd.keyboard[KEYS::SHIFT]) {
+ move_speed *= 10.f;
}
- switch((uint8_t)event.keycode) {
- case('w'): {
- renderer.mapped_data->cam.move(renderer.mapped_data->cam.forward * move_speed);
- break;
- }
- case('s'): {
- renderer.mapped_data->cam.move(-renderer.mapped_data->cam.forward * move_speed);
- break;
- }
- case('d'): {
- renderer.mapped_data->cam.move(renderer.mapped_data->cam.right * move_speed);
- break;
- }
- case('a'): {
- renderer.mapped_data->cam.move(-renderer.mapped_data->cam.right * move_speed);
- break;
- }
+ 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;
+
+ renderer.mapped_data->cam.move(move_vec);
+
+ break;
}
case EVENT_TYPES::MOVE: {
std::cerr << "X : " << event.x << " Y : " << event.y << std::endl;
+ break;
}
default: {
}
diff --git a/src/window.cpp b/src/window.cpp
index 43fff2a..273d7e9 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -123,11 +123,10 @@ void window::poll_events() {
auto keysym = xkb_state_key_get_one_sym(keyboard_state, key_press_event->detail);
struct event new_event = {
.type = event->response_type == XCB_KEY_PRESS ? EVENT_TYPES::KEY_PRESS :EVENT_TYPES::KEY_RELEASE
+ .modifiers = key_press_event->state;
+ .keycode = keysym;
};
- new_event.modifiers = key_press_event->state;
- new_event.keycode = keysym;
-
events.push_back(new_event);
break;
}
@@ -166,6 +165,10 @@ void window::poll_events() {
}
#elif defined(WINDOWS)
+
+#include <windowsx.h>
+#include <cctype>
+
LRESULT CALLBACK window::window_procedure(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam) {
window* win = nullptr;
@@ -219,6 +222,8 @@ window::window(uint32_t width, uint32_t height)
isOpen = true;
}
+window::~window() {}
+
void window::poll_events() {
MSG msg = {};
@@ -235,7 +240,7 @@ LRESULT window::message_handler(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lpar
case WM_QUIT: {
events.push_back({ .type = EVENT_TYPES::QUIT });
isOpen = false;
- return 0;
+ break;
}
case WM_SIZE: {
width = LOWORD(lparam);
@@ -246,9 +251,87 @@ LRESULT window::message_handler(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lpar
.height = height,
.type = EVENT_TYPES::RESIZE
});
- return 0;
+ break;
+ }
+
+ case WM_KEYDOWN: {
+ auto key_press_event = event {
+ .key = (KEYS)wparam,
+ .type = EVENT_TYPES::KEY_PRESS,
+ };
+
+ keyboard[wparam] = true;
+
+ events.push_back(key_press_event);
+ break;
+ }
+
+ case WM_KEYUP: {
+ auto key_press_event = event {
+ .key = (KEYS)wparam,
+ .type = EVENT_TYPES::KEY_RELEASE,
+ };
+
+ keyboard[wparam] = false;
+
+ events.push_back(key_press_event);
+ break;
+ }
+
+ case WM_LBUTTONDOWN: {
+ events.push_back({
+ .button = BUTTONS::LEFT,
+ .type = EVENT_TYPES::BUTTON_PRESS,
+ });
+ break;
+ }
+ case WM_LBUTTONUP: {
+ events.push_back({
+ .button = BUTTONS::LEFT,
+ .type = EVENT_TYPES::BUTTON_RELEASE,
+ });
+ break;
+ }
+ case WM_RBUTTONDOWN: {
+ events.push_back({
+ .button = BUTTONS::RIGHT,
+ .type = EVENT_TYPES::BUTTON_PRESS,
+ });
+ break;
+ }
+ case WM_RBUTTONUP: {
+ events.push_back({
+ .button = BUTTONS::RIGHT,
+ .type = EVENT_TYPES::BUTTON_RELEASE,
+ });
+ break;
+ }
+ case WM_MBUTTONDOWN: {
+ events.push_back({
+ .button = BUTTONS::MIDDLE,
+ .type = EVENT_TYPES::BUTTON_PRESS,
+ });
+ break;
+ }
+ case WM_MBUTTONUP: {
+ events.push_back({
+ .button = BUTTONS::MIDDLE,
+ .type = EVENT_TYPES::BUTTON_RELEASE,
+ });
+ break;
+ }
+ case WM_MOUSEMOVE: {
+ events.push_back({
+ .x = GET_X_LPARAM(lparam),
+ .y = GET_Y_LPARAM(lparam),
+ .type = EVENT_TYPES::MOVE,
+ });
+ break;
+ }
+ default: {
+ return DefWindowProc(hwnd, umsg, wparam, lparam);
}
}
- return DefWindowProc(hwnd, umsg, wparam, lparam);
+ return 0;
}
#endif