/usr/share/perl5/Games/PangZero/BonusDrop.pm is in pangzero 1.4-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | package Games::PangZero::BonusDrop;
@ISA = qw(Games::PangZero::GameObject);
use strict;
use warnings;
use vars qw(@BonusDesc);
@BonusDesc = (
{ 'weaponClass' => 'MachineGun', 'bonusDelay' => 1500, 'srcRect' => SDL::Rect->new( 0, 64, 32, 32), },
{ 'weaponClass' => 'HalfCutter', 'bonusDelay' => 1000, 'srcRect' => SDL::Rect->new(32, 64, 32, 32), },
{ 'weaponClass' => 'PowerWire', 'bonusDelay' => 3000, 'srcRect' => SDL::Rect->new(32, 96, 32, 32), },
{ 'onCollectedSub' => \&OnCollectedSlowEffect, 'srcRect' => SDL::Rect->new(32, 0, 32, 32), },
);
sub new {
my ($class, $ball) = @_;
my ($self);
$self = Games::PangZero::GameObject->new();
%{$self} = ( %{$self},
'x' => $ball->{x} + ($ball->{w} - 32) / 2,
'y' => $ball->{y} + ($ball->{h} - 32) / 2,
'w' => 32,
'h' => 32,
'speedY' => -3,
'speedX' => 0,
'bottomDelay' => 500,
'desc' => $BonusDesc[int $Games::PangZero::Game->Rand(scalar @BonusDesc)],
);
bless $self, $class;
}
sub Advance {
my $self = shift;
if ($self->{y} >= $Games::PangZero::ScreenHeight - $self->{h}) {
$self->{y} = $Games::PangZero::ScreenHeight - $self->{h};
if (--$self->{bottomDelay} < 0) {
$self->Delete();
}
} else {
$self->{speedY} += 0.1;
$self->{y} += $self->{speedY};
}
$self->CheckCollisions() if $self->{speedY} >= 0;
}
sub CheckCollisions {
my $self = shift;
my ($guy, @guysTouched);
foreach $guy (@Games::PangZero::GameObjects) {
next unless ref($guy) eq 'Games::PangZero::Guy';
next unless $self->Collisions($guy);
push @guysTouched, ($guy);
}
return unless @guysTouched;
$self->Collected($guysTouched[$Games::PangZero::Game->Rand( scalar @guysTouched )]);
}
sub SetOnCollectedSub {
my ($self, $onCollectedSub) = @_;
$self->{onCollectedSub} = $onCollectedSub;
}
sub Collected {
my ($self, $guy) = @_;
if ($self->{onCollectedSub}) {
$self->{onCollectedSub}->($self, $guy);
} elsif ($self->{desc}->{onCollectedSub}) {
$self->{desc}->{onCollectedSub}->($self, $guy);
} else {
$guy->{weapon} = $self->{desc}->{weaponClass};
$guy->{bonusDelay} = $self->{desc}->{bonusDelay} * $Games::PangZero::WeaponDuration->{durationmultiplier};
}
$self->Delete();
}
sub Draw {
my $self = shift;
return if $self->{bottomDelay} < 100 and (($Games::PangZero::Game->{anim} / 4) % 2 < 1);
$self->TransferRect();
SDL::Video::blit_surface($Games::PangZero::BonusSurface, $self->{desc}->{srcRect}, $Games::PangZero::App, $self->{rect});
}
sub OnCollectedSlowEffect {
my ($self, $guy) = @_;
Games::PangZero::SlowEffect::RemoveSlowEffects();
push @Games::PangZero::GameObjects, Games::PangZero::SlowEffect->new();
}
1;
|