rewrite of input handling
This commit is contained in:
@@ -128,6 +128,9 @@ void Actor::ScaleTo( LPRECT pRect, StretchType st )
|
|||||||
float rect_width = RECTWIDTH(*pRect);
|
float rect_width = RECTWIDTH(*pRect);
|
||||||
float rect_height = RECTHEIGHT(*pRect);
|
float rect_height = RECTHEIGHT(*pRect);
|
||||||
|
|
||||||
|
if( rect_width < 0 ) SetRotationY( D3DX_PI );
|
||||||
|
if( rect_height < 0 ) SetRotationX( D3DX_PI );
|
||||||
|
|
||||||
// center of the rectangle
|
// center of the rectangle
|
||||||
float rect_cx = pRect->left + rect_width/2;
|
float rect_cx = pRect->left + rect_width/2;
|
||||||
float rect_cy = pRect->top + rect_height/2;
|
float rect_cy = pRect->top + rect_height/2;
|
||||||
@@ -136,9 +139,6 @@ void Actor::ScaleTo( LPRECT pRect, StretchType st )
|
|||||||
float fNewZoomX = (float)fabs(rect_width / m_size.x);
|
float fNewZoomX = (float)fabs(rect_width / m_size.x);
|
||||||
float fNewZoomY = (float)fabs(rect_height / m_size.y);
|
float fNewZoomY = (float)fabs(rect_height / m_size.y);
|
||||||
|
|
||||||
if( rect_width < 0 ) SetRotationY( D3DX_PI );
|
|
||||||
if( rect_height < 0 ) SetRotationX( D3DX_PI );
|
|
||||||
|
|
||||||
float fNewZoom;
|
float fNewZoom;
|
||||||
switch( st )
|
switch( st )
|
||||||
{
|
{
|
||||||
@@ -161,6 +161,9 @@ void Actor::StretchTo( LPRECT pRect )
|
|||||||
int rect_width = RECTWIDTH(*pRect);
|
int rect_width = RECTWIDTH(*pRect);
|
||||||
int rect_height = RECTHEIGHT(*pRect);
|
int rect_height = RECTHEIGHT(*pRect);
|
||||||
|
|
||||||
|
if( rect_width < 0 ) SetRotationY( D3DX_PI );
|
||||||
|
if( rect_height < 0 ) SetRotationX( D3DX_PI );
|
||||||
|
|
||||||
// center of the rectangle
|
// center of the rectangle
|
||||||
int rect_cx = pRect->left + rect_width/2;
|
int rect_cx = pRect->left + rect_width/2;
|
||||||
int rect_cy = pRect->top + rect_height/2;
|
int rect_cy = pRect->top + rect_height/2;
|
||||||
|
|||||||
+54
-96
@@ -26,111 +26,50 @@
|
|||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
|
|
||||||
|
|
||||||
LPRageInput INPUT = NULL;
|
LPRageInput INPUT = NULL; // globally accessable input device
|
||||||
|
|
||||||
|
|
||||||
BOOL DeviceInput::LookupChar( TCHAR &char_out ) const
|
|
||||||
{
|
|
||||||
switch( button )
|
|
||||||
{
|
|
||||||
case DIK_1: char_out = '1'; break;
|
|
||||||
case DIK_2: char_out = '2'; break;
|
|
||||||
case DIK_3: char_out = '3'; break;
|
|
||||||
case DIK_4: char_out = '4'; break;
|
|
||||||
case DIK_5: char_out = '5'; break;
|
|
||||||
case DIK_6: char_out = '6'; break;
|
|
||||||
case DIK_7: char_out = '7'; break;
|
|
||||||
case DIK_8: char_out = '8'; break;
|
|
||||||
case DIK_9: char_out = '9'; break;
|
|
||||||
case DIK_0: char_out = '0'; break;
|
|
||||||
case DIK_MINUS: char_out = '-'; break;
|
|
||||||
case DIK_EQUALS: char_out = '='; break;
|
|
||||||
case DIK_Q: char_out = 'Q'; break;
|
|
||||||
case DIK_W: char_out = 'W'; break;
|
|
||||||
case DIK_E: char_out = 'E'; break;
|
|
||||||
case DIK_R: char_out = 'R'; break;
|
|
||||||
case DIK_T: char_out = 'T'; break;
|
|
||||||
case DIK_Y: char_out = 'Y'; break;
|
|
||||||
case DIK_U: char_out = 'U'; break;
|
|
||||||
case DIK_I: char_out = 'I'; break;
|
|
||||||
case DIK_O: char_out = 'O'; break;
|
|
||||||
case DIK_P: char_out = 'P'; break;
|
|
||||||
case DIK_LBRACKET: char_out = '['; break;
|
|
||||||
case DIK_RBRACKET: char_out = ']'; break;
|
|
||||||
case DIK_A: char_out = 'A'; break;
|
|
||||||
case DIK_S: char_out = 'S'; break;
|
|
||||||
case DIK_D: char_out = 'D'; break;
|
|
||||||
case DIK_F: char_out = 'F'; break;
|
|
||||||
case DIK_G: char_out = 'G'; break;
|
|
||||||
case DIK_H: char_out = 'H'; break;
|
|
||||||
case DIK_J: char_out = 'J'; break;
|
|
||||||
case DIK_K: char_out = 'K'; break;
|
|
||||||
case DIK_L: char_out = 'L'; break;
|
|
||||||
case DIK_SEMICOLON: char_out = ';'; break;
|
|
||||||
case DIK_APOSTROPHE:char_out = '\'';break;
|
|
||||||
case DIK_GRAVE: char_out = '`'; break;
|
|
||||||
case DIK_BACKSLASH: char_out = '\\';break;
|
|
||||||
case DIK_Z: char_out = 'Z'; break;
|
|
||||||
case DIK_X: char_out = 'X'; break;
|
|
||||||
case DIK_C: char_out = 'C'; break;
|
|
||||||
case DIK_V: char_out = 'V'; break;
|
|
||||||
case DIK_B: char_out = 'B'; break;
|
|
||||||
case DIK_N: char_out = 'N'; break;
|
|
||||||
case DIK_M: char_out = 'M'; break;
|
|
||||||
case DIK_COMMA: char_out = ','; break;
|
|
||||||
case DIK_PERIOD: char_out = '.'; break;
|
|
||||||
case DIK_SLASH: char_out = '/'; break;
|
|
||||||
case DIK_MULTIPLY: char_out = '*'; break;
|
|
||||||
case DIK_SPACE: char_out = ' '; break;
|
|
||||||
case DIK_NUMPAD7: char_out = '7'; break;
|
|
||||||
case DIK_NUMPAD8: char_out = '8'; break;
|
|
||||||
case DIK_NUMPAD9: char_out = '9'; break;
|
|
||||||
case DIK_SUBTRACT: char_out = '-'; break;
|
|
||||||
case DIK_NUMPAD4: char_out = '4'; break;
|
|
||||||
case DIK_NUMPAD5: char_out = '5'; break;
|
|
||||||
case DIK_NUMPAD6: char_out = '6'; break;
|
|
||||||
case DIK_ADD: char_out = '+'; break;
|
|
||||||
case DIK_NUMPAD1: char_out = '1'; break;
|
|
||||||
case DIK_NUMPAD2: char_out = '2'; break;
|
|
||||||
case DIK_NUMPAD3: char_out = '3'; break;
|
|
||||||
case DIK_NUMPAD0: char_out = '0'; break;
|
|
||||||
case DIK_DECIMAL: char_out = '.'; break;
|
|
||||||
|
|
||||||
default: return FALSE; // This key doesn't correspond to a character.
|
CString DeviceInput::GetDescription()
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
CString DeviceInput::GetDescription() const
|
|
||||||
{
|
{
|
||||||
CString sReturn;
|
CString sReturn;
|
||||||
|
|
||||||
switch( device )
|
switch( device )
|
||||||
{
|
{
|
||||||
case DEVICE_NONE:
|
case DEVICE_NONE: // blank
|
||||||
sReturn = "None";
|
ASSERT( false ); // called GetDescription on a blank DeviceInput!
|
||||||
break;
|
break;
|
||||||
case DEVICE_JOYSTICK: // joystick
|
|
||||||
sReturn.Format( "Joystick%d ", device_no );
|
case DEVICE_JOYSTICK1: // joystick
|
||||||
|
case DEVICE_JOYSTICK2:
|
||||||
|
case DEVICE_JOYSTICK3:
|
||||||
|
case DEVICE_JOYSTICK4:
|
||||||
|
sReturn = ssprintf("Joystick %d: ", device - DEVICE_JOYSTICK1 + 1 );
|
||||||
|
|
||||||
switch( button )
|
switch( button )
|
||||||
{
|
{
|
||||||
case JOY_LEFT: sReturn += "Left"; break;
|
case JOY_LEFT: sReturn += "Left"; break;
|
||||||
case JOY_RIGHT: sReturn += "Right"; break;
|
case JOY_RIGHT: sReturn += "Right"; break;
|
||||||
case JOY_UP: sReturn += "Up"; break;
|
case JOY_UP: sReturn += "Up"; break;
|
||||||
case JOY_DOWN: sReturn += "Down"; break;
|
case JOY_DOWN: sReturn += "Down"; break;
|
||||||
default:
|
case JOY_1: sReturn += "1"; break;
|
||||||
{
|
case JOY_2: sReturn += "2"; break;
|
||||||
CString sButtonString;
|
case JOY_3: sReturn += "3"; break;
|
||||||
sButtonString.Format( "Button %d", button );
|
case JOY_4: sReturn += "4"; break;
|
||||||
sReturn += sButtonString;
|
case JOY_5: sReturn += "5"; break;
|
||||||
|
case JOY_6: sReturn += "6"; break;
|
||||||
|
case JOY_7: sReturn += "7"; break;
|
||||||
|
case JOY_8: sReturn += "8"; break;
|
||||||
|
case JOY_9: sReturn += "9"; break;
|
||||||
|
case JOY_10: sReturn += "10"; break;
|
||||||
|
case JOY_11: sReturn += "11"; break;
|
||||||
|
case JOY_12: sReturn += "12"; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
break;
|
case DEVICE_KEYBOARD: // keyboard
|
||||||
case DEVICE_KEYBOARD:
|
sReturn = "Keyboard: ";
|
||||||
sReturn = "Keyboard ";
|
|
||||||
|
|
||||||
switch( button )
|
switch( button )
|
||||||
{
|
{
|
||||||
@@ -238,13 +177,32 @@ CString DeviceInput::GetDescription() const
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
sReturn = "Invalid Device";
|
ASSERT( false ); // what device is this?
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return sReturn;
|
return sReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CString DeviceInput::toString()
|
||||||
|
{
|
||||||
|
return ssprintf("%d-%d", device, button );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DeviceInput::fromString( CString s )
|
||||||
|
{
|
||||||
|
CStringArray a;
|
||||||
|
split( s, "-", a);
|
||||||
|
|
||||||
|
if( a.GetSize() != 2 ) {
|
||||||
|
device = DEVICE_NONE;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
device = (InputDevice)atoi( a[0] );
|
||||||
|
button = atoi( a[1] );
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -536,7 +494,7 @@ HRESULT RageInput::GetDeviceInputs( DeviceInputArray &listDeviceInputs )
|
|||||||
{
|
{
|
||||||
// check if key is depressed this update and was not depressed last update
|
// check if key is depressed this update and was not depressed last update
|
||||||
if( IS_PRESSED( m_keys[k] ) && !IS_PRESSED( m_oldKeys[k] ) )
|
if( IS_PRESSED( m_keys[k] ) && !IS_PRESSED( m_oldKeys[k] ) )
|
||||||
listDeviceInputs.Add( DeviceInput( DEVICE_KEYBOARD, 1, k, FALSE ) );
|
listDeviceInputs.Add( DeviceInput(DEVICE_KEYBOARD, k) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -618,25 +576,25 @@ HRESULT RageInput::GetDeviceInputs( DeviceInputArray &listDeviceInputs )
|
|||||||
// check if key is depressed this update and was not depressed last update
|
// check if key is depressed this update and was not depressed last update
|
||||||
if( IS_LEFT( m_joyState[i].lX ) &&
|
if( IS_LEFT( m_joyState[i].lX ) &&
|
||||||
!IS_LEFT( m_oldJoyState[i].lX ) )
|
!IS_LEFT( m_oldJoyState[i].lX ) )
|
||||||
listDeviceInputs.Add( DeviceInput( DEVICE_JOYSTICK, i+1, JOY_LEFT, FALSE ) );
|
listDeviceInputs.Add( DeviceInput(InputDevice(DEVICE_JOYSTICK1+i), JOY_LEFT) );
|
||||||
|
|
||||||
if( IS_RIGHT( m_joyState[i].lX ) &&
|
if( IS_RIGHT( m_joyState[i].lX ) &&
|
||||||
!IS_RIGHT( m_oldJoyState[i].lX ) )
|
!IS_RIGHT( m_oldJoyState[i].lX ) )
|
||||||
listDeviceInputs.Add( DeviceInput( DEVICE_JOYSTICK, i+1, JOY_RIGHT, FALSE ) );
|
listDeviceInputs.Add( DeviceInput(InputDevice(DEVICE_JOYSTICK1+i), JOY_RIGHT) );
|
||||||
|
|
||||||
if( IS_UP( m_joyState[i].lY ) &&
|
if( IS_UP( m_joyState[i].lY ) &&
|
||||||
!IS_UP( m_oldJoyState[i].lY ) )
|
!IS_UP( m_oldJoyState[i].lY ) )
|
||||||
listDeviceInputs.Add( DeviceInput( DEVICE_JOYSTICK, i+1, JOY_UP, FALSE ) );
|
listDeviceInputs.Add( DeviceInput(InputDevice(DEVICE_JOYSTICK1+i), JOY_UP) );
|
||||||
|
|
||||||
if( IS_DOWN( m_joyState[i].lY ) &&
|
if( IS_DOWN( m_joyState[i].lY ) &&
|
||||||
!IS_DOWN( m_oldJoyState[i].lY ) )
|
!IS_DOWN( m_oldJoyState[i].lY ) )
|
||||||
listDeviceInputs.Add( DeviceInput( DEVICE_JOYSTICK, i+1, JOY_DOWN, FALSE ) );
|
listDeviceInputs.Add( DeviceInput(InputDevice(DEVICE_JOYSTICK1+i), JOY_DOWN) );
|
||||||
|
|
||||||
|
|
||||||
for( BYTE b=0; b<10; b++ )
|
for( BYTE b=0; b<10; b++ )
|
||||||
{
|
{
|
||||||
if( IS_PRESSED(m_joyState[i].rgbButtons[b]) && !IS_PRESSED(m_oldJoyState[i].rgbButtons[b]) )
|
if( IS_PRESSED(m_joyState[i].rgbButtons[b]) && !IS_PRESSED(m_oldJoyState[i].rgbButtons[b]) )
|
||||||
listDeviceInputs.Add( DeviceInput( DEVICE_JOYSTICK, i+1, b+1, FALSE ) );
|
listDeviceInputs.Add( DeviceInput( InputDevice(DEVICE_JOYSTICK1+i), JOY_1+b ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+40
-38
@@ -20,56 +20,58 @@
|
|||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
|
|
||||||
|
|
||||||
|
const int NUM_KEYBOARD_BUTTONS = 256;
|
||||||
const int NUM_JOYSTICKS = 4;
|
const int NUM_JOYSTICKS = 4;
|
||||||
|
|
||||||
|
enum InputDevice {
|
||||||
|
DEVICE_KEYBOARD = 0,
|
||||||
|
DEVICE_JOYSTICK1,
|
||||||
|
DEVICE_JOYSTICK2,
|
||||||
|
DEVICE_JOYSTICK3,
|
||||||
|
DEVICE_JOYSTICK4,
|
||||||
|
NUM_INPUT_DEVICES, // leave this at the end
|
||||||
|
DEVICE_NONE // means this is NULL
|
||||||
|
};
|
||||||
|
|
||||||
// button byte codes for directional pad
|
// button byte codes for directional pad
|
||||||
#define JOY_LEFT 101
|
enum JoystickButton {
|
||||||
#define JOY_RIGHT 102
|
JOY_LEFT = 0,
|
||||||
#define JOY_UP 103
|
JOY_RIGHT,
|
||||||
#define JOY_DOWN 104
|
JOY_UP,
|
||||||
|
JOY_DOWN,
|
||||||
|
JOY_1,
|
||||||
|
JOY_2,
|
||||||
|
JOY_3,
|
||||||
|
JOY_4,
|
||||||
|
JOY_5,
|
||||||
|
JOY_6,
|
||||||
|
JOY_7,
|
||||||
|
JOY_8,
|
||||||
|
JOY_9,
|
||||||
|
JOY_10,
|
||||||
|
JOY_11,
|
||||||
|
JOY_12,
|
||||||
|
NUM_JOYSTICK_BUTTONS // leave this at the end
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define DEVICE_NONE 0
|
struct DeviceInput
|
||||||
#define DEVICE_KEYBOARD 1
|
|
||||||
#define DEVICE_JOYSTICK 2
|
|
||||||
|
|
||||||
|
|
||||||
class DeviceInput
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DeviceInput() { device = device_no = button = just_pressed = 0; };
|
InputDevice device;
|
||||||
DeviceInput( BYTE device,
|
int button;
|
||||||
BYTE device_no,
|
|
||||||
BYTE button,
|
|
||||||
BYTE just_pressed )
|
|
||||||
{
|
|
||||||
this->device = device;
|
|
||||||
this->device_no = device_no;
|
|
||||||
this->button = button;
|
|
||||||
this->just_pressed = just_pressed;
|
|
||||||
};
|
|
||||||
|
|
||||||
CString GetEncoding() const { return ssprintf("%u-%u-%u", device, device_no, button); };
|
DeviceInput() { device=DEVICE_NONE; };
|
||||||
void FillFromEncoding( CString sEncoding )
|
DeviceInput( InputDevice d, int b ) { device=d; button=b; };
|
||||||
{
|
|
||||||
CStringArray a;
|
|
||||||
split( sEncoding, "-", a);
|
|
||||||
ASSERT( a.GetSize() == 3 );
|
|
||||||
this->device = atoi( a[0] );
|
|
||||||
this->device_no = atoi( a[1] );
|
|
||||||
this->button = atoi( a[2] );
|
|
||||||
};
|
|
||||||
|
|
||||||
BOOL LookupChar( TCHAR &char_out ) const;
|
CString GetDescription();
|
||||||
CString GetDescription() const;
|
|
||||||
|
CString toString();
|
||||||
|
bool fromString( CString s );
|
||||||
|
|
||||||
bool IsBlank() const { return device == DEVICE_NONE; };
|
bool IsBlank() const { return device == DEVICE_NONE; };
|
||||||
|
void MakeBlank() { device = DEVICE_NONE; };
|
||||||
BYTE device;
|
|
||||||
BYTE device_no;
|
|
||||||
BYTE button;
|
|
||||||
BYTE just_pressed;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user