handle analog sticks; remove xbox resizing stuff that doesn't belong in input drivers
This commit is contained in:
@@ -265,46 +265,54 @@ void InputHandler_DInput::UpdatePolled(DIDevice &device, const RageTimer &tm)
|
|||||||
{
|
{
|
||||||
case in.BUTTON:
|
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]);
|
ButtonPressed(di, !!state.rgbButtons[in.ofs - DIJOFS_BUTTON0]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case in.AXIS:
|
case in.AXIS:
|
||||||
{
|
{
|
||||||
|
JoystickButton neg = NUM_JOYSTICK_BUTTONS, pos = NUM_JOYSTICK_BUTTONS;
|
||||||
|
int val = 0;
|
||||||
switch(in.ofs)
|
switch(in.ofs)
|
||||||
{
|
{
|
||||||
case DIJOFS_X: ButtonPressed(DeviceInput(dev, JOY_LEFT, tm), state.lX < -50);
|
case DIJOFS_X: neg = JOY_LEFT; pos = JOY_RIGHT;
|
||||||
ButtonPressed(DeviceInput(dev, JOY_RIGHT, tm), state.lX > 50);
|
val = state.lX;
|
||||||
break;
|
break;
|
||||||
case DIJOFS_Y: ButtonPressed(DeviceInput(dev, JOY_UP, tm), state.lY < -50);
|
case DIJOFS_Y: neg = JOY_UP; pos = JOY_DOWN;
|
||||||
ButtonPressed(DeviceInput(dev, JOY_DOWN, tm), state.lY > 50);
|
val = state.lY;
|
||||||
break;
|
break;
|
||||||
case DIJOFS_Z: ButtonPressed(DeviceInput(dev, JOY_Z_UP, tm), state.lZ < -50);
|
case DIJOFS_Z: neg = JOY_Z_UP; pos = JOY_Z_DOWN;
|
||||||
ButtonPressed(DeviceInput(dev, JOY_Z_DOWN, tm), state.lZ > 50);
|
val = state.lZ;
|
||||||
break;
|
break;
|
||||||
case DIJOFS_RX: ButtonPressed(DeviceInput(dev, JOY_ROT_LEFT, tm), state.lRx < -50);
|
case DIJOFS_RX: neg = JOY_ROT_LEFT; pos = JOY_ROT_RIGHT;
|
||||||
ButtonPressed(DeviceInput(dev, JOY_ROT_RIGHT, tm), state.lRx > 50);
|
val = state.lRx;
|
||||||
break;
|
break;
|
||||||
case DIJOFS_RY: ButtonPressed(DeviceInput(dev, JOY_ROT_UP, tm), state.lRy < -50);
|
case DIJOFS_RY: neg = JOY_ROT_UP; pos = JOY_ROT_DOWN;
|
||||||
ButtonPressed(DeviceInput(dev, JOY_ROT_DOWN, tm), state.lRy > 50);
|
val = state.lRy;
|
||||||
break;
|
break;
|
||||||
case DIJOFS_RZ: ButtonPressed(DeviceInput(dev, JOY_ROT_Z_UP, tm), state.lRz < -50);
|
case DIJOFS_RZ: neg = JOY_ROT_Z_UP; pos = JOY_ROT_Z_DOWN;
|
||||||
ButtonPressed(DeviceInput(dev, JOY_ROT_Z_DOWN, tm), state.lRz > 50);
|
val = state.lRz;
|
||||||
break;
|
break;
|
||||||
case DIJOFS_SLIDER(0):
|
case DIJOFS_SLIDER(0):
|
||||||
ButtonPressed(DeviceInput(dev, JOY_AUX_1, tm), state.rglSlider[0] < -50);
|
neg = JOY_AUX_1; pos = JOY_AUX_2;
|
||||||
ButtonPressed(DeviceInput(dev, JOY_AUX_2, tm), state.rglSlider[0] > 50);
|
val = state.rglSlider[0];
|
||||||
break;
|
break;
|
||||||
case DIJOFS_SLIDER(1):
|
case DIJOFS_SLIDER(1):
|
||||||
ButtonPressed(DeviceInput(dev, JOY_AUX_3, tm), state.rglSlider[1] < -50);
|
neg = JOY_AUX_3; pos = JOY_AUX_4;
|
||||||
ButtonPressed(DeviceInput(dev, JOY_AUX_4, tm), state.rglSlider[1] > 50);
|
val = state.rglSlider[1];
|
||||||
break;
|
break;
|
||||||
default: LOG->MapLog("unknown input",
|
default: LOG->MapLog("unknown input",
|
||||||
"Controller '%s' is returning an unknown joystick offset, %i",
|
"Controller '%s' is returning an unknown joystick offset, %i",
|
||||||
device.JoystickInst.tszProductName, in.ofs );
|
device.JoystickInst.tszProductName, in.ofs );
|
||||||
continue;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
@@ -313,10 +321,10 @@ void InputHandler_DInput::UpdatePolled(DIDevice &device, const RageTimer &tm)
|
|||||||
if( in.num == 0 )
|
if( in.num == 0 )
|
||||||
{
|
{
|
||||||
const int pos = TranslatePOV(state.rgdwPOV[in.ofs - DIJOFS_POV(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_UP, -1, tm), !!(pos & HAT_UP_MASK));
|
||||||
ButtonPressed(DeviceInput(dev, JOY_HAT_DOWN, tm), !!(pos & HAT_DOWN_MASK));
|
ButtonPressed(DeviceInput(dev, JOY_HAT_DOWN, -1, tm), !!(pos & HAT_DOWN_MASK));
|
||||||
ButtonPressed(DeviceInput(dev, JOY_HAT_LEFT, tm), !!(pos & HAT_LEFT_MASK));
|
ButtonPressed(DeviceInput(dev, JOY_HAT_LEFT, -1, tm), !!(pos & HAT_LEFT_MASK));
|
||||||
ButtonPressed(DeviceInput(dev, JOY_HAT_RIGHT, tm), !!(pos & HAT_RIGHT_MASK));
|
ButtonPressed(DeviceInput(dev, JOY_HAT_RIGHT, -1, tm), !!(pos & HAT_RIGHT_MASK));
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -359,11 +367,11 @@ void InputHandler_DInput::UpdateBuffered(DIDevice &device, const RageTimer &tm)
|
|||||||
switch(in.type)
|
switch(in.type)
|
||||||
{
|
{
|
||||||
case in.KEY:
|
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;
|
break;
|
||||||
|
|
||||||
case in.BUTTON:
|
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;
|
break;
|
||||||
|
|
||||||
case in.AXIS:
|
case in.AXIS:
|
||||||
@@ -385,17 +393,18 @@ void InputHandler_DInput::UpdateBuffered(DIDevice &device, const RageTimer &tm)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ButtonPressed(DeviceInput(dev, up, tm), int(evtbuf[i].dwData) < -50);
|
float l = SCALE( int(evtbuf[i].dwData), 0.0f, 100.0f, 0.0f, 1.0f );
|
||||||
ButtonPressed(DeviceInput(dev, down, tm), int(evtbuf[i].dwData) > 50);
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case in.HAT:
|
case in.HAT:
|
||||||
{
|
{
|
||||||
const int pos = TranslatePOV(evtbuf[i].dwData);
|
const int pos = TranslatePOV(evtbuf[i].dwData);
|
||||||
ButtonPressed(DeviceInput(dev, JOY_HAT_UP, tm), !!(pos & HAT_UP_MASK));
|
ButtonPressed(DeviceInput(dev, JOY_HAT_UP, -1, tm), !!(pos & HAT_UP_MASK));
|
||||||
ButtonPressed(DeviceInput(dev, JOY_HAT_DOWN, tm), !!(pos & HAT_DOWN_MASK));
|
ButtonPressed(DeviceInput(dev, JOY_HAT_DOWN, -1, tm), !!(pos & HAT_DOWN_MASK));
|
||||||
ButtonPressed(DeviceInput(dev, JOY_HAT_LEFT, tm), !!(pos & HAT_LEFT_MASK));
|
ButtonPressed(DeviceInput(dev, JOY_HAT_LEFT, -1, tm), !!(pos & HAT_LEFT_MASK));
|
||||||
ButtonPressed(DeviceInput(dev, JOY_HAT_RIGHT, tm), !!(pos & HAT_RIGHT_MASK));
|
ButtonPressed(DeviceInput(dev, JOY_HAT_RIGHT, -1, tm), !!(pos & HAT_RIGHT_MASK));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -191,14 +191,6 @@ InputHandler_SDL::~InputHandler_SDL()
|
|||||||
|
|
||||||
void InputHandler_SDL::Update(float fDeltaTime)
|
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;
|
SDL_Event event;
|
||||||
while(SDL_GetEvent(event, SDL_EventMask))
|
while(SDL_GetEvent(event, SDL_EventMask))
|
||||||
{
|
{
|
||||||
@@ -231,43 +223,12 @@ void InputHandler_SDL::Update(float fDeltaTime)
|
|||||||
|
|
||||||
case SDL_JOYAXISMOTION:
|
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);
|
InputDevice i = InputDevice(DEVICE_JOY1 + event.jaxis.which);
|
||||||
JoystickButton neg = (JoystickButton)(JOY_LEFT+2*event.jaxis.axis);
|
JoystickButton neg = (JoystickButton)(JOY_LEFT+2*event.jaxis.axis);
|
||||||
JoystickButton pos = (JoystickButton)(JOY_RIGHT+2*event.jaxis.axis);
|
JoystickButton pos = (JoystickButton)(JOY_RIGHT+2*event.jaxis.axis);
|
||||||
ButtonPressed(DeviceInput(i, neg), event.jaxis.value < -16000);
|
float l = SCALE( event.jaxis.value, 0.0f, 32768.0f, 0.0f, 1.0f );
|
||||||
ButtonPressed(DeviceInput(i, pos), event.jaxis.value > +16000);
|
ButtonPressed(DeviceInput(i, neg,max(-l,0),RageZeroTimer), event.jaxis.value < -16000);
|
||||||
#endif
|
ButtonPressed(DeviceInput(i, pos,max(+l,0),RageZeroTimer), event.jaxis.value > +16000);
|
||||||
continue;
|
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();
|
InputHandler::UpdateTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user