avg_lap => 0,
car_img => $args->{car_img},
id => $args->{id},
+ order => $args->{id},
track => $args->{track},
};
}
sub set_throttle {
- my ($self, $val) = @_;
+ my ($self, $val, $time) = @_;
return if $self->same('throttle', $val);
if ($self->track->{start_in_progress} && $val) {
$self->{early_start} = 1;
- $self->gui->set_driver('Early start!');
+ $self->gui->set_name($self->{order}, 'Early start!');
}
- if ($self->{in_pit_lane} && defined $val && $val > 3) {
- $self->leave_pit_lane;
+ if ($self->{in_pit_lane} && defined $val) {
+ $self->{last_finish_time} = $time;
+ if ($val > 3) {
+ $self->leave_pit_lane;
+ }
}
$self->gui->set_throttle($self->{order}, $val);
sub set_lap {
my ($self, $lap_nr) = @_;
+ if (!$lap_nr) {
+ $self->{avg_lap} = undef;
+ $self->{lap} = $lap_nr;
+ $self->gui->set_avg_lap($self->{order}, undef);
+ $self->gui->set_lap($self->{order}, $lap_nr);
+ return;
+ }
+
return if $self->same('lap', $lap_nr);
- $self->gui->set_lap($self->{order}, defined $lap_nr ? $lap_nr : '--');
+ $self->gui->set_lap($self->{order}, $lap_nr);
if ($self->track->{race_running} && $self->{lap} > 1) {
my $now = $self->{last_finish_time};
my $avg = ($now - $self->track->{race_running_since})
/ ($self->{lap} - 1);
$self->{avg_lap} = $avg;
- $self->gui->set_avg_lap($self->{order}, $avg);
- } else {
- $self->gui->set_avg_lap($self->{order}, undef);
+ $self->gui->set_avg_lap($self->{order}, $self->{avg_lap});
}
}
sub set_laptime {
my ($self, $lap_time) = @_;
+ if (!defined $lap_time) {
+ $self->gui->set_best_lap($self->{order}, undef);
+ $self->{best_lap} = undef;
+ }
+
return if $self->same('laptime', $lap_time);
$self->gui->set_laptime($self->{order}, $lap_time);
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
)) {
$self->gui->set_best_lap($self->{order}, $lap_time,
$global);
}
- } else {
- $self->gui->set_best_lap($self->{order}, $lap_time);
- $self->{best_lap} = undef;
}
}
return if $self->{in_pit_lane};
$self->{in_pit_lane} = 1;
- $self->gui->enter_pit_lane;
+ $self->gui->enter_pit_lane($self->{order});
}
sub leave_pit_lane {
return if !$self->{in_pit_lane};
$self->{in_pit_lane} = 0;
- $self->gui->leave_pit_lane;
+ $self->gui->leave_pit_lane($self->{order});
}
sub set_order {
$self->{order} = $pos;
$self->gui->set_name($self->{order}, $self->{driver});
- $self->gui->set_car_icon($self->{order}, $self->{car_icon});
+ $self->gui->set_car_icon($self->{order}, $self->{car_img});
$self->gui->set_throttle($self->{order}, $self->{throttle});
$self->gui->set_lap($self->{order}, $self->{lap});
$self->gui->set_laptime($self->{order}, $self->{laptime});
$self->gui->set_best_lap($self->{order}, $self->{best_lap});
$self->gui->set_avg_lap($self->{order}, $self->{avg_lap});
$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});
if ($self->{in_pit_lane}) {
$self->gui->enter_pit_lane;
}
$self->set_laptime(undef);
$self->{in_pit_lane} = 0;
$self->{early_start} = undef;
+ $self->{last_finish_time} = undef;
+ $self->{first_finish_time} = undef;
+ $self->{time_diff} = undef;
+ $self->{lap_diff} = undef;
}
sub finish_line {
my ($self, $time, $regular) = @_;
- return undef
- if defined $self->{last_finish_time}
- && $time - $self->{last_finish_time} < 2;
+ if (defined $self->{last_finish_time}
+ && $time - $self->{last_finish_time} < 2) {
+
+ $self->{last_finish_time} = $time;
+ if ($regular && $self->{in_pit_lane}) {
+ $self->leave_pit_lane;
+ }
+ return undef;
+ }
if ($regular) {
- if (defined $self->{last_finish_time}) {
- $self->set_laptime($time - $self->{last_finish_time});
+ if (defined $self->{first_finish_time}) {
+ $self->set_laptime($time - $self->{first_finish_time});
}
} else {
$self->enter_pit_lane;
}
- $self->{last_finish_time} = $time;
- $self->set_lap(++$self->{lap});
+ $self->{first_finish_time} = $self->{last_finish_time} = $time;
+
+ if ($self->track->{race_running}) {
+ $self->set_lap($self->{lap} + 1);
+ }
return 1;
}
+sub recalc_distance {
+ my ($self, $lap_first, $time_first) = @_;
+
+ return if !defined $lap_first || !defined $self->{lap}
+ || !defined $time_first || !defined $self->{first_finish_time};
+
+ my $time;
+
+ if ($self->{lap} == $lap_first) {
+ if ($self->{first_finish_time} == $time_first) {
+ $time = $self->{first_finish_time}
+ - $self->track->{race_running_since};
+ } else {
+ $self->{time_diff} = $self->{first_finish_time}
+ - $time_first;
+ }
+ } else {
+ $self->{lap_diff} = $lap_first - $self->{lap};
+ }
+
+ $self->gui->set_distance($self->{order}, $time,
+ $self->{lap_diff}, $self->{time_diff});
+}
+
1;