use Glib qw(TRUE FALSE);
use SCX::Car;
+use SCX::Sound;
our $SEMAPHORE_STEP = 1000;
$self->{gui}->time(undef);
$self->{gui}->best_lap(undef, undef);
+ $self->{sound} = new SCX::Sound;
+
return $self;
}
} else {
$self->{gui}->show_semaphore(undef);
$self->{semaphore} = undef;
+ $self->{sound}->start();
}
return FALSE;
}
$self->{best_lap} = undef;
$self->{gui}->show_semaphore(undef);
- $self->{race_running} = 0;
- $self->{qualification_running} = 0;
- $self->{start_in_progress} = 0;
-
- $self->{gui}->time(undef);
- $self->{gui}->best_lap(undef);
-
- for my $car (0..5) {
- $self->car($car)->reset;
- }
-}
-
-sub reset {
- my ($self) = @_;
-
$self->{race_running} = 0;
$self->{qualification_running} = 0;
$self->{start_in_progress} = 0;
$self->{race_finishing} = 0;
- $self->{best_lap} = undef;
- $self->{round} = 0;
- $self->print_rounds;
- $self->{gui}->best_lap(undef);
$self->{gui}->time(undef);
+ $self->{gui}->best_lap(undef);
for my $car (0..5) {
$self->car($car)->reset;
$self->{gui}->rounds($msg);
}
-sub check_best_lap {
- my ($self, $time, $who) = @_;
+sub notify_best_lap {
+ my ($self, $id, $time, $who) = @_;
return if !defined $time || $time == 0;
|| $time < $self->{best_lap}) {
$self->{best_lap} = $time;
$self->{gui}->best_lap($time, $who);
+
+ for my $car (0..5) {
+ $self->car($car)->set_global_best($car == $id);
+ $self->car($car)->print_best_lap;
+ }
+
+ if (!$self->{race_running} || $self->{round} > 1) {
+ # skip the first round in the race
+ $self->{sound}->best_lap($id);
+ }
return 1;
}
return 0;
if ($self->{round} && $self->{race_rounds}
&& $self->{round} > $self->{race_rounds}) {
+ if (!$self->{race_finishing}) {
+ $self->{sound}->winner($new_order[0]);
+ }
$self->{race_finishing} = 1;
}