Codebase list pangzero / 09eba78 lib / Games / PangZero / Joystick.pm
09eba78

Tree @09eba78 (Download .tar.gz)

Joystick.pm @09eba78raw · history · blame

##########################################################################
package Games::PangZero::Joystick;
##########################################################################

use vars qw(@Games::PangZero::Joysticks @Games::PangZero::JoystickButtons);

sub InitJoystick {
  my ($numJoysticks, $joystick, $numButtons, $i);

  $numJoysticks = SDL::Joystick::num_joysticks();
  for ($i = 0; $i < $numJoysticks; $i++) {
    print STDERR "Found joystick " , $i+1 , ": " , SDL::Joystick::name($i), "\n";
    $joystick   = SDL::Joystick->new($i);
    next unless $joystick;
    $numButtons = SDL::Joystick::num_buttons($joystick);
    next unless $numButtons;
    push @Games::PangZero::Joysticks, $joystick;
    push @Games::PangZero::JoystickButtons, $numButtons;
    print STDERR "Joystick opened, $numButtons buttons.\n";
  }
}

sub ReadJoystick {
  my ($readBothAxes) = @_;
  my ($i, $button, $buttonPressed);

  $i = 0;
  foreach my $joystick (@Games::PangZero::Joysticks) {
    my $axis = SDL::Joystick::get_axis($joystick, 0);
    if ($axis <= -10000) {
      $Games::PangZero::Events{"L$i"} = $Games::PangZero::MenuEvents{LEFT} = 1 unless $Games::PangZero::Keys{"L$i"};
      $Games::PangZero::Keys{"L$i"} = 1;
      $Games::PangZero::Keys{"R$i"} = 0;
    } elsif ($axis >= 10000) {
      $Games::PangZero::Events{"R$i"} = $Games::PangZero::MenuEvents{RIGHT} = 1 unless $Games::PangZero::Keys{"R$i"};
      $Games::PangZero::Keys{"R$i"} = 1;
      $Games::PangZero::Keys{"L$i"} = 0;
    } else {
      $Games::PangZero::Keys{"L$i"} = 0;
      $Games::PangZero::Keys{"R$i"} = 0;
    }

    if ($readBothAxes) {
      $axis = SDL::Joystick::get_axis($joystick, 1);
      if ($axis <= -10000) {
        $Games::PangZero::Events{"U$i"} = $Games::PangZero::MenuEvents{UP} = 1 unless $Games::PangZero::Keys{"U$i"};
        $Games::PangZero::Keys{"U$i"} = 1;
        $Games::PangZero::Keys{"D$i"} = 0;
      } elsif ($axis >= 10000) {
        $Games::PangZero::Events{"D$i"} = $Games::PangZero::MenuEvents{DOWN} = 1 unless $Games::PangZero::Keys{"D$i"};
        $Games::PangZero::Keys{"D$i"} = 1;
        $Games::PangZero::Keys{"U$i"} = 0;
      } else {
        $Games::PangZero::Keys{"D$i"} = 0;
        $Games::PangZero::Keys{"U$i"} = 0;
      }
    }

    $buttonPressed = 0;
    for ($button = 0; $button < $Games::PangZero::JoystickButtons[$i]; $button++) {
      if (SDL::Joystick::get_button($joystick, $button)) {
        $buttonPressed = 1;
        last;
      }
    }
    if ($buttonPressed and not $Games::PangZero::Keys{"B$i"}) {
        $Games::PangZero::Events{"B$i"} = $Games::PangZero::MenuEvents{BUTTON} = 1;
    }
    $Games::PangZero::Keys{"B$i"} = $buttonPressed;
    $i++;
  }
}

1;