pods::...oystick(3pm)

๐Ÿ“ฆ version 2.548, in opensuse-leap 16.0

๐ŸŽฎ SDL::Joystick โ€” the manual page, bestie edition ๐ŸŽฎ

okay so this is pods::...oystick(3pm) from the User Contributed Perl Documentation crew โ€” it's the SDL::Joystick page, aka SDL Bindings for the Joystick device. yes that's the NAME section, we're doing this properly ๐Ÿ’…


โœจ CATEGORY โœจ

Core, Joystick. that's it, that's the vibe. ๐Ÿ‘‘


โœจ SYNOPSIS โœจ

like, the whole thing in one go:

use SDL;
use SDL::Joystick;

SDL::init_sub_system(SDL_INIT_JOYSTICK);

die('no joystick found') unless(SDL::Joystick::num_joysticks());

my $joystick = SDL::Joystick->new(0);

literally that's the entire opening act ๐ŸŽ€


๐ŸŒธ METHODS ๐ŸŒธ

๐Ÿฆ‹ num_joysticks

int SDL::Joystick::num_joysticks( void );

counts up all the joysticks you got and returns how many there are. no cap. ๐ŸŽฎ

๐Ÿฆ‹ name

string SDL::Joystick::name( index );

gets you the implementation dependent name of a joystick. the index param means "the N'th joystick on the system", iykyk.

my $num_joysticks = SDL::Joystick::num_joysticks();

printf("%d joysticks found\n", $num_joysticks);

for($i = 0; $i < $num_joysticks; $i++)
{
    printf("%s\n", SDL::Joystick::name($i));
}

look at her go, naming every single one ๐Ÿซถ

๐Ÿฆ‹ new

object SDL::Joystick->new( index );

opens a joystick for use within SDL. index is the N'th joystick in the system. super important: a joystick must be opened before it can be used, that's just the rules bestie ๐Ÿ’€

# Initialize the joystick subsystem
SDL::init_sub_system(SDL_INIT_JOYSTICK);

# Check for joystick
if(SDL::Joystick::num_joysticks() > 0)
{
    # Open joystick
    my $joystick = SDL::Joystick->new(0);

    if($joystick)
    {
        printf("Opened Joystick 0\n");
        printf("Name: %s\n",              SDL::Joystick::name(0));
        printf("Number of Axes: %d\n",    SDL::Joystick::num_axes($joystick));
        printf("Number of Buttons: %d\n", SDL::Joystick::num_buttons($joystick));
        printf("Number of Balls: %d\n",   SDL::Joystick::num_balls($joystick));
    }
    else
    {
        printf("Couldn't open Joystick 0\n");
    }

    # Close if opened
    SDL::Joystick::close($joystick) if SDL::Joystick::opened(0);
}

the whole lifecycle in one block, we love a self-contained icon โœจ

๐Ÿฆ‹ opened

int SDL::Joystick::opened( index );

figures out whether a joystick has already been opened within the application. index = the N'th joystick on the system.

returns 1 if it's been opened, or 0 if it hasn't. simple as ๐Ÿ“

๐Ÿฆ‹ index

int SDL::Joystick::index( object );

returns the index of a given SDL_Joystick structure. check out SDL::Joystick::new if you need the backstory ๐Ÿ‘€

๐Ÿฆ‹ num_axes

int SDL::Joystick::num_axes( object );

returns the number of axes available from a previously opened joystick. see SDL::Joystick::new ๐ŸŒˆ

๐Ÿฆ‹ num_balls

int SDL::Joystick::num_balls( object );

returns the number of trackballs available from a previously opened joystick. see SDL::Joystick::new ๐ŸŒธ

๐Ÿฆ‹ num_hats

int SDL::Joystick::num_hats( object );

gets the number of joystick hats from a previously opened joystick. see SDL::Joystick::new ๐ŸŽฉ

๐Ÿฆ‹ num_buttons

int SDL::Joystick::num_buttons( object );

gets the number of joystick buttons from a previously opened joystick. see SDL::Joystick::new ๐Ÿ’œ

๐Ÿฆ‹ update

void SDL::Joystick::update();

updates the state (position, buttons, etc.) of all open joysticks. and here's the lil detail: if joystick events have been enabled with SDL::Joystick::event_state, then this gets called automatically in the event loop. so she's already on it ๐Ÿ˜Ž

๐Ÿฆ‹ get_axis

get_axis returns the current state of the given axis on the given joystick.

on most modern joysticks the X axis is usually represented by axis 0 and the Y axis by axis 1. the value returned by get_axis is a signed integer (-32768 to 32767) representing the current position of the axis โ€” and ngl you may need to impose certain tolerances on these values to account for jitter. the jitter is real ๐Ÿ˜ญ

Note: some joysticks use axes 2 and 3 for extra buttons. plot twist.

returns a 16-bit signed integer representing the current position of the axis.

my $joystick = SDL::Joystick->new(0);

my $x_move   = SDL::Joystick::get_axis($joystick, 0);
my $y_move   = SDL::Joystick::get_axis($joystick, 1);

x and y, together, iconic ๐Ÿซถ

๐Ÿฆ‹ get_hat

int SDL::Joystick::get_hat( object, int );

get_hat returns the current state of the given hat on the given joystick.

the current state comes back as an OR'd combination of one or more of these:

  • SDL_HAT_CENTERED
  • SDL_HAT_UP
  • SDL_HAT_RIGHT
  • SDL_HAT_DOWN
  • SDL_HAT_LEFT
  • SDL_HAT_RIGHTUP
  • SDL_HAT_RIGHTDOWN
  • SDL_HAT_LEFTUP
  • SDL_HAT_LEFTDOWN

dirs on dirs on dirs ๐Ÿ“

my $joystick = SDL::Joystick->new(0);

my $position = SDL::Joystick::get_hat($joystick, 0);

print("hat is in position UP\n") if $position & SDL_HAT_UP;

๐Ÿฆ‹ get_button

int SDL::Joystick::get_button( object, int );

get_button returns the current state of the given button on the given joystick.

returns 1 if the button is pressed. otherwise, 0. pressed or not pressed, no in-between bestie ๐Ÿ’…

my $joystick    = SDL::Joystick->new(0);

my $num_buttons = SDL::Joystick::num_buttons($joystick);

for(my $i = 0; $i < $num_buttons; $i++)
{
    printf("button %d is %s\n", $i, SDL::Joystick::get_button($joystick, $i) ? 'pressed' : 'not pressed');
}

SDL::Joystick::close($joystick) if SDL::Joystick::opened(0);

๐Ÿฆ‹ get_ball

int SDL::Joystick::get_ball(SDL_Joystick $joystick, int $ball, int $dx, int $dy);

get the ball axis change ๐ŸŽฑ

trackballs can only return relative motion since the last call to SDL::Joystick::get_ball โ€” these motion deltas are placed into dx and dy.

returns 0 on success or -1 on failure.

my $delta_x  = 0;
my $delta_y  = 0;
my $joystick = SDL::Joystick->new(0);

SDL::Joystick::update();

printf("TrackBall Read Error!\n") if(SDL::JoystickGetBall($joystick, 0, $delta_x, $delta_y) == -1);
printf("Trackball Delta- X:%d, Y:%d\n", delta_x, delta_y);

๐Ÿฆ‹ close

void SDL::Joystick::close( object );

closes a previously opened joystick. see SDL::Joystick::new ๐ŸŽ€

SDL::Joystick::close($joystick) if SDL::Joystick::opened(0);

always close what you open, periodt ๐Ÿ”ฅ


๐Ÿ‘‘ AUTHORS ๐Ÿ‘‘

see AUTHORS in SDL. that's the whole section, she's brief and mysterious ๐Ÿฆ‹


and that's the page babes ๐Ÿ’– written by the User Contributed Perl Documentation girlies, perl v5.42.0, dated 2024-05-01 โ€” go forth and open a joystick, or like, at minimum check SDL::Joystick::num_joysticks() first ๐Ÿ™ˆโœจ
๐Ÿ“ฆ where this page comes from