Cleaned up input with IMGUI while using mouse look

This commit is contained in:
connellpaxton 2024-01-30 16:20:07 -05:00
parent 6d353814fc
commit 703fe88fa6
5 changed files with 26 additions and 2 deletions

View File

@ -67,11 +67,16 @@ Input::Input(INPUT_PTR in) : in(in) {
}
});
});
}
glfwSetInputMode(in, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
void Input::setCursor(bool enabled) {
glfwSetInputMode(in, GLFW_CURSOR, enabled? GLFW_CURSOR_NORMAL : GLFW_CURSOR_DISABLED);
}
void Input::handleMovementKeys(Renderer& ren) {
if (ImGui::GetIO().WantCaptureKeyboard)
return;
const auto forward = glm::vec3(glm::cos(ren.cam.phi), 0.0, glm::sin(ren.cam.phi));
const auto right = glm::cross(forward, glm::vec3(0.0, 1.0, 0.0));
const auto speed = glfwGetKey(in, GLFW_KEY_LEFT_SHIFT)? 2.0f : 1.0f;
@ -129,6 +134,15 @@ void Input::handleCursorMovement(Renderer& ren, double x, double y) {
int rel_mouse_x = static_cast<int>(x) - last_mouse.x;
int rel_mouse_y = static_cast<int>(y) - last_mouse.y;
auto& io = ImGui::GetIO();
if (io.WantCaptureMouse)
return;
if (!ren.capture_mouse) {
io.AddMousePosEvent(x, y);
return;
}
ren.cam.phi += rel_mouse_x / 100.0;
ren.cam.theta += rel_mouse_y / 100.0;

View File

@ -72,5 +72,7 @@ struct Input {
void handleMovementKeys(Renderer& ren);
void handleCursorMovement(Renderer& ren, double x, double y);
void setCursor(bool enabled);
bool shouldClose();
};

View File

@ -61,4 +61,6 @@ struct Renderer {
std::unique_ptr<UI> ui;
Camera cam {};
bool capture_mouse = false;
};

View File

@ -91,7 +91,7 @@ void UI::newFrame() {
ImGui::Text("FPS: %f", info.fps);
ImGui::SliderAngle("Theta", &info.cam.theta, 0.01, 179.9);
ImGui::SliderAngle("Phi", &info.cam.phi);
ImGui::SliderAngle("Phi", &info.cam.phi, 0.0, 360.0, "%.0f def");
ImGui::SliderFloat("cam.x", &info.cam.pos.x, -1e2, 1e2);
ImGui::SliderFloat("cam.y", &info.cam.pos.y, -1e2, 1e2);
ImGui::SliderFloat("cam.z", &info.cam.pos.z, -1e2, 1e2);

View File

@ -40,6 +40,12 @@ int main(int argc, char* argv[]) {
break;
case InputEvent::Tag::eBUTTON:
break;
case InputEvent::Tag::eKEY:
if (event.key.key == GLFW_KEY_ESCAPE && event.key.state == GLFW_PRESS) {
ren.capture_mouse = !ren.capture_mouse;
in->setCursor(!ren.capture_mouse);
}
break;
}
}