diff --git a/ex/rlt-01.pl b/ex/rlt-01.pl index 84c4d00..8d9598c 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 }, + UP => sub { $player_y -= 10 }, + DOWN => sub { $player_y += 10 }, + LEFT => sub { $player_x -= 10 }, + RIGHT => sub { $player_x += 10 }, }, ); diff --git a/ex/rlt-02.pl b/ex/rlt-02.pl index 38292e7..ce752c5 100644 --- a/ex/rlt-02.pl +++ b/ex/rlt-02.pl @@ -162,22 +162,22 @@ key_map => { # vim keys - KEY_H() => sub { movement_action( -1, 0 ) }, - KEY_L() => sub { movement_action( 1, 0 ) }, - KEY_K() => sub { movement_action( 0, -1 ) }, - KEY_J() => sub { movement_action( 0, 1 ) }, + KEY_H => sub { movement_action( -1, 0 ) }, + KEY_L => sub { movement_action( 1, 0 ) }, + KEY_K => sub { movement_action( 0, -1 ) }, + KEY_J => sub { movement_action( 0, 1 ) }, # wasd keys - KEY_W() => sub { movement_action( 0, -1 ) }, - KEY_S() => sub { movement_action( 0, 1 ) }, - KEY_A() => sub { movement_action( -1, 0 ) }, - KEY_D() => sub { movement_action( 1, 0 ) }, + KEY_W => sub { movement_action( 0, -1 ) }, + KEY_S => sub { movement_action( 0, 1 ) }, + KEY_A => sub { movement_action( -1, 0 ) }, + KEY_D => sub { movement_action( 1, 0 ) }, # arrow keys - KEY_UP() => sub { movement_action( 0, -1 ) }, - KEY_DOWN() => sub { movement_action( 0, 1 ) }, - KEY_LEFT() => sub { movement_action( -1, 0 ) }, - KEY_RIGHT() => sub { movement_action( 1, 0 ) }, + KEY_UP => sub { movement_action( 0, -1 ) }, + KEY_DOWN => sub { movement_action( 0, 1 ) }, + KEY_LEFT => sub { movement_action( -1, 0 ) }, + KEY_RIGHT => sub { movement_action( 1, 0 ) }, }, ) } diff --git a/ex/test.pl b/ex/test.pl index 77116c4..9a8de59 100644 --- a/ex/test.pl +++ b/ex/test.pl @@ -1,6 +1,6 @@ use 5.36.3; use lib qw(lib); -use Raylib::FFI; +use Raylib::FFI ':all'; use constant Color => 'Raylib::FFI::Color'; InitWindow( 800, 600, "Testing!" ); diff --git a/lib/Raylib/Keyboard.pm b/lib/Raylib/Keyboard.pm index 6ea8975..f6302f7 100644 --- a/lib/Raylib/Keyboard.pm +++ b/lib/Raylib/Keyboard.pm @@ -2,7 +2,9 @@ use 5.36.3; use Feature::Compat::Class; class Raylib::Keyboard { - use Raylib::FFI; + use Raylib::FFI qw( GetKeyPressed ); + use Scalar::Util qw( looks_like_number ); + use Carp qw( carp ); our %key_map; BEGIN { @@ -130,15 +132,28 @@ class Raylib::Keyboard { *key_pressed = &Raylib::FFI::GetKeyPressed; } - our @EXPORT_OK( keys %key_map ); - field $key_map :param = {}; + field $key_const_map = {}; method handle_events() { while ( my $key = GetKeyPressed() ) { - next unless $key_map->{$key}; - $key_map->{$key}->(); + next unless $key_const_map->{$key}; + $key_const_map->{$key}->(); + } + } + + ADJUST { + for my ( $key, $sub ) ( $key_map->%* ) { + my $const = looks_like_number( $key ) + ? sub { $key } + : $self->can( $key ) // $self->can( "KEY_$key" ); + if ( ! $const ) { + carp "Unrecognised key $key"; + next; + } + $key_const_map->{ $const->() } = $sub } } } +1; diff --git a/lib/Raylib/Text.pm b/lib/Raylib/Text.pm index 9a10f63..90f42bd 100644 --- a/lib/Raylib/Text.pm +++ b/lib/Raylib/Text.pm @@ -2,7 +2,7 @@ use 5.36.3; use Feature::Compat::Class; class Raylib::Text { - use Raylib::FFI; + use Raylib::FFI qw( DrawText ); field $text : param; field $color : param;