]> www.fi.muni.cz Git - slotcarman.git/blobdiff - SCX/Track.pm
Start semaphore tweaks.
[slotcarman.git] / SCX / Track.pm
index f6200de651989d50c18d85f64a503b99a77a1905..c75659282f57061f35e3002efb567482b213b732 100644 (file)
@@ -5,8 +5,11 @@ package SCX::Track;
 use strict;
 use Carp;
 
+use Glib qw(TRUE FALSE);
 use SCX::Car;
 
+our $SEMAPHORE_STEP = 1000;
+
 sub new {
        my ($class, $args) = @_;
 
@@ -31,8 +34,36 @@ sub car { return shift->{cars}->[shift]; }
 sub race_start {
        my ($self) = @_;
 
-       $self->{race_running} = 1;
+       return if $self->{race_running} || $self->{start_in_progress};
+       $self->{race_running} = 0;
+       $self->{start_in_progress} = 1;
+       $self->{semaphore} = 0;
+       $self->{gui}->show_semaphore(0);
+       Glib::Timeout->add($SEMAPHORE_STEP, \&semaphore_step, $self);
+}
 
+sub semaphore_step {
+       my ($self) = @_;
+
+       return if !$self->{start_in_progress} && !$self->{race_running};
+
+       $self->{semaphore}++;
+       if ($self->{semaphore} <= 5) {
+               $self->{gui}->show_semaphore($self->{semaphore});
+               my $timeout = $SEMAPHORE_STEP;
+               $timeout += $SEMAPHORE_STEP * rand()
+                       if $self->{semaphore} == 5;
+               Glib::Timeout->add($timeout, \&semaphore_step, $self);
+       } elsif ($self->{semaphore} == 6) {
+               $self->{race_running} = 1;
+               $self->{start_in_progress} = undef;
+               $self->{gui}->show_semaphore(0);
+               Glib::Timeout->add(3*$SEMAPHORE_STEP, \&semaphore_step, $self);
+       } else {
+               $self->{gui}->show_semaphore(undef);
+               $self->{semaphore} = undef;
+       }
+       return FALSE;
 }
 
 sub race_end {
@@ -41,5 +72,6 @@ sub race_end {
        $self->{race_running} = 0;
 }
 
+
 1;