Re: Removing a role

[email protected] (Nick Perez)
Newsgroups perl.moose
Message-ID <[email protected]>
On Fri, 10 Feb 2012 18:07:58 +0200
ynon perek <[email protected]> wrote:

> Is it also possible to remove a role from an instance ?

While it would seemingly make sense to (ab)use the roles/traits system
for something like this, it probably is a better idea to have an
attribute that contains a list of abilities that the instance could use
to determine its actions.

has abilities => (
  is => 'ro',
  traits => [qw/Hash/],
  isa => 'HashRef',
  default => sub { +{} },
  handles => {
    has_ability => 'exists',
    get_ability => 'get',
    set_ability => 'set',
  }
);

...

sub deal_damage {
  my ($self) = @_;
  return $self->base_damage + ($self->has_ability('Strong') ?
    $self->get_ability : 0);
}

# attack
$badguy->set_ability('Strong' => 5);
 
$target->receive_damage($badguy->deal_damage);


Doing it this way also makes it easier to serialize (like making save
file).


-- 

Nicholas Perez
XMPP/Email: [email protected]
http://search.cpan.org/~nperez/
http://github.com/nperez
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.