mirror of
https://github.com/rock88/moonlight-nx
synced 2025-02-21 15:08:30 +00:00
Fix controls
This commit is contained in:
parent
d12e1090f8
commit
9464b1d424
8 changed files with 64 additions and 9 deletions
|
@ -516,7 +516,7 @@ int gs_init(PSERVER_DATA server, char *address, const char *keyDirectory, int lo
|
|||
}
|
||||
}
|
||||
|
||||
http_init(keyDirectory, 2);
|
||||
http_init(keyDirectory, log_level);
|
||||
|
||||
LiInitializeServerInformation(&server->serverInfo);
|
||||
server->serverInfo.address = address;
|
||||
|
|
|
@ -106,7 +106,7 @@ void InputController::handle_game_pad() {
|
|||
}
|
||||
|
||||
void InputController::send_to_stream() {
|
||||
#if defined(__LAKKA_SWITCH__)
|
||||
#if defined(__SWITCH__) || defined(__LAKKA_SWITCH__)
|
||||
static bool pressed = false;
|
||||
static int mouse_x = mouse_state.x, mouse_y = mouse_state.y;
|
||||
static int last_mouse_x = 0, last_mouse_y = 0;
|
||||
|
|
|
@ -21,10 +21,15 @@ static int mouse_x = 0, mouse_y = 0;
|
|||
static int mouse_l = 0, mouse_r = 0;
|
||||
|
||||
static int glfw_keyboard_state[GLFW_KEY_LAST];
|
||||
static GLFWgamepadstate glfw_gamepad_state;
|
||||
int moonlight_exit = 0;
|
||||
|
||||
#define GLFW_KEY_TO_RETRO(RETRO, KEY) \
|
||||
if (id == RETRO) return glfw_keyboard_state[KEY];
|
||||
|
||||
#define GLFW_GAMEPAD_TO_RETRO(RETRO, KEY) \
|
||||
if (id == RETRO) return glfw_gamepad_state.buttons[KEY];
|
||||
|
||||
static int16_t glfw_input_state_cb(unsigned port, unsigned device, unsigned index, unsigned id) {
|
||||
if (device == RETRO_DEVICE_MOUSE) {
|
||||
if (id == RETRO_DEVICE_ID_MOUSE_X) {
|
||||
|
@ -37,6 +42,29 @@ static int16_t glfw_input_state_cb(unsigned port, unsigned device, unsigned inde
|
|||
return mouse_r;
|
||||
}
|
||||
} else if (device == RETRO_DEVICE_JOYPAD) {
|
||||
#if defined(__SWITCH__)
|
||||
GLFW_GAMEPAD_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_UP, GLFW_GAMEPAD_BUTTON_DPAD_UP);
|
||||
GLFW_GAMEPAD_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_DOWN, GLFW_GAMEPAD_BUTTON_DPAD_DOWN);
|
||||
GLFW_GAMEPAD_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_LEFT, GLFW_GAMEPAD_BUTTON_DPAD_LEFT);
|
||||
GLFW_GAMEPAD_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_RIGHT, GLFW_GAMEPAD_BUTTON_DPAD_RIGHT);
|
||||
GLFW_GAMEPAD_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_L, GLFW_GAMEPAD_BUTTON_LEFT_BUMPER);
|
||||
GLFW_GAMEPAD_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_R, GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER);
|
||||
GLFW_GAMEPAD_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_L3, GLFW_GAMEPAD_BUTTON_LEFT_THUMB);
|
||||
GLFW_GAMEPAD_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_R3, GLFW_GAMEPAD_BUTTON_RIGHT_THUMB);
|
||||
GLFW_GAMEPAD_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_A, GLFW_GAMEPAD_BUTTON_A);
|
||||
GLFW_GAMEPAD_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_B, GLFW_GAMEPAD_BUTTON_B);
|
||||
GLFW_GAMEPAD_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_X, GLFW_GAMEPAD_BUTTON_X);
|
||||
GLFW_GAMEPAD_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_Y, GLFW_GAMEPAD_BUTTON_Y);
|
||||
GLFW_GAMEPAD_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_SELECT, GLFW_GAMEPAD_BUTTON_BACK);
|
||||
GLFW_GAMEPAD_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_START, GLFW_GAMEPAD_BUTTON_START);
|
||||
|
||||
if (id == RETRO_DEVICE_ID_JOYPAD_L2) {
|
||||
return (glfw_gamepad_state.axes[GLFW_GAMEPAD_AXIS_LEFT_TRIGGER] + 1) / 2;
|
||||
}
|
||||
if (id == RETRO_DEVICE_ID_JOYPAD_R2) {
|
||||
return (glfw_gamepad_state.axes[GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER] + 1) / 2;
|
||||
}
|
||||
#else
|
||||
GLFW_KEY_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_UP, GLFW_KEY_UP);
|
||||
GLFW_KEY_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_DOWN, GLFW_KEY_DOWN);
|
||||
GLFW_KEY_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_LEFT, GLFW_KEY_LEFT);
|
||||
|
@ -49,6 +77,15 @@ static int16_t glfw_input_state_cb(unsigned port, unsigned device, unsigned inde
|
|||
GLFW_KEY_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_B, GLFW_KEY_B);
|
||||
GLFW_KEY_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_X, GLFW_KEY_X);
|
||||
GLFW_KEY_TO_RETRO(RETRO_DEVICE_ID_JOYPAD_Y, GLFW_KEY_Y);
|
||||
#endif
|
||||
} else if (device == RETRO_DEVICE_ANALOG && index == RETRO_DEVICE_INDEX_ANALOG_LEFT && id == RETRO_DEVICE_ID_ANALOG_X) {
|
||||
return glfw_gamepad_state.axes[GLFW_GAMEPAD_AXIS_LEFT_X] * 0xFFFF / 2;
|
||||
} else if (device == RETRO_DEVICE_ANALOG && index == RETRO_DEVICE_INDEX_ANALOG_LEFT && id == RETRO_DEVICE_ID_ANALOG_Y) {
|
||||
return glfw_gamepad_state.axes[GLFW_GAMEPAD_AXIS_LEFT_Y] * 0xFFFF / 2;
|
||||
} else if (device == RETRO_DEVICE_ANALOG && index == RETRO_DEVICE_INDEX_ANALOG_RIGHT && id == RETRO_DEVICE_ID_ANALOG_X) {
|
||||
return glfw_gamepad_state.axes[GLFW_GAMEPAD_AXIS_RIGHT_X] * 0xFFFF / 2;
|
||||
} else if (device == RETRO_DEVICE_ANALOG && index == RETRO_DEVICE_INDEX_ANALOG_RIGHT && id == RETRO_DEVICE_ID_ANALOG_Y) {
|
||||
return glfw_gamepad_state.axes[GLFW_GAMEPAD_AXIS_RIGHT_Y] * 0xFFFF / 2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -98,6 +135,7 @@ int main(int argc, const char * argv[]) {
|
|||
|
||||
glfwSetKeyCallback(window, [](GLFWwindow *w, int key, int scancode, int action, int mods) {
|
||||
glfw_keyboard_state[key] = action != GLFW_RELEASE;
|
||||
nanogui::keyboard_event(key, scancode, action, mods);
|
||||
});
|
||||
|
||||
int width, height, fb_width, fb_height;
|
||||
|
@ -115,17 +153,16 @@ int main(int argc, const char * argv[]) {
|
|||
|
||||
nanogui::setup(1.0 / 15.0);
|
||||
|
||||
while (!glfwWindowShouldClose(window)) {
|
||||
while (!glfwWindowShouldClose(window) && !moonlight_exit) {
|
||||
#ifdef __SWITCH__
|
||||
hidScanInput();
|
||||
u32 kDown = hidKeysDown(CONTROLLER_P1_AUTO);
|
||||
if (kDown & KEY_PLUS) {
|
||||
printf("Exit...\n");
|
||||
break;
|
||||
if (hidKeysDown(CONTROLLER_P1_AUTO) & KEY_PLUS) {
|
||||
nanogui::keyboard_event(GLFW_KEY_ESCAPE, 0, 1, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
glfwPollEvents();
|
||||
glfwGetGamepadState(GLFW_JOYSTICK_1, &glfw_gamepad_state);
|
||||
|
||||
InputController::controller()->handle_input(width, height);
|
||||
|
||||
|
@ -142,7 +179,8 @@ int main(int argc, const char * argv[]) {
|
|||
extern void terminate_gamestream_thread();
|
||||
terminate_gamestream_thread();
|
||||
#endif
|
||||
//nanogui::shutdown();
|
||||
nanogui::leave();
|
||||
nanogui::shutdown();
|
||||
glfwTerminate();
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -44,6 +44,7 @@ void Application::push_widget(Widget* widget) {
|
|||
w->window_appear();
|
||||
}
|
||||
|
||||
update_focus(widget);
|
||||
perform_layout();
|
||||
}
|
||||
|
||||
|
@ -59,6 +60,7 @@ void Application::pop_window() {
|
|||
|
||||
remove_child(last);
|
||||
m_windows.back()->set_visible(true);
|
||||
update_focus(m_windows.back());
|
||||
perform_layout();
|
||||
}
|
||||
|
||||
|
|
|
@ -49,6 +49,10 @@ public:
|
|||
m_container->set_layout(new nanogui::BoxLayout(orientation, alignment, margin, spacing));
|
||||
}
|
||||
|
||||
bool keyboard_event(int key, int scancode, int action, int modifiers) override {
|
||||
return true;
|
||||
};
|
||||
|
||||
private:
|
||||
Application* application() {
|
||||
auto application = static_cast<Application *>(screen());
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
#include "Settings.hpp"
|
||||
#include "nanovg.h"
|
||||
|
||||
extern int moonlight_exit;
|
||||
|
||||
using namespace nanogui;
|
||||
|
||||
MainWindow::MainWindow(Widget *parent): ContentWindow(parent, "Moonlight ") {
|
||||
|
@ -73,3 +75,10 @@ void MainWindow::draw(NVGcontext *ctx) {
|
|||
|
||||
nvgRestore(ctx);
|
||||
}
|
||||
|
||||
bool MainWindow::keyboard_event(int key, int scancode, int action, int modifiers) {
|
||||
if (key == 256 && action == 1) {
|
||||
moonlight_exit = 1;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -9,6 +9,8 @@ public:
|
|||
|
||||
void draw(NVGcontext *ctx) override;
|
||||
|
||||
bool keyboard_event(int key, int scancode, int action, int modifiers) override;
|
||||
|
||||
private:
|
||||
void reload();
|
||||
};
|
||||
|
|
2
third_party/nanogui
vendored
2
third_party/nanogui
vendored
|
@ -1 +1 @@
|
|||
Subproject commit 48528d30a2c2036b7e006915984cae6f44f60f34
|
||||
Subproject commit ec772a923595c1d4b08156fcbf8f4631871dd642
|
Loading…
Add table
Reference in a new issue