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 )