$self->{fuel_images} = [
load_image_set('img/fuel%d.svg', 8, int(0.6 * $h))
];
- $self->{car_images} = load_image_dir('img/SCXCars', $h),
- $self->{semaphore_images} => [
- load_image_set('img/semaphore%d.svg', 5, 2 * $h)
+ $self->{car_images} = load_image_dir('img/SCXCars', $h);
+ $self->{semaphore_images} = [
+ load_image_set('img/semaphore%d.svg', 5, 1.5 * $h)
];
};
sub set_image {
my ($self, $prefix, $row, $imgset, $value) = @_;
+ return if !defined $value;
+
++$row if defined $row && $row =~ /\A\d+\z/xms;
my $name = defined $row ? $prefix.$row : $prefix;
sub set_lap {
my ($self, $row, $text) = @_;
+ $text = '--' if !defined $text;
+
$self->set_label('label_lap', $row, $text, 'lap');
}
+sub set_distance {
+ my ($self, $row, $time, $lap_diff, $time_diff) = @_;
+
+ my $text = '--';
+
+ if (defined $time) {
+ $text = format_race_time($time);
+ } elsif (defined $time_diff) {
+ $text = '−' . format_lap_time($time_diff);
+ } elsif (defined $lap_diff) {
+ $text = '−' . $lap_diff . ' laps';
+ }
+
+ $self->set_label('label_distance', $row, $text);
+}
+
sub set_laptime {
my ($self, $row, $text) = @_;
- $self->set_label('label_laptime', $row, $text);
+ $self->set_label('label_laptime', $row, format_lap_time($text));
}
sub set_avg_lap {
my ($self, $row, $text) = @_;
- $self->set_label('label_avg_lap', $row, $text);
+ $self->set_label('label_avg_lap', $row, format_lap_time($text));
}
sub set_best_lap {
my ($self, $row, $text) = @_;
- $self->set_label('label_best_lap', $row, $text);
+ $self->set_label('label_best_lap', $row, format_lap_time($text));
}
sub set_name {
$self->set_label('label_name', $row, $text);
}
+sub set_car_id {
+ my ($self, $row, $text) = @_;
+
+ $self->set_label('label_car_id', $row, $text);
+}
+
sub enter_pit_lane {
my ($self, $row) = @_;
- $self->set_laptime($row, 'PIT');
+ $self->set_label('label_laptime', $row, 'PIT');
}
sub leave_pit_lane {
my ($self, $row) = @_;
- $self->set_laptime($row, 'GO!');
+
+ $self->set_label('label_laptime', $row, 'GO!');
}
sub show_semaphore {
sub time {
my ($self, $text) = @_;
- $self->set_label('label_time_global', undef, $text);
+ $self->set_label('label_time_global', undef, format_race_time($text));
}
sub best_lap {
my ($self, $time, $who) = @_;
- my $text = $time;
+ my $text = format_lap_time($time);
$text .= ' by ' . $who
if defined $who;
$self->set_label('label_best_lap_global', undef, $text);
}
+sub format_race_time {
+ my ($seconds) = @_;
+
+ return '--' if !defined $seconds;
+
+ my $hours = int($seconds / 3600);
+ $seconds -= 3600 * $hours;
+
+ my $mins = int($seconds / 60);
+ $seconds -= 60 * $mins;
+
+ return $hours
+ ? sprintf('%d:%02d:%04.1f', $hours, $mins, $seconds)
+ : sprintf('%d:%04.1f', $mins, $seconds);
+}
+
+sub format_lap_time {
+ my ($seconds) = @_;
+
+ return defined $seconds
+ ? sprintf('%.2f', $seconds)
+ : '--';
+}
+
1;