Acme-Monkey
view release on metacpan or search on metacpan
lib/Acme/Monkey/Frame/Layer.pm view on Meta::CPAN
package Acme::Monkey::Frame::Layer;
use Moose;
use Term::ANSIColor qw(:constants);
has 'x' => (is=>'rw', isa=>'Int', default=>1);
has 'y' => (is=>'rw', isa=>'Int', default=>1);
has 'width' => (is=>'rw', isa=>'Int', required=>1);
has 'height' => (is=>'rw', isa=>'Int', required=>1);
has 'hidden' => (is=>'rw', isa=>'Int', default=>0);
has 'constrain' => (is=>'rw', isa=>'Int', default=>0);
has 'color' => (is=>'rw', isa=>'Str', default=>WHITE);
has '_canvas' => (is=>'rw', isa=>'ArrayRef', default=>\&clear, lazy=>1);
sub clear {
my ($self) = @_;
my $canvas = [];
foreach my $x (1..$self->width()) {
foreach my $y (1..$self->height()) {
$canvas->[$x]->[$y] = '';
}
}
$self->_canvas( $canvas );
return $canvas;
}
sub set {
my ($self, $x, $y, $string) = @_;
my $current_x = $x;
my $current_y = $y;
foreach my $char (split(//, $string)) {
if ($char eq "\n") {
$current_y ++;
$current_x = $x;
}
else {
$char = '' if ($char eq "\t");
$self->_canvas->[$current_x]->[$current_y] = $char;
$current_x ++;
}
}
}
sub get {
my ($self, $x, $y) = @_;
return '' if ($self->hidden());
return '' if ($x<1 or $y<1 or $x>$self->width() or $y>$self->height());
return $self->_canvas->[$x]->[$y] || '';
}
sub move_up {
my ($self, $shift) = @_;
$self->y( $self->y() - ($shift || 1) );
}
sub move_down {
my ($self, $shift) = @_;
$self->y( $self->y() + ($shift || 1) );
}
sub move_left {
my ($self, $shift) = @_;
$self->x( $self->x() - ($shift || 1) );
}
( run in 1.069 second using v1.01-cache-2.11-cpan-39bf76dae61 )