From b6aace4a895c06488c728d4909796246eef0c8d9 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Thu, 9 Sep 2004 22:12:10 +0000 Subject: [PATCH] handle analog sticks; remove xbox resizing stuff that doesn't belong in input drivers --- .../InputHandler/InputHandler_DirectInput.cpp | 67 +++++++++-------- .../arch/InputHandler/InputHandler_SDL.cpp | 71 +------------------ 2 files changed, 41 insertions(+), 97 deletions(-) diff --git a/stepmania/src/arch/InputHandler/InputHandler_DirectInput.cpp b/stepmania/src/arch/InputHandler/InputHandler_DirectInput.cpp index d93e9ccaaa..94007b2c65 100644 --- a/stepmania/src/arch/InputHandler/InputHandler_DirectInput.cpp +++ b/stepmania/src/arch/InputHandler/InputHandler_DirectInput.cpp @@ -265,46 +265,54 @@ void InputHandler_DInput::UpdatePolled(DIDevice &device, const RageTimer &tm) { case in.BUTTON: { - DeviceInput di(dev, JOY_1 + in.num, tm); + DeviceInput di(dev, JOY_1 + in.num, -1, tm); ButtonPressed(di, !!state.rgbButtons[in.ofs - DIJOFS_BUTTON0]); break; } case in.AXIS: { + JoystickButton neg = NUM_JOYSTICK_BUTTONS, pos = NUM_JOYSTICK_BUTTONS; + int val = 0; switch(in.ofs) { - case DIJOFS_X: ButtonPressed(DeviceInput(dev, JOY_LEFT, tm), state.lX < -50); - ButtonPressed(DeviceInput(dev, JOY_RIGHT, tm), state.lX > 50); + case DIJOFS_X: neg = JOY_LEFT; pos = JOY_RIGHT; + val = state.lX; break; - case DIJOFS_Y: ButtonPressed(DeviceInput(dev, JOY_UP, tm), state.lY < -50); - ButtonPressed(DeviceInput(dev, JOY_DOWN, tm), state.lY > 50); + case DIJOFS_Y: neg = JOY_UP; pos = JOY_DOWN; + val = state.lY; break; - case DIJOFS_Z: ButtonPressed(DeviceInput(dev, JOY_Z_UP, tm), state.lZ < -50); - ButtonPressed(DeviceInput(dev, JOY_Z_DOWN, tm), state.lZ > 50); + case DIJOFS_Z: neg = JOY_Z_UP; pos = JOY_Z_DOWN; + val = state.lZ; break; - case DIJOFS_RX: ButtonPressed(DeviceInput(dev, JOY_ROT_LEFT, tm), state.lRx < -50); - ButtonPressed(DeviceInput(dev, JOY_ROT_RIGHT, tm), state.lRx > 50); + case DIJOFS_RX: neg = JOY_ROT_LEFT; pos = JOY_ROT_RIGHT; + val = state.lRx; break; - case DIJOFS_RY: ButtonPressed(DeviceInput(dev, JOY_ROT_UP, tm), state.lRy < -50); - ButtonPressed(DeviceInput(dev, JOY_ROT_DOWN, tm), state.lRy > 50); + case DIJOFS_RY: neg = JOY_ROT_UP; pos = JOY_ROT_DOWN; + val = state.lRy; break; - case DIJOFS_RZ: ButtonPressed(DeviceInput(dev, JOY_ROT_Z_UP, tm), state.lRz < -50); - ButtonPressed(DeviceInput(dev, JOY_ROT_Z_DOWN, tm), state.lRz > 50); + case DIJOFS_RZ: neg = JOY_ROT_Z_UP; pos = JOY_ROT_Z_DOWN; + val = state.lRz; break; case DIJOFS_SLIDER(0): - ButtonPressed(DeviceInput(dev, JOY_AUX_1, tm), state.rglSlider[0] < -50); - ButtonPressed(DeviceInput(dev, JOY_AUX_2, tm), state.rglSlider[0] > 50); + neg = JOY_AUX_1; pos = JOY_AUX_2; + val = state.rglSlider[0]; break; case DIJOFS_SLIDER(1): - ButtonPressed(DeviceInput(dev, JOY_AUX_3, tm), state.rglSlider[1] < -50); - ButtonPressed(DeviceInput(dev, JOY_AUX_4, tm), state.rglSlider[1] > 50); + neg = JOY_AUX_3; pos = JOY_AUX_4; + val = state.rglSlider[1]; break; default: LOG->MapLog("unknown input", "Controller '%s' is returning an unknown joystick offset, %i", device.JoystickInst.tszProductName, in.ofs ); continue; } + if( neg != NUM_JOYSTICK_BUTTONS ) + { + float l = SCALE( int(val), 0.0f, 100.0f, 0.0f, 1.0f ); + ButtonPressed(DeviceInput(dev, neg, max(-l,0), tm), val < -50); + ButtonPressed(DeviceInput(dev, pos, max(+l,0), tm), val > 50); + } break; } @@ -313,10 +321,10 @@ void InputHandler_DInput::UpdatePolled(DIDevice &device, const RageTimer &tm) if( in.num == 0 ) { const int pos = TranslatePOV(state.rgdwPOV[in.ofs - DIJOFS_POV(0)]); - ButtonPressed(DeviceInput(dev, JOY_HAT_UP, tm), !!(pos & HAT_UP_MASK)); - ButtonPressed(DeviceInput(dev, JOY_HAT_DOWN, tm), !!(pos & HAT_DOWN_MASK)); - ButtonPressed(DeviceInput(dev, JOY_HAT_LEFT, tm), !!(pos & HAT_LEFT_MASK)); - ButtonPressed(DeviceInput(dev, JOY_HAT_RIGHT, tm), !!(pos & HAT_RIGHT_MASK)); + ButtonPressed(DeviceInput(dev, JOY_HAT_UP, -1, tm), !!(pos & HAT_UP_MASK)); + ButtonPressed(DeviceInput(dev, JOY_HAT_DOWN, -1, tm), !!(pos & HAT_DOWN_MASK)); + ButtonPressed(DeviceInput(dev, JOY_HAT_LEFT, -1, tm), !!(pos & HAT_LEFT_MASK)); + ButtonPressed(DeviceInput(dev, JOY_HAT_RIGHT, -1, tm), !!(pos & HAT_RIGHT_MASK)); } break; @@ -359,11 +367,11 @@ void InputHandler_DInput::UpdateBuffered(DIDevice &device, const RageTimer &tm) switch(in.type) { case in.KEY: - ButtonPressed(DeviceInput(dev, in.num, tm), !!(evtbuf[i].dwData & 0x80)); + ButtonPressed(DeviceInput(dev, in.num, -1, tm), !!(evtbuf[i].dwData & 0x80)); break; case in.BUTTON: - ButtonPressed(DeviceInput(dev, JOY_1 + in.num, tm), !!evtbuf[i].dwData); + ButtonPressed(DeviceInput(dev, JOY_1 + in.num, -1, tm), !!evtbuf[i].dwData); break; case in.AXIS: @@ -385,17 +393,18 @@ void InputHandler_DInput::UpdateBuffered(DIDevice &device, const RageTimer &tm) continue; } - ButtonPressed(DeviceInput(dev, up, tm), int(evtbuf[i].dwData) < -50); - ButtonPressed(DeviceInput(dev, down, tm), int(evtbuf[i].dwData) > 50); + float l = SCALE( int(evtbuf[i].dwData), 0.0f, 100.0f, 0.0f, 1.0f ); + ButtonPressed(DeviceInput(dev, up, max(-l,0), tm), int(evtbuf[i].dwData) < -50); + ButtonPressed(DeviceInput(dev, down, max(+l,0), tm), int(evtbuf[i].dwData) > 50); break; } case in.HAT: { const int pos = TranslatePOV(evtbuf[i].dwData); - ButtonPressed(DeviceInput(dev, JOY_HAT_UP, tm), !!(pos & HAT_UP_MASK)); - ButtonPressed(DeviceInput(dev, JOY_HAT_DOWN, tm), !!(pos & HAT_DOWN_MASK)); - ButtonPressed(DeviceInput(dev, JOY_HAT_LEFT, tm), !!(pos & HAT_LEFT_MASK)); - ButtonPressed(DeviceInput(dev, JOY_HAT_RIGHT, tm), !!(pos & HAT_RIGHT_MASK)); + ButtonPressed(DeviceInput(dev, JOY_HAT_UP, -1, tm), !!(pos & HAT_UP_MASK)); + ButtonPressed(DeviceInput(dev, JOY_HAT_DOWN, -1, tm), !!(pos & HAT_DOWN_MASK)); + ButtonPressed(DeviceInput(dev, JOY_HAT_LEFT, -1, tm), !!(pos & HAT_LEFT_MASK)); + ButtonPressed(DeviceInput(dev, JOY_HAT_RIGHT, -1, tm), !!(pos & HAT_RIGHT_MASK)); } } } diff --git a/stepmania/src/arch/InputHandler/InputHandler_SDL.cpp b/stepmania/src/arch/InputHandler/InputHandler_SDL.cpp index 4b1bc2d0e5..3a1416b723 100644 --- a/stepmania/src/arch/InputHandler/InputHandler_SDL.cpp +++ b/stepmania/src/arch/InputHandler/InputHandler_SDL.cpp @@ -191,14 +191,6 @@ InputHandler_SDL::~InputHandler_SDL() void InputHandler_SDL::Update(float fDeltaTime) { -#ifdef _XBOX - static int lastValX1 = 0; - static int lastValY1 = 0; - static int lastValX2 = 0; - static int lastValY2 = 0; - static int resolutionChanged = 0; -#endif - SDL_Event event; while(SDL_GetEvent(event, SDL_EventMask)) { @@ -231,43 +223,12 @@ void InputHandler_SDL::Update(float fDeltaTime) case SDL_JOYAXISMOTION: { -#ifdef _XBOX - if(PREFSMAN->resizing) - { - /* XXX: If you want to adjust the screen, use the menu. Screen - * adjustment code doesn't belong in the input driver. */ - /* As far as I can tell, you can't send on the analog values - * of the joysticks, so this is probably the only place for it. - * This should limit it to the centering screen though */ - resolutionChanged = 1; - if ( abs(event.jaxis.value) > 15600 ) - { - switch ( event.jaxis.axis ) - { - case 0: lastValX1 = event.jaxis.value; break; - case 1: lastValY1 = event.jaxis.value; break; - case 2: lastValX2 = event.jaxis.value; break; - case 3: lastValY2 = event.jaxis.value; break; - } - } - else - { - switch ( event.jaxis.axis ) - { - case 0: lastValX1 = 0; break; - case 1: lastValY1 = 0; break; - case 2: lastValX2 = 0; break; - case 3: lastValY2 = 0; break; - } - } - } -#else InputDevice i = InputDevice(DEVICE_JOY1 + event.jaxis.which); JoystickButton neg = (JoystickButton)(JOY_LEFT+2*event.jaxis.axis); JoystickButton pos = (JoystickButton)(JOY_RIGHT+2*event.jaxis.axis); - ButtonPressed(DeviceInput(i, neg), event.jaxis.value < -16000); - ButtonPressed(DeviceInput(i, pos), event.jaxis.value > +16000); -#endif + float l = SCALE( event.jaxis.value, 0.0f, 32768.0f, 0.0f, 1.0f ); + ButtonPressed(DeviceInput(i, neg,max(-l,0),RageZeroTimer), event.jaxis.value < -16000); + ButtonPressed(DeviceInput(i, pos,max(+l,0),RageZeroTimer), event.jaxis.value > +16000); continue; } @@ -283,32 +244,6 @@ void InputHandler_SDL::Update(float fDeltaTime) } } -#ifdef _XBOX - - if ( resolutionChanged ) - { - if ( lastValX1 || lastValY1 || lastValX2 || lastValY2 ) - { - PREFSMAN->m_fScreenPosX += ((float)lastValX1/32767.0f); - if ( PREFSMAN->m_fScreenPosX < 0) - PREFSMAN->m_fScreenPosX = 0; - - PREFSMAN->m_fScreenPosY -= ((float)lastValY1/32767.0f); - if ( PREFSMAN->m_fScreenPosY < 0) - PREFSMAN->m_fScreenPosY = 0; - - PREFSMAN->m_fScreenWidth += ((float)lastValX2/32767.0f); - PREFSMAN->m_fScreenHeight -= ((float)lastValY2/32767.0f); - - DISPLAY->ResolutionChanged(); - } - else - { - resolutionChanged = 0; - } - } -#endif - InputHandler::UpdateTimer(); }