mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-12 10:41:15 +00:00
Some quick dpad mouse control (#533)
This commit is contained in:
parent
58338fecfc
commit
fd0b6bcaca
105
ISLE/isleapp.cpp
105
ISLE/isleapp.cpp
@ -95,6 +95,11 @@ MxFloat g_lastJoystickMouseY = 0;
|
||||
MxFloat g_lastMouseX = 320;
|
||||
MxFloat g_lastMouseY = 240;
|
||||
|
||||
bool g_dpadUp = false;
|
||||
bool g_dpadDown = false;
|
||||
bool g_dpadLeft = false;
|
||||
bool g_dpadRight = false;
|
||||
|
||||
// STRING: ISLE 0x4101dc
|
||||
#define WINDOW_TITLE "LEGO®"
|
||||
|
||||
@ -466,17 +471,73 @@ SDL_AppResult SDL_AppEvent(void* appstate, SDL_Event* event)
|
||||
break;
|
||||
}
|
||||
case SDL_EVENT_GAMEPAD_BUTTON_DOWN: {
|
||||
{
|
||||
if (event->gbutton.button == SDL_GAMEPAD_BUTTON_SOUTH) {
|
||||
if (InputManager()) {
|
||||
InputManager()->QueueEvent(c_notificationKeyPress, SDLK_SPACE, 0, 0, SDLK_SPACE);
|
||||
}
|
||||
switch (event->gbutton.button) {
|
||||
case SDL_GAMEPAD_BUTTON_DPAD_UP:
|
||||
g_dpadUp = true;
|
||||
break;
|
||||
case SDL_GAMEPAD_BUTTON_DPAD_DOWN:
|
||||
g_dpadDown = true;
|
||||
break;
|
||||
case SDL_GAMEPAD_BUTTON_DPAD_LEFT:
|
||||
g_dpadLeft = true;
|
||||
break;
|
||||
case SDL_GAMEPAD_BUTTON_DPAD_RIGHT:
|
||||
g_dpadRight = true;
|
||||
break;
|
||||
case SDL_GAMEPAD_BUTTON_EAST:
|
||||
g_mousedown = TRUE;
|
||||
if (InputManager()) {
|
||||
InputManager()->QueueEvent(
|
||||
c_notificationButtonDown,
|
||||
LegoEventNotificationParam::c_lButtonState,
|
||||
g_lastMouseX,
|
||||
g_lastMouseY,
|
||||
0
|
||||
);
|
||||
}
|
||||
if (event->gbutton.button == SDL_GAMEPAD_BUTTON_START) {
|
||||
if (InputManager()) {
|
||||
InputManager()->QueueEvent(c_notificationKeyPress, SDLK_ESCAPE, 0, 0, SDLK_ESCAPE);
|
||||
}
|
||||
break;
|
||||
|
||||
case SDL_GAMEPAD_BUTTON_SOUTH:
|
||||
if (InputManager()) {
|
||||
InputManager()->QueueEvent(c_notificationKeyPress, SDLK_SPACE, 0, 0, SDLK_SPACE);
|
||||
}
|
||||
break;
|
||||
|
||||
case SDL_GAMEPAD_BUTTON_START:
|
||||
if (InputManager()) {
|
||||
InputManager()->QueueEvent(c_notificationKeyPress, SDLK_ESCAPE, 0, 0, SDLK_ESCAPE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case SDL_EVENT_GAMEPAD_BUTTON_UP: {
|
||||
switch (event->gbutton.button) {
|
||||
case SDL_GAMEPAD_BUTTON_DPAD_UP:
|
||||
g_dpadUp = false;
|
||||
break;
|
||||
case SDL_GAMEPAD_BUTTON_DPAD_DOWN:
|
||||
g_dpadDown = false;
|
||||
break;
|
||||
case SDL_GAMEPAD_BUTTON_DPAD_LEFT:
|
||||
g_dpadLeft = false;
|
||||
break;
|
||||
case SDL_GAMEPAD_BUTTON_DPAD_RIGHT:
|
||||
g_dpadRight = false;
|
||||
break;
|
||||
case SDL_GAMEPAD_BUTTON_EAST:
|
||||
g_mousedown = FALSE;
|
||||
if (InputManager()) {
|
||||
InputManager()->QueueEvent(
|
||||
c_notificationButtonUp,
|
||||
LegoEventNotificationParam::c_lButtonState,
|
||||
g_lastMouseX,
|
||||
g_lastMouseY,
|
||||
0
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1278,11 +1339,31 @@ IDirect3DRMMiniwinDevice* GetD3DRMMiniwinDevice()
|
||||
|
||||
void IsleApp::MoveVirtualMouseViaJoystick()
|
||||
{
|
||||
if (g_lastJoystickMouseX != 0 || g_lastJoystickMouseY != 0) {
|
||||
float dpadX = 0.0f;
|
||||
float dpadY = 0.0f;
|
||||
|
||||
if (g_dpadLeft) {
|
||||
dpadX -= m_cursorSensitivity;
|
||||
}
|
||||
if (g_dpadRight) {
|
||||
dpadX += m_cursorSensitivity;
|
||||
}
|
||||
if (g_dpadUp) {
|
||||
dpadY -= m_cursorSensitivity;
|
||||
}
|
||||
if (g_dpadDown) {
|
||||
dpadY += m_cursorSensitivity;
|
||||
}
|
||||
|
||||
// Use joystick axis if non-zero, else fall back to dpad
|
||||
float moveX = (g_lastJoystickMouseX != 0) ? g_lastJoystickMouseX : dpadX;
|
||||
float moveY = (g_lastJoystickMouseY != 0) ? g_lastJoystickMouseY : dpadY;
|
||||
|
||||
if (moveX != 0 || moveY != 0) {
|
||||
g_mousemoved = TRUE;
|
||||
|
||||
g_lastMouseX = SDL_clamp(g_lastMouseX + g_lastJoystickMouseX, 0, 640);
|
||||
g_lastMouseY = SDL_clamp(g_lastMouseY + g_lastJoystickMouseY, 0, 480);
|
||||
g_lastMouseX = SDL_clamp(g_lastMouseX + moveX, 0, 640);
|
||||
g_lastMouseY = SDL_clamp(g_lastMouseY + moveY, 0, 480);
|
||||
|
||||
if (InputManager()) {
|
||||
InputManager()->QueueEvent(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user