]> www.fi.muni.cz Git - slotcarman.git/blobdiff - SCX/Car.pm
Init fixes, lap counting fixes.
[slotcarman.git] / SCX / Car.pm
index 91a244d129d83136d146329f133bade6233d8609..3f2b7a3b7f4cb2f1460dbf4fb5413e02525ba1b3 100644 (file)
@@ -17,15 +17,15 @@ sub new {
                lap      => 0,
                laptime  => 0,
                avg_lap  => 0,
-               state    => 'greenflag',
                car_img  => $args->{car_img},
                id       => $args->{id},
-               order    => $args->{id},
                track    => $args->{track},
        };
 
        bless $self, $class;
 
+       $self->set_order($self->{id});
+
        return $self;
 }
 
@@ -130,7 +130,6 @@ sub set_laptime {
 
        if (defined $lap_time) {
                if ($lap_time > 1.0 && !$self->{in_pit_lane}
-                       && $self->track->{race_running}
                        && (!defined $self->{best_lap}
                                || $self->{best_lap} > $lap_time
                        )) {
@@ -186,11 +185,8 @@ sub set_order {
        $self->gui->set_fuel($self->{order}, $self->{fuel});
        $self->gui->set_car_id($self->{order}, $self->{id} + 1);
        $self->gui->set_distance($self->{order},
-               $self->{time_diff}, $self->{lap_diff});
-       $self->gui->set_state($self->{order}, $self->{state});
-       if ($self->{in_pit_lane}) {
-               $self->gui->enter_pit_lane;
-       }
+               $self->{time_diff}, $self->{lap_diff}, $self->{grey_diff});
+       $self->print_state;
 }
 
 sub print_state {
@@ -221,6 +217,8 @@ sub reset {
        $self->{first_finish_time} = undef;
        $self->{time_diff} = undef;
        $self->{lap_diff} = undef;
+       $self->{total_time} = undef;
+       $self->{grey_diff} = undef;
 }
 
 sub finish_line {
@@ -254,16 +252,19 @@ sub finish_line {
 }
 
 sub recalc_distance {
-       my ($self, $lap_first, $time_first) = @_;
+       my ($self, $lap_first, $time_first, $finishing) = @_;
 
        return if !defined $lap_first || !defined $self->{lap}
                || !defined $time_first || !defined $self->{first_finish_time};
 
-       my $time;
+       $self->{total_time} = undef;
+       $self->{lap_diff} = undef;
+       $self->{time_diff} = undef;
+       $self->{grey_diff} = undef;
 
        if ($self->{lap} == $lap_first) {
                if ($self->{first_finish_time} == $time_first) {
-                       $time = $self->{first_finish_time}
+                       $self->{total_time} = $self->{first_finish_time}
                                - $self->track->{race_running_since};
                } else {
                        $self->{time_diff} = $self->{first_finish_time}
@@ -273,9 +274,22 @@ sub recalc_distance {
                $self->{lap_diff} = $lap_first - $self->{lap};
        }
 
-       $self->gui->set_distance($self->{order}, $time,
-               $self->{lap_diff}, $self->{time_diff});
-       $self->{grey_diff} = undef;
+       $self->gui->set_distance($self->{order}, $self->{total_time},
+               $self->{lap_diff}, $self->{time_diff}, $self->{grey_diff});
+
+       if ($finishing) {
+               $self->{finished} = 1;
+               $self->print_state;
+       }
+}
+
+sub greyout_distance {
+       my ($self) = @_;
+
+       return if $self->{grey_diff};
+       $self->{grey_diff} = 1;
+       $self->gui->set_distance($self->{order}, $self->{total_time},
+               $self->{lap_diff}, $self->{time_diff}, $self->{grey_diff});
 }
 
 1;