X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=SCX%2FCar.pm;h=8bb7bb9a00e8c5a1f15f596b19e0587dace11eeb;hb=d311baf05cce488606946a68ffee19980681030b;hp=e55676dc43b9dc0cc005fe10648107abfb1f3e63;hpb=e22f8cbb94df063c77cc9ee5f5bae839e252777d;p=slotcarman.git diff --git a/SCX/Car.pm b/SCX/Car.pm index e55676d..8bb7bb9 100644 --- a/SCX/Car.pm +++ b/SCX/Car.pm @@ -3,27 +3,28 @@ package SCX::Car; use strict; +use Time::HiRes qw(gettimeofday); sub new { my ($class, $args) = @_; my $self = { - gui => $args->{gui}, + gui => $args->{gui}, throttle => -1, - fuel => -1, - order => $args->{order}, + fuel => -1, + id => $args->{id}, + track => $args->{track}, }; bless $self, $class; - $self->set_throttle(undef); - $self->set_fuel(undef); - return $self; } sub gui { return shift->{gui}; } +sub track { return shift->{track}; } + sub set_throttle { my ($self, $val) = @_; @@ -55,5 +56,117 @@ sub set_backbutton { # TODO } +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; + $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; + $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 { + my ($self, $lap_time) = @_; + + 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 + )) { + + $self->{best_lap} = $lap_time; + my $global = $self->{track}->check_best_lap($lap_time, + $self->{driver} + ); + $self->gui->set_best_lap($self->{order}, $lap_time, + $global); + } + } else { + $self->gui->set_best_lap($self->{order}, '--'); + $self->{best_lap} = undef; + } + + return if (!defined $self->{laptime} && !defined $lap_time) + || (defined $self->{laptime} && defined $lap_time + && $self->{laptime} == $lap_time); + + $self->{laptime} = $lap_time; + + $self->gui->set_laptime($self->{order}, defined $lap_time + ? $lap_time : '--'); +} + +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_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_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} + ? $self->{lap} : '--'); + $self->gui->set_laptime($self->{order}, defined $self->{laptime} + ? $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}); +} + 1;