diff options
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/main.cpp b/src/main.cpp index 63d371a..3da3d90 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,6 +10,7 @@ #include "Binder.hpp" #include "Math/MVP.hpp" #include "Shader/ShaderProgram.hpp" +#include "Mouse.hpp" #define APP_NAME "Meowcraft" @@ -21,7 +22,7 @@ void run(); void render(MC::BindableMesh&); -void process_input(MC::Window&, MC::Camera&); +void process_input(MC::Window&, MC::Mouse&, MC::Camera&); void setup_gl(); void fix_macos_render(MC::Window&); @@ -42,6 +43,7 @@ int main() { void run() { MC::Window window(APP_NAME, WINDOW_WIDTH, WINDOW_HEIGHT); + MC::Mouse mouse{}; setup_gl(); glViewport(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); @@ -92,7 +94,7 @@ void run() { fix_macos_render(window); #endif - process_input(window, camera); + process_input(window, mouse, camera); program.bind(); @@ -117,24 +119,24 @@ void render(MC::BindableMesh& mesh) { mesh.unbind(); } -void process_input(MC::Window& window, MC::Camera& camera) { +void process_input(MC::Window& window, MC::Mouse& mouse, MC::Camera& camera) { if (window.key(GLFW_KEY_ESCAPE, GLFW_PRESS)) { window.close(); } + auto r = mouse.update(window); + auto key = [&](int key) -> float { return window.key(key, GLFW_PRESS); }; float x = key(GLFW_KEY_D) - key(GLFW_KEY_A); float y = key(GLFW_KEY_SPACE) - key(GLFW_KEY_LEFT_SHIFT); float z = key(GLFW_KEY_S) - key(GLFW_KEY_W); - float rx = key(GLFW_KEY_DOWN) - key(GLFW_KEY_UP); - float ry = key(GLFW_KEY_RIGHT) - key(GLFW_KEY_LEFT); - - auto speed = 0.05f; + auto move_speed = 0.05f; + auto rotation_speed = 0.1f; - camera.move_relative({x * speed, y * speed, z * speed}); - camera.rotate({rx * speed, ry * speed, 0.0f}); + camera.move_relative({x * move_speed, y * move_speed, z * move_speed}); + camera.rotate({r.y() * rotation_speed, r.x() * rotation_speed, 0.0f}); } void setup_gl() { |
