MoveKeys.cs
namespace PixelPusher;
/// <summary>
/// WASD plus the numpad as a second stick. 4/6 strafe, 8/2 up-down, corners diagonal.
/// Arrow aliases cover Num Lock off (4/6 become left/right).
/// </summary>
public static class MoveKeys
{
public static bool Left => Input.Down( "Left" ) || AnyDown( "LEFTARROW", "KP_4", "KP_7", "KP_1", "HOME", "END" );
public static bool Right => Input.Down( "Right" ) || AnyDown( "RIGHTARROW", "KP_6", "KP_9", "KP_3", "PGUP", "PGDN" );
public static bool Forward => Input.Down( "Forward" ) || AnyDown( "UPARROW", "KP_8", "KP_7", "KP_9", "HOME", "PGUP" );
public static bool Backward => Input.Down( "Backward" ) || AnyDown( "DOWNARROW", "KP_2", "KP_1", "KP_3", "END", "PGDN" );
/// <summary>Numpad / arrows only — AnalogMove already covers WASD.</summary>
public static bool StickLeft => AnyDown( "LEFTARROW", "KP_4", "KP_7", "KP_1", "HOME", "END" );
public static bool StickRight => AnyDown( "RIGHTARROW", "KP_6", "KP_9", "KP_3", "PGUP", "PGDN" );
public static bool StickUp => AnyDown( "UPARROW", "KP_8", "KP_7", "KP_9", "HOME", "PGUP" );
public static bool StickDown => AnyDown( "DOWNARROW", "KP_2", "KP_1", "KP_3", "END", "PGDN" );
public static bool JumpHeld( bool walk3d )
{
if ( Input.Down( "Jump" ) || AnyDown( "KP_0", "KP_PLUS", "KP_ENTER", "INS" ) )
return true;
return !walk3d && AnyDown( "UPARROW", "KP_8", "KP_7", "KP_9", "HOME", "PGUP" );
}
public static bool JumpPressed( bool walk3d )
{
if ( Input.Pressed( "Jump" ) || AnyPressed( "KP_0", "KP_PLUS", "KP_ENTER", "INS" ) )
return true;
return !walk3d && AnyPressed( "UPARROW", "KP_8", "KP_7", "KP_9", "HOME", "PGUP" );
}
public static bool ZoomIn => Pressed( "KP_PLUS" );
public static bool ZoomOut => Pressed( "KP_MINUS" );
public static bool Home => Pressed( "KP_5" );
public static bool DropIn => Pressed( "KP_ENTER" );
static bool AnyDown( params string[] keys )
{
foreach ( var key in keys )
{
if ( Down( key ) )
return true;
}
return false;
}
static bool AnyPressed( params string[] keys )
{
foreach ( var key in keys )
{
if ( Pressed( key ) )
return true;
}
return false;
}
static bool Down( string key )
{
try
{
return Input.Keyboard.Down( key );
}
catch
{
return false;
}
}
static bool Pressed( string key )
{
try
{
return Input.Keyboard.Pressed( key );
}
catch
{
return false;
}
}
}