X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=SCX%2FCar.pm;h=75aa503c49167763e89eca986f2691f87ee1ca31;hb=39fe205a0db4c322660e0fbf7c54d4dad8f6ed40;hp=f4a38a0436b258016b5e38e68db07e05f9dde1dc;hpb=b2e460537776f9b9de508c28b8e769cf8e80c30d;p=slotcarman.git diff --git a/SCX/Car.pm b/SCX/Car.pm index f4a38a0..75aa503 100644 --- a/SCX/Car.pm +++ b/SCX/Car.pm @@ -3,23 +3,26 @@ package SCX::Car; use strict; +use Time::HiRes qw(gettimeofday); sub new { my ($class, $args) = @_; my $self = { - gui => $args->{gui}, - throttle => -1, - fuel => -1, - order => $args->{order}, - track => $args->{track}, + gui => $args->{gui}, + driver => $args->{driver} || '--', + throttle => undef, + fuel => 0, + lap => 0, + laptime => 0, + avg_lap => 0, + car_img => $args->{car_img}, + id => $args->{id}, + track => $args->{track}, }; bless $self, $class; - $self->set_throttle(undef); - $self->set_fuel(undef); - return $self; } @@ -27,19 +30,26 @@ sub gui { return shift->{gui}; } sub track { return shift->{track}; } +sub same { + my ($self, $key, $val) = @_; + + return 1 if !defined $self->{$key} && !defined $val + || (defined $self->{$key} && defined $val + && $self->{$key} eq $val); + + $self->{$key} = $val; + return undef; +} + sub set_throttle { my ($self, $val) = @_; - return if (!defined $self->{throttle} && !defined $val) - || (defined $self->{throttle} && defined $val - && $self->{throttle} == $val); + return if $self->same('throttle', $val); - if ($self->{in_pit_lane} && defined $val && $val > 3) { - delete $self->{in_pit_lane}; - $self->gui->leave_pit_lane; + if ($self->track->{start_in_progress} && $val) { + $self->{early_start} = 1; + $self->gui->set_driver('Early start!'); } - - $self->{throttle} = $val; $self->gui->set_throttle($self->{order}, $val); } @@ -47,11 +57,7 @@ sub set_throttle { sub set_fuel { my ($self, $val) = @_; - return if (!defined $self->{fuel} && !defined $val) - || (defined $self->{fuel} && defined $val - && $self->{fuel} == $val); - - $self->{fuel} = $val; + return if $self->same('fuel', $val); $self->gui->set_fuel($self->{order}, $val); } @@ -66,23 +72,24 @@ sub set_backbutton { sub set_model { my ($self, $name) = @_; - return if (!defined $self->{car_icon} && !defined $name) - || (defined $self->{car_icon} && defined $name - && $self->{car_icon} eq $name); - - $self->{car_icon} = $name; + return if $self->same('car_img', $name); $self->gui->set_car_icon($self->{order}, $name); } sub set_lap { my ($self, $lap_nr) = @_; - return if (!defined $self->{lap} && !defined $lap_nr) - || (defined $self->{lap} && defined $lap_nr - && $self->{lap} == $lap_nr); - - $self->{lap} = $lap_nr; + return if $self->same('lap', $lap_nr); $self->gui->set_lap($self->{order}, defined $lap_nr ? $lap_nr : '--'); + if ($self->track->{race_running} && $self->{lap} > 1) { + my $now = gettimeofday; + 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}, '--'); + } } sub set_laptime { @@ -90,9 +97,9 @@ sub set_laptime { if (defined $lap_time) { $lap_time = sprintf("%.2f", $lap_time); - if ($lap_time > 1.0 && ( - !$self->{in_pit_lane} && !defined $self->{best_lap} - || $self->{best_lap} > $lap_time + if ($lap_time > 1.0 && !$self->{in_pit_lane} + && (!defined $self->{best_lap} + || $self->{best_lap} > $lap_time )) { $self->{best_lap} = $lap_time; @@ -102,7 +109,6 @@ sub set_laptime { $self->gui->set_best_lap($self->{order}, $lap_time, $global); } - } else { $self->gui->set_best_lap($self->{order}, '--'); $self->{best_lap} = undef; @@ -121,28 +127,34 @@ sub set_laptime { sub set_driver { my ($self, $driver_name) = @_; - return if (!defined $self->{driver} && !defined $driver_name) - || (defined $self->{driver} && defined $driver_name - && $self->{driver} == $driver_name); - - $self->{driver} = $driver_name; - $self->gui->set_driver($self->{order}, $driver_name || '--'); + return if $self->same('driver', $driver_name); + $self->gui->set_name($self->{order}, $driver_name); } sub enter_pit_lane { my ($self) = @_; + return if $self->{in_pit_lane}; + $self->{in_pit_lane} = 1; $self->gui->enter_pit_lane; } +sub leave_pit_lane { + my ($self) = @_; + + return if !$self->{in_pit_lane}; + + $self->{in_pit_lane} = 0; + $self->gui->leave_pit_lane; +} + sub set_order { my ($self, $pos) = @_; $self->{order} = $pos; - $self->gui->set_driver($self->{order}, $self->{driver} - || '--'); + $self->gui->set_name($self->{order}, $self->{driver}); $self->gui->set_car_icon($self->{order}, $self->{car_icon}); $self->gui->set_throttle($self->{order}, $self->{throttle}); $self->gui->set_lap($self->{order}, defined $self->{lap} @@ -151,6 +163,8 @@ sub set_order { ? $self->{laptime} : '--'); $self->gui->set_best_lap($self->{order}, defined $self->{best_lap} ? $self->{best_lap} : '--'); + $self->gui->set_avg_lap($self->{order}, defined $self->{avg_lap} + ? $self->{avg_lap} : '--'); $self->gui->set_fuel($self->{order}, $self->{fuel}); }