package Firework::Rockets; use Firework; our @ISA=qw{ Firework }; sub new { my($self,$display,$i_x,$i_y,$v_x,$v_y,$start,$colour)=@_; my $firework={ i_x=>$i_x, i_y=>$i_y, v_x=>$v_x, v_y=>$v_y, start=>$start, display=>$display, colour=>$colour||31+rand(6) }; bless $firework,$self; return $firework; } sub explode { my $firework=shift; $firework->{exploded}=1; for my $z (1..4){ $firework->{parts}{$z}=bless{ i_x=>$firework->x_t, i_y=>$firework->y_t, v_x=>$z%2?5:-5, v_y=>$z>2?5:-5, colour=>$firework->{colour} }; } } sub should_explode { my $self=shift; return ($self->v_y_t < 0); } sub post_explode { my $firework=shift; foreach my $part_count (keys %{$firework->{parts}}){ my $part=$firework->{parts}{$part_count}; if($part->y_t > 22 || $part->x_t > 75 || $part->x_t < 0){ delete $firework->{parts}{$part_count} } else { $part->draw; $part->{timer}+=.1; } } $firework->{dead}=1 if(!scalar keys %{$firework->{parts}}); } 1;