diff --git a/ex/rlt-01.pl b/ex/rlt-01.pl index 84c4d00..0741601 100644 --- a/ex/rlt-01.pl +++ b/ex/rlt-01.pl @@ -29,22 +29,22 @@ key_map => { # vim keys - KEY_H() => sub { $player_x -= 10 }, - KEY_L() => sub { $player_x += 10 }, - KEY_K() => sub { $player_y -= 10 }, - KEY_J() => sub { $player_y += 10 }, + KEY_H => sub { $player_x -= 10 }, + KEY_L => sub { $player_x += 10 }, + KEY_K => sub { $player_y -= 10 }, + KEY_J => sub { $player_y += 10 }, # wasd keys - KEY_W() => sub { $player_y -= 10 }, - KEY_S() => sub { $player_y += 10 }, - KEY_A() => sub { $player_x -= 10 }, - KEY_D() => sub { $player_x += 10 }, + KEY_W => sub { $player_y -= 10 }, + KEY_S => sub { $player_y += 10 }, + KEY_A => sub { $player_x -= 10 }, + KEY_D => sub { $player_x += 10 }, # arrow keys - KEY_UP() => sub { $player_y -= 10 }, - KEY_DOWN() => sub { $player_y += 10 }, - KEY_LEFT() => sub { $player_x -= 10 }, - KEY_RIGHT() => sub { $player_x += 10 }, + KEY_UP => sub { $player_y -= 10 }, + KEY_DOWN => sub { $player_y += 10 }, + KEY_LEFT => sub { $player_x -= 10 }, + KEY_RIGHT => sub { $player_x += 10 }, }, ); diff --git a/lib/Raylib/FFI.pm b/lib/Raylib/FFI.pm index 7c2aaf3..72715f6 100644 --- a/lib/Raylib/FFI.pm +++ b/lib/Raylib/FFI.pm @@ -9,6 +9,7 @@ use Exporter qw(import); use FFI::CheckLib qw( find_lib_or_die ); use FFI::Platypus 2.08 (); use FFI::C::StructDef (); +use FFI::C (); my $ffi = FFI::Platypus->new( api => 2, @@ -462,6 +463,122 @@ package Raylib::FFI::AutomationEventList { $ffi->type( 'record(Raylib::FFI::AutomationEventList)' => 'AutomationEventList' ); +use List::Util qw/ pairs /; +$ffi->load_custom_type('::Enum', + keyboardkey_t => map { [ $_->key, $_->value ] } pairs + KEY_NULL => 0, + KEY_APOSTROPHE => 39, + KEY_COMMA => 44, + KEY_MINUS => 45, + KEY_PERIOD => 46, + KEY_SLASH => 47, + KEY_ZERO => 48, + KEY_ONE => 49, + KEY_TWO => 50, + KEY_THREE => 51, + KEY_FOUR => 52, + KEY_FIVE => 53, + KEY_SIX => 54, + KEY_SEVEN => 55, + KEY_EIGHT => 56, + KEY_NINE => 57, + KEY_SEMICOLON => 59, + KEY_EQUAL => 61, + KEY_A => 65, + KEY_B => 66, + KEY_C => 67, + KEY_D => 68, + KEY_E => 69, + KEY_F => 70, + KEY_G => 71, + KEY_H => 72, + KEY_I => 73, + KEY_J => 74, + KEY_K => 75, + KEY_L => 76, + KEY_M => 77, + KEY_N => 78, + KEY_O => 79, + KEY_P => 80, + KEY_Q => 81, + KEY_R => 82, + KEY_S => 83, + KEY_T => 84, + KEY_U => 85, + KEY_V => 86, + KEY_W => 87, + KEY_X => 88, + KEY_Y => 89, + KEY_Z => 90, + KEY_LEFT_BRACKET => 91, + KEY_BACKSLASH => 92, + KEY_RIGHT_BRACKET => 93, + KEY_GRAVE => 96, + + KEY_SPACE => 32, + KEY_ESCAPE => 256, + KEY_ENTER => 257, + KEY_TAB => 258, + KEY_BACKSPACE => 259, + KEY_INSERT => 260, + KEY_DELETE => 261, + KEY_RIGHT => 262, + KEY_LEFT => 263, + KEY_DOWN => 264, + KEY_UP => 265, + KEY_PAGE_UP => 266, + KEY_PAGE_DOWN => 267, + KEY_HOME => 268, + KEY_END => 269, + KEY_CAPS_LOCK => 280, + KEY_SCROLL_LOCK => 281, + KEY_NUM_LOCK => 282, + KEY_PRINT_SCREEN => 283, + KEY_PAUSE => 284, + KEY_F1 => 290, + KEY_F2 => 291, + KEY_F3 => 292, + KEY_F4 => 293, + KEY_F5 => 294, + KEY_F6 => 295, + KEY_F7 => 296, + KEY_F8 => 297, + KEY_F9 => 298, + KEY_F10 => 299, + KEY_F11 => 300, + KEY_F12 => 301, + KEY_LEFT_SHIFT => 340, + KEY_LEFT_CONTROL => 341, + KEY_LEFT_ALT => 342, + KEY_LEFT_SUPER => 343, + KEY_RIGHT_SHIFT => 344, + KEY_RIGHT_CONTROL => 345, + KEY_RIGHT_ALT => 346, + KEY_RIGHT_SUPER => 347, + KEY_KB_MENU => 348, + KEY_KP_0 => 320, + KEY_KP_1 => 321, + KEY_KP_2 => 322, + KEY_KP_3 => 323, + KEY_KP_4 => 324, + KEY_KP_5 => 325, + KEY_KP_6 => 326, + KEY_KP_7 => 327, + KEY_KP_8 => 328, + KEY_KP_9 => 329, + KEY_KP_DECIMAL => 330, + KEY_KP_DIVIDE => 331, + KEY_KP_MULTIPLY => 332, + KEY_KP_SUBTRACT => 333, + KEY_KP_ADD => 334, + KEY_KP_ENTER => 335, + KEY_KP_EQUAL => 336, + KEY_BACK => 4, + KEY_MENU => 5, + KEY_VOLUME_UP => 24, + KEY_VOLUME_DOWN => 25 +); + my %functions = ( # Window-related functions @@ -594,14 +711,14 @@ my %functions = ( SetTraceLogLevel => [ ['int'] => 'void' ], # Input-related functions: keyboard - IsKeyPressed => [ ['int'] => 'bool' ], - IsKeyPressedRepeat => [ ['int'] => 'bool' ], - IsKeyDown => [ ['int'] => 'bool' ], - IsKeyReleased => [ ['int'] => 'bool' ], - IsKeyUp => [ ['int'] => 'bool' ], - GetKeyPressed => [ [] => 'int' ], + IsKeyPressed => [ ['keyboardkey_t'] => 'bool' ], + IsKeyPressedRepeat => [ ['keyboardkey_t'] => 'bool' ], + IsKeyDown => [ ['keyboardkey_t'] => 'bool' ], + IsKeyReleased => [ ['keyboardkey_t'] => 'bool' ], + IsKeyUp => [ ['keyboardkey_t'] => 'bool' ], + GetKeyPressed => [ [] => 'keyboardkey_t' ], GetCharPressed => [ [] => 'int' ], - SetExitKey => [ ['int'] => 'void' ], + SetExitKey => [ ['keyboardkey_t'] => 'void' ], # Input-related functions: gamepads IsGamepadAvailable => [ ['int'] => 'bool' ], diff --git a/lib/Raylib/Keyboard.pm b/lib/Raylib/Keyboard.pm index 6ea8975..1fd2dce 100644 --- a/lib/Raylib/Keyboard.pm +++ b/lib/Raylib/Keyboard.pm @@ -2,126 +2,7 @@ use 5.36.3; use Feature::Compat::Class; class Raylib::Keyboard { - use Raylib::FFI; - our %key_map; - - BEGIN { - %key_map = ( - KEY_NULL => 0, - KEY_APOSTROPHE => 39, - KEY_COMMA => 44, - KEY_MINUS => 45, - KEY_PERIOD => 46, - KEY_SLASH => 47, - KEY_ZERO => 48, - KEY_ONE => 49, - KEY_TWO => 50, - KEY_THREE => 51, - KEY_FOUR => 52, - KEY_FIVE => 53, - KEY_SIX => 54, - KEY_SEVEN => 55, - KEY_EIGHT => 56, - KEY_NINE => 57, - KEY_SEMICOLON => 59, - KEY_EQUAL => 61, - KEY_A => 65, - KEY_B => 66, - KEY_C => 67, - KEY_D => 68, - KEY_E => 69, - KEY_F => 70, - KEY_G => 71, - KEY_H => 72, - KEY_I => 73, - KEY_J => 74, - KEY_K => 75, - KEY_L => 76, - KEY_M => 77, - KEY_N => 78, - KEY_O => 79, - KEY_P => 80, - KEY_Q => 81, - KEY_R => 82, - KEY_S => 83, - KEY_T => 84, - KEY_U => 85, - KEY_V => 86, - KEY_W => 87, - KEY_X => 88, - KEY_Y => 89, - KEY_Z => 90, - KEY_LEFT_BRACKET => 91, - KEY_BACKSLASH => 92, - KEY_RIGHT_BRACKET => 93, - KEY_GRAVE => 96, - - KEY_SPACE => 32, - KEY_ESCAPE => 256, - KEY_ENTER => 257, - KEY_TAB => 258, - KEY_BACKSPACE => 259, - KEY_INSERT => 260, - KEY_DELETE => 261, - KEY_RIGHT => 262, - KEY_LEFT => 263, - KEY_DOWN => 264, - KEY_UP => 265, - KEY_PAGE_UP => 266, - KEY_PAGE_DOWN => 267, - KEY_HOME => 268, - KEY_END => 269, - KEY_CAPS_LOCK => 280, - KEY_SCROLL_LOCK => 281, - KEY_NUM_LOCK => 282, - KEY_PRINT_SCREEN => 283, - KEY_PAUSE => 284, - KEY_F1 => 290, - KEY_F2 => 291, - KEY_F3 => 292, - KEY_F4 => 293, - KEY_F5 => 294, - KEY_F6 => 295, - KEY_F7 => 296, - KEY_F8 => 297, - KEY_F9 => 298, - KEY_F10 => 299, - KEY_F11 => 300, - KEY_F12 => 301, - KEY_LEFT_SHIFT => 340, - KEY_LEFT_CONTROL => 341, - KEY_LEFT_ALT => 342, - KEY_LEFT_SUPER => 343, - KEY_RIGHT_SHIFT => 344, - KEY_RIGHT_CONTROL => 345, - KEY_RIGHT_ALT => 346, - KEY_RIGHT_SUPER => 347, - KEY_KB_MENU => 348, - KEY_KP_0 => 320, - KEY_KP_1 => 321, - KEY_KP_2 => 322, - KEY_KP_3 => 323, - KEY_KP_4 => 324, - KEY_KP_5 => 325, - KEY_KP_6 => 326, - KEY_KP_7 => 327, - KEY_KP_8 => 328, - KEY_KP_9 => 329, - KEY_KP_DECIMAL => 330, - KEY_KP_DIVIDE => 331, - KEY_KP_MULTIPLY => 332, - KEY_KP_SUBTRACT => 333, - KEY_KP_ADD => 334, - KEY_KP_ENTER => 335, - KEY_KP_EQUAL => 336, - KEY_BACK => 4, - KEY_MENU => 5, - KEY_VOLUME_UP => 24, - KEY_VOLUME_DOWN => 25 - ); - - } - use constant \%key_map; + use Raylib::FFI qw( GetKeyPressed ); BEGIN { *key_down = &Raylib::FFI::IsKeyDown; @@ -130,7 +11,8 @@ class Raylib::Keyboard { *key_pressed = &Raylib::FFI::GetKeyPressed; } - our @EXPORT_OK( keys %key_map ); + our @EXPORT_OK( qw( key_down key_up key_released key_pressed ) ); + our %EXPORT_TAGS = (all => \@EXPORT_OK); field $key_map :param = {};