package GEmeTool::Save::PokemonPC; use v5.16.3; use strict; use warnings; use Moo; use Rsaves; use GEmeTool::Save::PokemonBox; has _pc => ( is => 'rw', required => 1, ); has _save => ( is => 'rw', required => 1, ); has _boxes => ( is => 'rw', ); sub boxes { my $self = shift; my $pc = $self->_pc; my @boxes; for ( my $i = 0 ; $i < 14 ; $i++ ) { $boxes[$i] = $self->get_box($i); } return \@boxes; } sub get_box { my $self = shift; my $number = shift; my $boxes = $self->_boxes; if (!defined $boxes) { $self->_boxes([]); $boxes = $self->_boxes; } if ($number < 0 || $number > 13) { die "Bad box number $number."; } if (defined $boxes->[$number]) { return $boxes->[$number]; } my $pc = $self->_pc; my $wallpaper = \$pc->{wallpapers}[$number]; my $name = \$pc->{boxes_names}[$number]; my $box = $pc->{boxes}[$number]; my $return = GEmeTool::Save::PokemonBox->new( _wallpaper => $wallpaper, _name => $name, _box => $box ); $boxes->[$number] = $return; return $return; } sub save { my $self = shift; $self->_save->($self->_pc); } 1;