119 lines
2.6 KiB
C++
119 lines
2.6 KiB
C++
#include "BarinkEngine.h"
|
|
#include "Input/InputManager.h"
|
|
#include "GLFW/glfw3.h"
|
|
#include "spdlog/spdlog.h"
|
|
#include <iostream>
|
|
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<BarinkWindow*>();
|
|
}
|
|
|
|
|
|
|