]> www.fi.muni.cz Git - slotcarman.git/blobdiff - SCX/Car.pm
First implementation of qualification.
[slotcarman.git] / SCX / Car.pm
index 3f2b7a3b7f4cb2f1460dbf4fb5413e02525ba1b3..683a2cc77f22023c40249438a2d29ff4136694bc 100644 (file)
@@ -128,20 +128,18 @@ sub set_laptime {
 
        $self->gui->set_laptime($self->{order}, $lap_time);
 
-       if (defined $lap_time) {
-               if ($lap_time > 1.0 && !$self->{in_pit_lane}
-                       && (!defined $self->{best_lap}
-                               || $self->{best_lap} > $lap_time
-                       )) {
-
-                       $self->{best_lap} = $lap_time;
-                       my $global = $self->{track}->check_best_lap($lap_time,
-                               $self->{driver}
-                       );
-                       $self->gui->set_best_lap($self->{order}, $lap_time,
-                               $global);
-               }
-       }
+       return if !defined $lap_time || $lap_time <= 1.0
+               || $self->{in_pit_lane};
+
+       return if $self->{finished};
+
+       return if defined $self->{best_lap} && $self->{best_lap} <= $lap_time;
+
+       $self->{best_lap} = $lap_time;
+       my $global = $self->{track}->check_best_lap($lap_time,
+               $self->{driver});
+
+       $self->gui->set_best_lap($self->{order}, $lap_time, $global);
 }
 
 sub set_driver {
@@ -246,6 +244,12 @@ sub finish_line {
 
        if ($self->track->{race_running}) {
                $self->set_lap($self->{lap} + 1);
+       } elsif ($self->track->{qualification_running} && !$self->{finished}) {
+               $self->set_lap($self->{lap} + 1);
+               if ($self->{lap} > $self->track->{race_rounds}) {
+                       $self->{finished} = 1;
+                       $self->print_state;
+               }
        }
 
        return 1;
@@ -283,6 +287,26 @@ sub recalc_distance {
        }
 }
 
+sub recalc_qual_distance {
+       my ($self, $time_first) = @_;
+
+       return if !defined $self->{best_lap} || $self->{best_lap} <= 0;
+
+       $self->{total_time} = undef;
+       $self->{time_diff} = undef;
+       $self->{grey_diff} = undef;
+       $self->{lap_diff} = undef;
+
+       if ($self->{best_lap} == $time_first) {
+               $self->{total_time} = $self->{best_lap};
+       } else {
+               $self->{time_diff} = $self->{best_lap} - $time_first;
+       }
+
+       $self->gui->set_distance($self->{order}, $self->{total_time},
+               $self->{lap_diff}, $self->{time_diff}, $self->{grey_diff});
+}
+
 sub greyout_distance {
        my ($self) = @_;