package Bot::Games::Game::Role::CurrentPlayer; use Bot::Games::OO::Game::Role; requires 'players', 'num_players'; has current_player => ( is => 'rw', isa => 'Str', predicate => 'has_current_player', command => 1, ); command previous_player => sub { my $self = shift; return unless $self->has_current_player; return $self->players->[$self->current_player_index - 1]; }; command next_player => sub { my $self = shift; return unless $self->has_current_player; return $self->players->[($self->current_player_index + 1) % $self->num_players]; }; sub current_player_index { my $self = shift; for (0..($self->num_players - 1)) { return $_ if $self->current_player eq $self->players->[$_]; } return 0; } no Bot::Games::OO::Game::Role; 1;