InputSystem: add inline helpers

This commit is contained in:
Kawe Mazidjatari 2023-12-24 03:05:29 +01:00
parent b72f02d123
commit 0067a57aa8

View File

@ -208,3 +208,138 @@ enum ButtonCode_t
KEY_XSTICK2_DOWN, // VAXIS POSITIVE
KEY_XSTICK2_UP, // VAXIS NEGATIVE
};
//-----------------------------------------------------------------------------
// Inline helpers
//-----------------------------------------------------------------------------
inline bool IsAlpha( const ButtonCode_t code )
{
return ( code >= KEY_A ) && ( code <= KEY_Z );
}
inline bool IsAlphaNumeric( const ButtonCode_t code )
{
return ( code >= KEY_0 ) && ( code <= KEY_Z );
}
inline bool IsSpace( const ButtonCode_t code )
{
return ( code == KEY_ENTER ) || ( code == KEY_TAB ) || ( code == KEY_SPACE );
}
inline bool IsKeypad( const ButtonCode_t code )
{
return ( code >= MOUSE_FIRST ) && ( code <= KEY_PAD_DECIMAL );
}
inline bool IsPunctuation( const ButtonCode_t code )
{
return ( code >= KEY_0 ) && ( code <= KEY_SPACE ) && !IsAlphaNumeric( code ) && !IsSpace( code ) && !IsKeypad( code );
}
inline bool IsKeyCode( const ButtonCode_t code )
{
return ( code >= KEY_FIRST ) && ( code <= KEY_LAST );
}
inline bool IsMouseCode( const ButtonCode_t code )
{
return ( code >= MOUSE_FIRST ) && ( code <= MOUSE_LAST );
}
inline bool IsJoystickCode( const ButtonCode_t code )
{
return ( ( code >= JOYSTICK_FIRST ) && ( code <= JOYSTICK_LAST ) );
}
inline bool IsJoystickButtonCode( const ButtonCode_t code )
{
return ( code >= JOYSTICK_FIRST_BUTTON ) && ( code <= JOYSTICK_LAST_BUTTON );
}
inline bool IsJoystickPOVCode( const ButtonCode_t code )
{
return ( code >= JOYSTICK_FIRST_POV_BUTTON ) && ( code <= JOYSTICK_LAST_POV_BUTTON );
}
inline bool IsJoystickAxisCode( const ButtonCode_t code )
{
return ( code >= JOYSTICK_FIRST_AXIS_BUTTON ) && ( code <= JOYSTICK_LAST_AXIS_BUTTON );
}
inline ButtonCode_t GetBaseButtonCode( const ButtonCode_t code )
{
if ( IsJoystickButtonCode( code ) )
{
const int offset = ( code - JOYSTICK_FIRST_BUTTON ) % JOYSTICK_MAX_BUTTON_COUNT;
return (ButtonCode_t)( JOYSTICK_FIRST_BUTTON + offset );
}
if ( IsJoystickPOVCode( code ) )
{
const int offset = ( code - JOYSTICK_FIRST_POV_BUTTON ) % JOYSTICK_POV_BUTTON_COUNT;
return (ButtonCode_t)( JOYSTICK_FIRST_POV_BUTTON + offset );
}
if ( IsJoystickAxisCode( code ) )
{
const int offset = ( code - JOYSTICK_FIRST_AXIS_BUTTON ) % JOYSTICK_AXIS_BUTTON_COUNT;
return (ButtonCode_t)( JOYSTICK_FIRST_AXIS_BUTTON + offset );
}
return code;
}
inline int GetJoystickForCode( const ButtonCode_t code )
{
if ( !IsJoystickCode( code ) )
return 0;
if ( IsJoystickButtonCode( code ) )
{
const int offset = ( code - JOYSTICK_FIRST_BUTTON ) / JOYSTICK_MAX_BUTTON_COUNT;
return offset;
}
if ( IsJoystickPOVCode( code ) )
{
const int offset = ( code - JOYSTICK_FIRST_POV_BUTTON ) / JOYSTICK_POV_BUTTON_COUNT;
return offset;
}
if ( IsJoystickAxisCode( code ) )
{
const int offset = ( code - JOYSTICK_FIRST_AXIS_BUTTON ) / JOYSTICK_AXIS_BUTTON_COUNT;
return offset;
}
return 0;
}
inline ButtonCode_t ButtonCodeToJoystickButtonCode( ButtonCode_t code, int nDesiredJoystick )
{
if ( !IsJoystickCode( code ) || nDesiredJoystick == 0 )
return code;
nDesiredJoystick = clamp( nDesiredJoystick, 0, MAX_JOYSTICKS - 1 );
code = GetBaseButtonCode( code );
// Now upsample it
if ( IsJoystickButtonCode( code ) )
{
const int nOffset = code - JOYSTICK_FIRST_BUTTON;
return JOYSTICK_BUTTON( nDesiredJoystick, nOffset );
}
if ( IsJoystickPOVCode( code ) )
{
const int nOffset = code - JOYSTICK_FIRST_POV_BUTTON;
return JOYSTICK_POV_BUTTON( nDesiredJoystick, nOffset );
}
if ( IsJoystickAxisCode( code ) )
{
const int nOffset = code - JOYSTICK_FIRST_AXIS_BUTTON;
return JOYSTICK_AXIS_BUTTON( nDesiredJoystick, nOffset );
}
return code;
}