Allow Disabling Raw Mouse Motion

This commit is contained in:
TheBrokenRail 2022-03-06 20:07:49 -05:00
parent 1eb06b6b60
commit 0fd562af40
6 changed files with 42 additions and 3 deletions

View File

@ -29,3 +29,4 @@ TRUE External Server Support
TRUE Load Language Files TRUE Load Language Files
TRUE Implement Sound Engine TRUE Implement Sound Engine
TRUE Close Current Screen On Death TRUE Close Current Screen On Death
FALSE Disable Raw Mouse Motion (Not Recommended)

View File

@ -27,7 +27,7 @@ void media_set_interactable(int toggle) {
// GLFW Code Not Needed In Headless Mode // GLFW Code Not Needed In Headless Mode
#ifndef MCPI_HEADLESS_MODE #ifndef MCPI_HEADLESS_MODE
static GLFWwindow *glfw_window; static GLFWwindow *glfw_window = NULL;
// Handle GLFW Error // Handle GLFW Error
static void glfw_error(__attribute__((unused)) int error, const char *description) { static void glfw_error(__attribute__((unused)) int error, const char *description) {
@ -227,6 +227,20 @@ static void glfw_scroll(__attribute__((unused)) GLFWwindow *window, __attribute_
// Track Media Layer State // Track Media Layer State
static int is_running = 0; static int is_running = 0;
// Track If Raw Mouse Motion Is Enabled
static int raw_mouse_motion_enabled = 1;
void media_set_raw_mouse_motion_enabled(int enabled) {
raw_mouse_motion_enabled = enabled;
#ifndef MCPI_HEADLESS_MODE
if (is_running) {
glfwSetInputMode(glfw_window, GLFW_RAW_MOUSE_MOTION, GLFW_FALSE);
}
#endif // #ifndef MCPI_HEADLESS_MODE
if (!raw_mouse_motion_enabled) {
WARN("%s", "Raw mouse motion has been DISABLED, this IS NOT recommended, and should only ever be used on systems that don't support or have broken raw mouse motion.");
}
}
// Disable V-Sync // Disable V-Sync
static int disable_vsync = 0; static int disable_vsync = 0;
void media_disable_vsync() { void media_disable_vsync() {
@ -409,7 +423,7 @@ static void update_cursor() {
glfwSetInputMode(glfw_window, GLFW_CURSOR, new_mode); glfwSetInputMode(glfw_window, GLFW_CURSOR, new_mode);
// Handle Cursor Lock/Unlock // Handle Cursor Lock/Unlock
if ((new_mode == GLFW_CURSOR_DISABLED && old_mode != GLFW_CURSOR_DISABLED) || (new_mode != GLFW_CURSOR_DISABLED && old_mode == GLFW_CURSOR_DISABLED)) { if (raw_mouse_motion_enabled && ((new_mode == GLFW_CURSOR_DISABLED && old_mode != GLFW_CURSOR_DISABLED) || (new_mode != GLFW_CURSOR_DISABLED && old_mode == GLFW_CURSOR_DISABLED))) {
// Use Raw Mouse Motion // Use Raw Mouse Motion
glfwSetInputMode(glfw_window, GLFW_RAW_MOUSE_MOTION, new_mode == GLFW_CURSOR_DISABLED ? GLFW_TRUE : GLFW_FALSE); glfwSetInputMode(glfw_window, GLFW_RAW_MOUSE_MOTION, new_mode == GLFW_CURSOR_DISABLED ? GLFW_TRUE : GLFW_FALSE);
} }

View File

@ -17,6 +17,7 @@ void media_cleanup();
void media_get_framebuffer_size(int *width, int *height); void media_get_framebuffer_size(int *width, int *height);
void media_set_interactable(int is_interactable); void media_set_interactable(int is_interactable);
void media_disable_vsync(); void media_disable_vsync();
void media_set_raw_mouse_motion_enabled(int enabled);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -336,3 +336,20 @@ CALL(63, media_disable_vsync, void, ()) {
media_disable_vsync(); media_disable_vsync();
#endif #endif
} }
CALL(64, media_set_raw_mouse_motion_enabled, void, (int enabled)) {
#if defined(MEDIA_LAYER_PROXY_SERVER)
// Lock Proxy
start_proxy_call();
// Arguments
write_int(enabled);
// Release Proxy
end_proxy_call();
#else
int enabled = read_int();
// Run
media_set_raw_mouse_motion_enabled(enabled);
#endif
}

View File

@ -34,7 +34,7 @@ if(BUILD_ARM_COMPONENTS)
# MCPI Depends On GLESv2, But Uses GLESv1_CM # MCPI Depends On GLESv2, But Uses GLESv1_CM
install_symlink("libGLESv1_CM.so.1" "${MCPI_LIB_DIR}/libGLESv2.so") install_symlink("libGLESv1_CM.so.1" "${MCPI_LIB_DIR}/libGLESv2.so")
# Prevent MCPI From Linking To The Legacy GL Driver When Directly Linking To GL # Prevent MCPI From Linking To The Legacy GL Driver When Directly Linking To GL (RPI-Specific)
if(NOT MCPI_HEADLESS_MODE AND NOT MCPI_USE_MEDIA_LAYER_PROXY) if(NOT MCPI_HEADLESS_MODE AND NOT MCPI_USE_MEDIA_LAYER_PROXY)
# Symlinks # Symlinks
install_symlink("/usr/lib/arm-linux-gnueabihf/libEGL.so.1" "${MCPI_LIB_DIR}/libEGL.so") install_symlink("/usr/lib/arm-linux-gnueabihf/libEGL.so.1" "${MCPI_LIB_DIR}/libEGL.so")

View File

@ -2,6 +2,7 @@
#include <libreborn/libreborn.h> #include <libreborn/libreborn.h>
#include <symbols/minecraft.h> #include <symbols/minecraft.h>
#include <media-layer/core.h>
#include "../feature/feature.h" #include "../feature/feature.h"
#include "../init/init.h" #include "../init/init.h"
@ -46,4 +47,9 @@ void init_input() {
// Allow Attacking Mobs // Allow Attacking Mobs
_init_attack(); _init_attack();
// Disable Raw Mouse Motion
if (feature_has("Disable Raw Mouse Motion (Not Recommended)", 9)) {
media_set_raw_mouse_motion_enabled(0);
}
} }