Move mouse code to defaults
This commit is contained in:
parent
cc006e7469
commit
aba3d387e6
@ -12,7 +12,8 @@ static KeyBinding
|
||||
keyRight,
|
||||
keyUp,
|
||||
keyDown,
|
||||
keyOptions;
|
||||
keyOptions,
|
||||
keyToggleCursorMode;
|
||||
|
||||
static ButtonElement *options;
|
||||
|
||||
@ -48,6 +49,35 @@ static void defaultKey(GLFWwindow *window, int key, int scancode, int action, in
|
||||
if(key == Input::getKeyBinding(keyOptions).key && action == GLFW_PRESS) {
|
||||
options->visible = !options->visible;
|
||||
}
|
||||
|
||||
if(key == Input::getKeyBinding(keyToggleCursorMode).key && action == GLFW_PRESS) {
|
||||
if(Input::getCursorMode() == GLFWCursorMode::CAPTURE) {
|
||||
Input::setCursorMode(GLFWCursorMode::FREE);
|
||||
}else {
|
||||
Input::setCursorMode(GLFWCursorMode::CAPTURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void defaultMouseCallback(GLFWwindow *window, double x, double y, void *data) {
|
||||
static bool firstMouse = true;
|
||||
static double lastX = 0, lastY = 0;
|
||||
if(firstMouse) {
|
||||
lastX = x;
|
||||
lastY = y;
|
||||
firstMouse = false;
|
||||
}
|
||||
|
||||
float xoff = lastX - x;
|
||||
float yoff = lastY - y;
|
||||
lastX = x;
|
||||
lastY = y;
|
||||
|
||||
xoff *= 0.1f;
|
||||
yoff *= 0.1f;
|
||||
|
||||
kekData.activeCamera->rotateYaw(xoff);
|
||||
kekData.activeCamera->rotatePitch(yoff);
|
||||
}
|
||||
|
||||
void init() {
|
||||
@ -58,9 +88,11 @@ void init() {
|
||||
keyUp = Input::createKeyBinding("Up", GLFW_KEY_SPACE);
|
||||
keyDown = Input::createKeyBinding("Down", GLFW_KEY_LEFT_CONTROL);
|
||||
keyOptions = Input::createKeyBinding("Options", GLFW_KEY_Q);
|
||||
keyToggleCursorMode = Input::createKeyBinding("Toggle Cursor Mode", GLFW_KEY_TAB);
|
||||
|
||||
Input::addPeriodicCallback(PeriodicCallback(defaultInput, nullptr));
|
||||
Input::addKeyListener(KeyCallback(defaultKey, nullptr));
|
||||
Input::addMouseListener(MouseCallback(defaultMouseCallback, nullptr));
|
||||
|
||||
options = new ButtonElement(px(0), px(100), px(100), px(50));
|
||||
UI::addElement(options);
|
||||
|
@ -44,25 +44,6 @@ static void glDebugOutput(GLenum source, GLenum type, unsigned int id, GLenum se
|
||||
}
|
||||
|
||||
static void onCursorPosCallback(GLFWwindow *window, double x, double y) {
|
||||
static bool firstMouse = true;
|
||||
static double lastX = 0, lastY = 0;
|
||||
if(firstMouse) {
|
||||
lastX = x;
|
||||
lastY = y;
|
||||
firstMouse = false;
|
||||
}
|
||||
|
||||
float xoff = lastX - x;
|
||||
float yoff = lastY - y;
|
||||
lastX = x;
|
||||
lastY = y;
|
||||
|
||||
xoff *= 0.1f;
|
||||
yoff *= 0.1f;
|
||||
|
||||
kekData.activeCamera->rotateYaw(xoff);
|
||||
kekData.activeCamera->rotatePitch(yoff);
|
||||
|
||||
for(auto cb : kekData.mouseCallbacks) {
|
||||
cb.second(window, x, y);
|
||||
}
|
||||
@ -159,8 +140,13 @@ int init() {
|
||||
return KEK_ERROR;
|
||||
}
|
||||
|
||||
kekData.activeCamera = new Camera();
|
||||
std::cout << "Poop cam is " << kekData.activeCamera << std::endl;
|
||||
kekData.shader = new Shader("shader/mesh/vertex.glsl", "shader/mesh/fragment.glsl");
|
||||
kekData.shader->initLighting();
|
||||
|
||||
glfwSetCursorPosCallback(kekData.window, onCursorPosCallback);
|
||||
glfwSetInputMode(kekData.window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
|
||||
Input::setCursorMode(GLFWCursorMode::CAPTURE);
|
||||
glfwSetKeyCallback(kekData.window, onKeyCallback);
|
||||
glfwSetMouseButtonCallback(kekData.window, onMouseButtonCallback);
|
||||
|
||||
@ -169,10 +155,6 @@ int init() {
|
||||
|
||||
stbi_set_flip_vertically_on_load(true);
|
||||
|
||||
kekData.activeCamera = new Camera();
|
||||
kekData.shader = new Shader("shader/mesh/vertex.glsl", "shader/mesh/fragment.glsl");
|
||||
kekData.shader->initLighting();
|
||||
|
||||
FT_Error error = FT_Init_FreeType(&kekData.freetype);
|
||||
if(error) {
|
||||
ErrorDialog::showError("Failed to initialize FreeType: " + std::string(FT_Error_String(error)));
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include "input.h"
|
||||
|
||||
#include <map>
|
||||
#include <iostream>
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
@ -79,4 +80,14 @@ GLFWKeyState getKeyState(KeyBinding binding) {
|
||||
return glfwGetKey(kekData.window, it->second.key);
|
||||
}
|
||||
|
||||
void setCursorMode(GLFWCursorMode mode) {
|
||||
//std::cout << "POOP is " << mode << std::endl;
|
||||
glfwSetInputMode(kekData.window, GLFW_CURSOR, (int) mode);
|
||||
kekData.uiCursorMode = mode;
|
||||
}
|
||||
|
||||
GLFWCursorMode getCursorMode() {
|
||||
return kekData.uiCursorMode;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -16,13 +16,24 @@ typedef unsigned int InputListener;
|
||||
typedef int GLFWKey;
|
||||
typedef int GLFWKeyState;
|
||||
typedef unsigned int KeyBinding;
|
||||
typedef int GLFWMouseButton;
|
||||
|
||||
struct KeyBindingData {
|
||||
std::string name;
|
||||
GLFWKey key;
|
||||
};
|
||||
|
||||
enum class GLFWCursorMode {
|
||||
CAPTURE = GLFW_CURSOR_DISABLED,
|
||||
FREE = GLFW_CURSOR_NORMAL,
|
||||
HIDDEN = GLFW_CURSOR_HIDDEN
|
||||
};
|
||||
|
||||
enum class GLFWMouseButton {
|
||||
LEFT = GLFW_MOUSE_BUTTON_LEFT,
|
||||
RIGHT = GLFW_MOUSE_BUTTON_RIGHT,
|
||||
MIDDLE = GLFW_MOUSE_BUTTON_MIDDLE
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
namespace kek::Input {
|
||||
@ -44,4 +55,7 @@ void reassignKeyBinding(KeyBinding mapping, GLFWKey key);
|
||||
KeyBindingData getKeyBinding(KeyBinding mapping);
|
||||
GLFWKeyState getKeyState(KeyBinding mapping);
|
||||
|
||||
void setCursorMode(GLFWCursorMode mode);
|
||||
GLFWCursorMode getCursorMode();
|
||||
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ struct KekData {
|
||||
std::vector<UIElement *> uiElements;
|
||||
Font *uiDefaultFont;
|
||||
Shader *uiRectangleShader;
|
||||
GLFWCursorMode uiCursorMode;
|
||||
};
|
||||
|
||||
extern KekData kekData;
|
||||
|
Loading…
Reference in New Issue
Block a user