Games-Checkers
view release on metacpan or search on metacpan
lib/Games/Checkers/SDL.pm view on Meta::CPAN
text => $title,
);
$title_text->write_to($display);
}
sub clear_helper ($) {
my $self = shift;
$self->blit_bg([$self->{helper_x}, 20]);
}
sub restart ($$) {
my $self = shift;
my $board = shift;
$self->{ply_strs} = [];
$self->{ply_o} = 0;
$self->{ply_l} = 0;
$self->{board} = $board;
$self->clear_helper;
}
sub quit ($) {
return 1;
}
sub pause ($) {
my $self = shift;
my $display = $self->{display};
my $display_copy = SDL::Video::display_format($display);
$self->{paused} = 1;
SDLx::Text->new(
size => 110,
color => 0xffffff,
bold => 0,
shadow => 1,
x => $self->{w} / 2,
y => $self->{h} / 2 - 58,
h_align => 'center',
text => 'PAUSED',
)->write_to($display);
while ($self->process_pending_events != 1) {
select(undef, undef, undef, 0.1);
}
$self->{paused} = 0;
SDL::Video::blit_surface($display_copy, 0, $display, 0);
}
sub toggle_fullscreen ($) {
my $self = shift;
$self->{fullscreen} ^= 1;
SDL::Video::wm_toggle_fullscreen($self->{display});
}
sub update_display ($) {
my $self = shift;
SDL::Video::update_rect($self->{display}, 0, 0, 0, 0);
return 1;
}
sub process_pending_events ($;$) {
my $self = shift;
my $want_unpress = shift;
$self->update_display;
my $event = $self->{event};
SDL::Events::pump_events();
while (SDL::Events::poll_event($event)) {
$self->{skip_unpress} = 0, next
if $self->{skip_unpress} == SDL_KEYDOWN && $event->type == SDL_KEYUP
|| $self->{skip_unpress} == SDL_MOUSEBUTTONDOWN && $event->type == SDL_MOUSEBUTTONUP;
my $pressed_button = $event->type == SDL_MOUSEBUTTONDOWN
&& $event->motion_y < 20 && $event->motion_x >= $self->{w} - 20 * 3
? 1 + int(($self->{w} - $event->motion_x) / 20) : 0;
$self->toggle_fullscreen, $self->{skip_unpress} = $event->type, next
if $event->type == SDL_KEYDOWN && $event->key_sym == SDLK_RETURN
&& $event->key_mod & KMOD_ALT
|| $event->type == SDL_KEYDOWN && $event->key_sym == SDLK_F11
|| $event->type == SDL_KEYDOWN && $event->key_sym == SDLK_f
|| $pressed_button == 1;
return 1
if ($self->{paused} || $want_unpress)
&& ($event->type == SDL_KEYUP || $event->type == SDL_MOUSEBUTTONUP);
next
if $self->{paused};
return -1
if $event->type == SDL_KEYDOWN && $event->key_sym == SDLK_r
|| $pressed_button == 3;
$self->{mouse_pressed} = $event->type == SDL_MOUSEBUTTONDOWN
if $event->button_button == SDL_BUTTON_LEFT;
return -2
if $event->type == SDL_QUIT
|| $event->type == SDL_KEYDOWN && $event->key_sym == SDLK_ESCAPE
|| $event->type == SDL_KEYDOWN && $event->key_sym == SDLK_q;
$self->{skip_unpress} = $event->type, return $self->pause
if $event->type == SDL_KEYDOWN && $event->key_sym == SDLK_p
|| $event->type == SDL_KEYDOWN && $event->key_sym == SDLK_SPACE
|| $pressed_button == 2;
}
return 0;
}
( run in 1.896 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )