X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=SCX%2FCar.pm;h=5a1f90e7bb5b052653643d0e1b74c6870972f83d;hb=8f29704c1e17195a4e195872ed518dd6d2f0dd62;hp=683a2cc77f22023c40249438a2d29ff4136694bc;hpb=8709f4aa800632f00a54eeb2c85e20b38fe9f6fa;p=slotcarman.git diff --git a/SCX/Car.pm b/SCX/Car.pm index 683a2cc..5a1f90e 100644 --- a/SCX/Car.pm +++ b/SCX/Car.pm @@ -3,7 +3,6 @@ package SCX::Car; use strict; -use Time::HiRes qw(gettimeofday); sub new { my ($class, $args) = @_; @@ -16,7 +15,6 @@ sub new { fuel => 0, lap => 0, laptime => 0, - avg_lap => 0, car_img => $args->{car_img}, id => $args->{id}, track => $args->{track}, @@ -69,7 +67,23 @@ sub set_throttle { sub set_fuel { my ($self, $val) = @_; + my $prev = $self->{fuel}; return if $self->same('fuel', $val); + if (defined $val && defined $prev && $val < 8) { + if ($val == $prev + 1 && !$self->{in_pit_lane}) { + print STDERR $self->track->{now}, ' car ', + $self->{id}, ' missed pit lane entry', "\n"; + $self->enter_pit_lane; + } + if ($val == $prev - 1 && $val <= 2 && !$self->{in_pit_lane}) { + $self->track->{sound}->box($self->{id}); + } + } + if (defined $val && defined $prev && $val == 8 && $prev == 7 + && $self->{in_pit_lane}) { + $self->track->{sound}->filled($self->{id}); + } + $self->gui->set_fuel($self->{order}, $val); } @@ -92,9 +106,7 @@ 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; } @@ -109,10 +121,6 @@ sub set_lap { $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}, $self->{avg_lap}); } } @@ -120,8 +128,9 @@ sub set_laptime { my ($self, $lap_time) = @_; if (!defined $lap_time) { - $self->gui->set_best_lap($self->{order}, undef); $self->{best_lap} = undef; + $self->{global_best_lap} = undef; + $self->print_best_lap; } return if $self->same('laptime', $lap_time); @@ -136,10 +145,21 @@ sub set_laptime { return if defined $self->{best_lap} && $self->{best_lap} <= $lap_time; $self->{best_lap} = $lap_time; - my $global = $self->{track}->check_best_lap($lap_time, + $self->print_best_lap; + $self->{track}->notify_best_lap($self->{id}, $lap_time, $self->{driver}); +} - $self->gui->set_best_lap($self->{order}, $lap_time, $global); +sub print_best_lap { + my ($self) = @_; + $self->gui->set_best_lap($self->{order}, $self->{best_lap}, + $self->{global_best_lap}); +} + +sub set_global_best { + my ($self, $val) = @_; + + $self->{global_best_lap} = $val ? 1 : undef; } sub set_driver { @@ -178,13 +198,12 @@ sub set_order { $self->{button}); $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}, $self->{grey_diff}); $self->print_state; + $self->print_best_lap; } sub print_state { @@ -217,6 +236,7 @@ sub reset { $self->{lap_diff} = undef; $self->{total_time} = undef; $self->{grey_diff} = undef; + $self->print_state; } sub finish_line {