From 5837c90dd133af3a5dbf7ce5e6282bf0258de1cb Mon Sep 17 00:00:00 2001 From: John Barrett Date: Mon, 9 Mar 2026 13:11:05 +0000 Subject: [PATCH 1/6] Create internal keymap from stringified constants passed in $key_map --- lib/Raylib/Keyboard.pm | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/Raylib/Keyboard.pm b/lib/Raylib/Keyboard.pm index 6ea8975..b1b4757 100644 --- a/lib/Raylib/Keyboard.pm +++ b/lib/Raylib/Keyboard.pm @@ -2,7 +2,8 @@ use 5.36.3; use Feature::Compat::Class; class Raylib::Keyboard { - use Raylib::FFI; + use Raylib::FFI qw( GetKeyPressed ); + use Carp qw( carp ); our %key_map; BEGIN { @@ -130,15 +131,25 @@ 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->%* ) { + if ( !$self->can( $key ) ) { + carp "Unrecognised key $key"; + next; + } + $key_const_map->{ $self->$key } = $sub } } } +1; From 2828589d7f606665b6f8ab7166c8197ce50b143e Mon Sep 17 00:00:00 2001 From: John Barrett Date: Mon, 9 Mar 2026 13:11:38 +0000 Subject: [PATCH 2/6] Text needs DrawText import --- lib/Raylib/Text.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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; From ab8d2e7032f822fbbf752c6b61b97a5f0f1f0a5d Mon Sep 17 00:00:00 2001 From: John Barrett Date: Mon, 9 Mar 2026 13:12:00 +0000 Subject: [PATCH 3/6] Update examples to use stringified constants --- ex/rlt-01.pl | 24 ++++++++++++------------ ex/rlt-02.pl | 24 ++++++++++++------------ 2 files changed, 24 insertions(+), 24 deletions(-) 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/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 ) }, }, ) } From 3f76ce940240ebe1916a34230a0c40a96182e8b7 Mon Sep 17 00:00:00 2001 From: John Barrett Date: Mon, 9 Mar 2026 13:15:02 +0000 Subject: [PATCH 4/6] Import all in test example --- ex/test.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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!" ); From b175070d5caa87efd0aef9c1570d61ff4a502386 Mon Sep 17 00:00:00 2001 From: John Barrett Date: Tue, 10 Mar 2026 15:34:15 +0000 Subject: [PATCH 5/6] Allow passing in key names without 'KEY_' prefix --- ex/rlt-01.pl | 8 ++++---- lib/Raylib/Keyboard.pm | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/ex/rlt-01.pl b/ex/rlt-01.pl index 0741601..8d9598c 100644 --- a/ex/rlt-01.pl +++ b/ex/rlt-01.pl @@ -41,10 +41,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/lib/Raylib/Keyboard.pm b/lib/Raylib/Keyboard.pm index b1b4757..93388db 100644 --- a/lib/Raylib/Keyboard.pm +++ b/lib/Raylib/Keyboard.pm @@ -143,11 +143,12 @@ class Raylib::Keyboard { ADJUST { for my ( $key, $sub ) ( $key_map->%* ) { - if ( !$self->can( $key ) ) { + my $const = $self->can( $key ) // $self->can( "KEY_$key" ); + if ( ! $const ) { carp "Unrecognised key $key"; next; } - $key_const_map->{ $self->$key } = $sub + $key_const_map->{ $const->() } = $sub } } } From 00336e701ed353096e192dd4d8cca2af7744e224 Mon Sep 17 00:00:00 2001 From: John Barrett Date: Tue, 10 Mar 2026 17:11:26 +0000 Subject: [PATCH 6/6] Allow numeric scancodes / constants to be passed in key_map --- lib/Raylib/Keyboard.pm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/Raylib/Keyboard.pm b/lib/Raylib/Keyboard.pm index 93388db..f6302f7 100644 --- a/lib/Raylib/Keyboard.pm +++ b/lib/Raylib/Keyboard.pm @@ -3,6 +3,7 @@ use Feature::Compat::Class; class Raylib::Keyboard { use Raylib::FFI qw( GetKeyPressed ); + use Scalar::Util qw( looks_like_number ); use Carp qw( carp ); our %key_map; @@ -143,7 +144,9 @@ class Raylib::Keyboard { ADJUST { for my ( $key, $sub ) ( $key_map->%* ) { - my $const = $self->can( $key ) // $self->can( "KEY_$key" ); + my $const = looks_like_number( $key ) + ? sub { $key } + : $self->can( $key ) // $self->can( "KEY_$key" ); if ( ! $const ) { carp "Unrecognised key $key"; next;