#!/usr/bin/perl -w package SCX::Car; use strict; sub new { my ($class, $args) = @_; my $self = { gui => $args->{gui}, throttle => -1, fuel => -1, order => $args->{order}, 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) = @_; return if (!defined $self->{throttle} && !defined $val) || (defined $self->{throttle} && defined $val && $self->{throttle} == $val); if ($self->{in_pit_lane} && defined $val && $val > 3) { delete $self->{in_pit_lane}; $self->gui->leave_pit_lane; } $self->{throttle} = $val; $self->gui->set_throttle($self->{order}, $val); } sub set_fuel { my ($self, $val) = @_; return if (!defined $self->{fuel} && !defined $val) || (defined $self->{fuel} && defined $val && $self->{fuel} == $val); $self->{fuel} = $val; $self->gui->set_fuel($self->{order}, $val); } sub set_light { # TODO } 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 : '--'); } 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_driver($self->{order}, $driver_name || '--'); } sub enter_pit_lane { my ($self) = @_; $self->{in_pit_lane} = 1; $self->gui->enter_pit_lane; } sub set_order { my ($self, $pos) = @_; $self->{order} = $pos; $self->gui->set_driver($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_fuel($self->{order}, $self->{fuel}); } 1;