#include "BarinkEngine.h" #include "Input/InputManager.h" #include "GLFW/glfw3.h" #include "spdlog/spdlog.h" #include void BarinkEngine::InputManager::PollEvents() { for (auto it = windows.begin(); it != windows.end(); ++it) { (*it)->Poll(); } } void BarinkEngine::InputManager::KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) { Event KeyEvent{}; KeyEvent.name = "KEY"; InputSystem.EmitEvent(KeyEvent); 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; Event CursorPosUpdate{}; CursorPosUpdate.name = "UPDATE::CURSOR:POSITION"; InputSystem.EmitEvent(CursorPosUpdate); } void BarinkEngine::InputManager::CursorEnterCallback(GLFWwindow* window, int entered) { if (entered) { Event mouseEntered {}; mouseEntered.name = "Mouse Entered Window's confines!"; mouseEntered.argc = 0; InputSystem.EmitEvent(mouseEntered); } else { Event mouseLeft{}; mouseLeft.name = "Mouse Left Window's confines!"; mouseLeft.argc = 0; InputSystem.EmitEvent(mouseLeft); } } void BarinkEngine::InputManager::MouseButtonCallback(GLFWwindow* window, int button, int action, int mods) { Event MouseButtonEvent{}; MouseButtonEvent.name = "MOUSEBUTTON"; InputSystem.EmitEvent(MouseButtonEvent); 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; Event ScrollEvent{}; ScrollEvent.name = "SCROLL"; InputSystem.EmitEvent(ScrollEvent); } 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); this->Subscribe( (EventListener&)(*window)); } BarinkEngine::InputManager::InputManager() : EventEmitter () { windows = std::vector(); }