From e85448fbe0a0384457115dc91638aa773fd9c5c0 Mon Sep 17 00:00:00 2001 From: "Jan \"Yenya\" Kasprzak" Date: Thu, 9 Dec 2010 17:53:06 +0100 Subject: [PATCH] Race state images; misc fixes. --- SCX/Car.pm | 24 +- SCX/GUI.pm | 26 +-- SCX/Track.pm | 2 +- gui.pl | 13 +- img/pit-go.svg | 321 --------------------------- img/state-disqualified.svg | 123 ++++++++++ img/state-finished.svg | 242 ++++++++++++++++++++ img/state-go.svg | 232 +++++++++++++++++++ img/state-greenflag.svg | 123 ++++++++++ img/{pit-stop.svg => state-stop.svg} | 0 10 files changed, 763 insertions(+), 343 deletions(-) delete mode 100644 img/pit-go.svg create mode 100644 img/state-disqualified.svg create mode 100644 img/state-finished.svg create mode 100644 img/state-go.svg create mode 100644 img/state-greenflag.svg rename img/{pit-stop.svg => state-stop.svg} (100%) diff --git a/SCX/Car.pm b/SCX/Car.pm index 9f58b5b..31149a2 100644 --- a/SCX/Car.pm +++ b/SCX/Car.pm @@ -16,6 +16,7 @@ sub new { lap => 0, laptime => 0, avg_lap => 0, + state => 'greenflag', car_img => $args->{car_img}, id => $args->{id}, order => $args->{id}, @@ -149,7 +150,7 @@ sub enter_pit_lane { return if $self->{in_pit_lane}; $self->{in_pit_lane} = 1; - $self->gui->enter_pit_lane($self->{order}); + $self->print_state; } sub leave_pit_lane { @@ -158,7 +159,7 @@ sub leave_pit_lane { return if !$self->{in_pit_lane}; $self->{in_pit_lane} = 0; - $self->gui->leave_pit_lane($self->{order}); + $self->print_state; } sub set_order { @@ -177,11 +178,30 @@ sub set_order { $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; } } +sub print_state { + my ($self) = @_; + + if ($self->{in_pit_lane}) { + $self->{state} = 'pit'; + } elsif ($self->{running}) { + $self->{state} = 'go'; + } elsif ($self->{finished}) { + $self->{state} = 'finished'; + } elsif ($self->{early_start}) { + $self->{state} = 'disqualified'; + } else { + $self->{state} = 'greenflag'; + } + + $self->gui->set_state($self->{order}, $self->{state}); +} + sub reset { my ($self) = @_; diff --git a/SCX/GUI.pm b/SCX/GUI.pm index 2f1aa5a..da3f9f4 100755 --- a/SCX/GUI.pm +++ b/SCX/GUI.pm @@ -113,7 +113,8 @@ sub load_all_images { $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->{car_images} = load_images_glob('img/SCXCars/*', $h); + $self->{state_images} = load_images_glob('img/state*.svg', $h); $self->{semaphore_images} = [ load_image_set('img/semaphore%d.svg', 5, 1.5 * $h) ]; @@ -135,11 +136,11 @@ sub load_image_set { return @rv; } -sub load_image_dir { - my ($dir, $height) = @_; +sub load_images_glob { + my ($glob, $height) = @_; my %rv; - for my $file (<$dir/*>) { + for my $file (glob($glob)) { $file = Encode::decode('utf-8', $file); my $name = $file; $name =~ s/.*\///; @@ -265,17 +266,6 @@ sub set_car_id { $self->set_label('label_car_id', $row, $text); } -sub enter_pit_lane { - my ($self, $row) = @_; - $self->set_label('label_laptime', $row, 'PIT'); -} - -sub leave_pit_lane { - my ($self, $row) = @_; - - $self->set_label('label_laptime', $row, 'GO!'); -} - sub show_semaphore { my ($self, $num) = @_; @@ -335,5 +325,11 @@ sub format_lap_time { : '--'; } +sub set_state { + my ($self, $num, $name) = @_; + + $self->set_image('image_status', $num, 'state', 'state '.$name); +} + 1; diff --git a/SCX/Track.pm b/SCX/Track.pm index 2feed61..c5d4640 100644 --- a/SCX/Track.pm +++ b/SCX/Track.pm @@ -188,7 +188,7 @@ sub recalc_order { } (0..5); my $lap_max = $laps[$new_order[0]]; - if (defined $lap_max && $lap_max != $self->{round} + if (defined $lap_max && $self->{round} && $lap_max != $self->{round} && (!$self->{race_rounds} || $lap_max <= $self->{race_rounds})) { $self->{round} = $lap_max; diff --git a/gui.pl b/gui.pl index acdb94f..85b994d 100755 --- a/gui.pl +++ b/gui.pl @@ -50,7 +50,12 @@ if ($reader) { $track->{race_running_since} = $now; $track->{race_running} = 1; - $track->car(0)->finish_line($now + 2.5, 1); + $track->finish_line($now + 0.5, 1, 2); + $track->finish_line($now + 0.7, 1, 1); + $track->finish_line($now + 4.9, 1, 1); + $track->finish_line($now + 5.3, 1, 2); + $track->finish_line($now + 7.2, 1, 1); + $track->finish_line($now + 8.1, 0, 2); # $track->car(0)->set_lap(13); # $track->car(1)->set_lap(11); # $track->car(2)->set_lap(10); @@ -58,9 +63,9 @@ if ($reader) { # $track->car(4)->set_lap(undef); # $track->car(5)->set_lap(undef); -# $track->car(0)->set_laptime(9.12322); -# $track->car(1)->set_laptime(15.313); -# $track->car(2)->set_laptime(5.989); + $track->car(0)->set_laptime(9.12322); + $track->car(1)->set_laptime(15.313); + $track->car(2)->set_laptime(5.989); $track->car(0)->set_fuel(6); $track->car(1)->set_fuel(2); diff --git a/img/pit-go.svg b/img/pit-go.svg deleted file mode 100644 index 0a1e79c..0000000 --- a/img/pit-go.svg +++ /dev/null @@ -1,321 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - GO! - - diff --git a/img/state-disqualified.svg b/img/state-disqualified.svg new file mode 100644 index 0000000..a78967a --- /dev/null +++ b/img/state-disqualified.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/img/state-finished.svg b/img/state-finished.svg new file mode 100644 index 0000000..a45fba6 --- /dev/null +++ b/img/state-finished.svg @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/state-go.svg b/img/state-go.svg new file mode 100644 index 0000000..e959d97 --- /dev/null +++ b/img/state-go.svg @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/img/state-greenflag.svg b/img/state-greenflag.svg new file mode 100644 index 0000000..0644a0f --- /dev/null +++ b/img/state-greenflag.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/img/pit-stop.svg b/img/state-stop.svg similarity index 100% rename from img/pit-stop.svg rename to img/state-stop.svg -- 2.43.0