Games-FrozenBubble
view release on metacpan or search on metacpan
bin/frozen-bubble view on Meta::CPAN
SDL::Events::pump_events() while SDL::Events::poll_event($event) != 0;
grab_key() eq SDLK_ESCAPE() and die 'quit';
handle_new_hiscores();
die 'new_game';
}
}
}
}
#- extract it from "handle_graphics" to optimize a bit animations
sub update_malus($$) {
my ($fun, $p) = @_;
my $malus_nb = @{$pdata{$p}{malus}};
my $y_shift = 0;
while ($malus_nb > 0) {
my $print = sub($) {
my ($type) = @_;
my $type_real = translate_mini_image($type);
$fun->($type, $POS{$p}{malus}{x} - $type_real->w/2, $POS{$p}{malus}{'y'} - $y_shift - $type_real->h);
$y_shift += $type_real->h - 1;
};
bin/frozen-bubble view on Meta::CPAN
sub check_mp_connection {
if (!Games::FrozenBubble::Net::isconnected()) {
if ($pdata{gametype} eq 'lan') {
mp_disconnect_with_reason('', '', '', '', loc("Lost connection to server!"), '', loc("Hoster aborted the game."));
} else {
mp_disconnect_with_reason('', '', '', '', loc("Lost connection to server!"), '', loc("Your lag is probably too high."));
}
}
}
sub update_say_mp {
put_image($imgbin{void_chat}, $POS{p1}{chatting}{x}, $POS{p1}{chatting}{'y'});
callback_entry('print', { xpos => $POS{p1}{chatting}{x} + 15, ypos => $POS{p1}{chatting}{'y'} + 5, font => 'ingame_chat', maxlen => $imgbin{void_chat}->w - 30 });
push @update_rects, $apprects{main};
}
sub cleanup_chatting {
$pdata{p1}{chatting} = 0;
SDL::Events::enable_key_repeat(0, 0);
remove_image_from_background($imgbin{void_chat}, $POS{p1}{chatting}{x}, $POS{p1}{chatting}{'y'});
print_next_bubble($next_bubble{p1}{img}, 'p1');
bin/frozen-bubble view on Meta::CPAN
$dont_save_background or $pdata{$player}{hurry_save_img} = $t;
}
sub remove_hurry($) {
my ($player) = @_;
$player = @PLAYERS == 2 && $player eq 'rp1' ? 'p2' : $player;
$pdata{$player}{hurry_save_img} and
switch_image_on_background($pdata{$player}{hurry_save_img}, $POS{$player}{left_limit} + $POS{$player}{hurry}{x}, $POS{$player}{hurry}{'y'});
$pdata{$player}{hurry_save_img} = undef;
}
sub update_lost {
my ($player) = @_;
return if odd($frame);
if (@{$sticked_bubbles{$player}}) {
my $b = shift @{$sticked_bubbles{$player}};
put_image_to_background($bubbles_anim{lose}, --$b->{'x'}, --$b->{'y'});
if (@{$sticked_bubbles{$player}} == 0) {
if ($graphics_level == 1 && $pdata{state} =~ /^lost (.*)/ && !is_1p_game()) {
bin/frozen-bubble view on Meta::CPAN
}
my $still_sticked = sum(map { @{$sticked_bubbles{$_}} } @PLAYERS);
if ($pdata{state} eq 'won ' && $still_sticked == 1) {
put_image($imgbin{void_panel}, $MENUPOS{xpos_panel}, $MENUPOS{ypos_panel});
print_('menu', $app, $MENUPOS{xpos_panel}, $MENUPOS{ypos_panel} + 30, loc("Draw game!"), $imgbin{void_panel}->w - 20, 'center');
SDL::Video::update_rect($app, 0, 0, 0, 0);
}
}
sub update_won {
my ($player) = @_;
return if odd($frame);
iter_players { #- need iter_players to get the small graphics change for free if we're in multiplayer
if ($::p eq $player) {
if (@{$sticked_bubbles{$::p}} && $graphics_level > 1) {
my $b = shift @{$sticked_bubbles{$::p}};
destroy_bubbles($::p, $b);
remove_image_from_background($b->{img}, $b->{'x'}, $b->{'y'});
bin/frozen-bubble view on Meta::CPAN
if ($msg->{msg} ne 'l') {
print "Postgame 'other' message from $player not a leave - $msg->{msg} - should not!\n";
}
dbgnet("decoded postgame message: from=$player msg=other");
return "$player other";
}
}
#- ----------- mainloop helper --------------------------------------------
sub update_game() {
if ($pdata{state} eq 'game') {
handle_game_events();
iter_players {
if ($pdata{$::p}{state} eq 'lost') {
update_lost($::p);
} elsif ($pdata{$::p}{state} eq 'ingame') {
$actions{$::p}{left} and $angle{$::p} += $LAUNCHER_SPEED;
$actions{$::p}{right} and $angle{$::p} -= $LAUNCHER_SPEED;
( run in 0.560 second using v1.01-cache-2.11-cpan-4d4bc49f3ae )