diff --git a/BarinkEngine/Include/Input/InputManager.h b/BarinkEngine/Include/Input/InputManager.h index 74f5524..2317895 100644 --- a/BarinkEngine/Include/Input/InputManager.h +++ b/BarinkEngine/Include/Input/InputManager.h @@ -12,6 +12,13 @@ namespace BarinkEngine { void PollEvents(); void attach(BarinkWindow* window); + + // GLFW Handlers + static void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods); + static void CursorPositionCallback(GLFWwindow* window, double x, double y); + static void CursorEnterCallback(GLFWwindow* window, int entered); + static void MouseButtonCallback(GLFWwindow* window, int button, int action, int mods); + static void ScrollCallback(GLFWwindow* window, double xoffset, double yoffset); private: std::vector windows; }; diff --git a/BarinkEngine/Input/InputManager.cpp b/BarinkEngine/Input/InputManager.cpp index c823c65..68716aa 100644 --- a/BarinkEngine/Input/InputManager.cpp +++ b/BarinkEngine/Input/InputManager.cpp @@ -1,5 +1,7 @@ #include "Input/InputManager.h" - +#include "GLFW/glfw3.h" +#include "spdlog/spdlog.h" +#include void BarinkEngine::InputManager::PollEvents() { for (std::vector::iterator it = windows.begin(); it != windows.end(); ++it) { @@ -7,9 +9,61 @@ void BarinkEngine::InputManager::PollEvents() } } +void BarinkEngine::InputManager::KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) +{ + if (key == GLFW_KEY_A && action == GLFW_PRESS) + { + + std::cout << "'a' key was pressed" << std::endl; + } + +} + +void BarinkEngine::InputManager::CursorPositionCallback(GLFWwindow* window, double x, double y) +{ + std::cout << "Cursor Position x: " << x << ", y: " << y << std::endl; +} + +void BarinkEngine::InputManager::CursorEnterCallback(GLFWwindow* window, int entered) +{ + if (entered) { + // Cursor entered the window's screen space + std::cout << "Cursor entered!" << std::endl; + } + else { + std::cout << "Cursor left!" << std::endl; + } +} + + +void BarinkEngine::InputManager::MouseButtonCallback(GLFWwindow* window, int button, int action, int mods) +{ + if (button == GLFW_MOUSE_BUTTON_RIGHT && action == GLFW_PRESS) { + std::cout << "Right mouse button was pressed!" << std::endl; + } + +} + +void BarinkEngine::InputManager::ScrollCallback(GLFWwindow* window, double xoffset, double yoffset) +{ + std::cout << "Scroll: x: " << xoffset << ", y: " << yoffset << std::endl; + + +} + + void BarinkEngine::InputManager::attach(BarinkWindow* window) { + windows.push_back(window); + + // Attach callbacks + glfwSetKeyCallback(window->windowptr(), KeyCallback); + glfwSetCursorPosCallback(window->windowptr(), CursorPositionCallback); + glfwSetCursorEnterCallback(window->windowptr(), CursorEnterCallback); + glfwSetMouseButtonCallback(window->windowptr(), MouseButtonCallback); + glfwSetScrollCallback(window->windowptr(), ScrollCallback); + } BarinkEngine::InputManager::InputManager()