package Games::Simutrans::Livery; # An abstraction of a Simutrans livery. Various objects (vehicles) # have liveries in Extended. It is possible that other objects # (stations, bridges, etc.) could have liveries in the future. use Mojo::Base -base, -signatures; use Mojo::Collection; ################ # ################ has 'name'; # Short name as used in a Simutrans dat file has 'description'; # Unused as yet? has 'intro'; # First observed introduction of this livery in the pakset has 'retire'; # and last retirement (both as year*12+month) has 'objects' => sub { Mojo::Collection->new() }; # names of objects in pakset using this livery sub record_use ($self, $obj) { # As a pakset is scanned, we record that this object (the # instance, not just the name of it) uses this livery. return if $obj->{is_permanent}; my $name = $obj->name; $self->intro($obj->intro) if (!defined $self->intro) || ($self->intro > $obj->intro); # find earliest $self->retire($obj->retire) if (!defined $self->retire) || ($self->retire < $obj->retire); # find last push @{$self->objects}, $obj->name; $self->objects($self->objects->uniq); } sub intro_year ($self) { return $self->intro / 12; } sub intro_month ($self) { return $self->intro % 12 + 1; } sub retire_year ($self) { return $self->retire / 12; } sub retire_month ($self) { return $self->retire % 12 + 1; } 1; __END__ =encoding utf-8 =head1 NAME Games::Simutrans::Livery - =head1 VERSION version 0.01 =head1 SYNOPSIS use Games::Simutrans::Livery; my $livery = Games::Simutrans::Livery->new(name => 'Erie'); my $object = Games::Simutrans::Pak->new; $object->from_string(...); $livery->record_use($object); say 'Used from ' . $livery->intro_year . ' to '. $livery->retire_year; =head1 DESCRIPTION =head1 METHODS =head2 record_use ($object) Records the usage of this livery by a given Simutrans object (assumed to be a L object or equivalent). Keeps track of the first introduction and last retirement dates of all objects using this livery. =head2 objects Returns a list of all object names (in the pakset) which were recorded as using this livery with L. =head2 intro_year, intro_month, retire_year, retire_month Return the year or month of the first or last observed use (introduction or retirment) of the livery =head1 ATTRIBUTES =head2 name Sets or returns the short name of the livery as used in Simutrans dat files. =head2 intro, retire These two values are the first and last observed uses of the livery, in the integer format C. =head1 AUTHOR William Lindley Ewlindley@wlindley.comE =head1 COPYRIGHT Copyright 2021, William Lindley =head1 LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L, L