From 83c5f5f920656948d0528320c28150c618593ff6 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 2 Jun 2009 01:17:11 -0500 Subject: factor out the current player logic into a role --- lib/Bot/Games/Game/Role/CurrentPlayer.pm | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 lib/Bot/Games/Game/Role/CurrentPlayer.pm (limited to 'lib/Bot/Games/Game/Role') diff --git a/lib/Bot/Games/Game/Role/CurrentPlayer.pm b/lib/Bot/Games/Game/Role/CurrentPlayer.pm new file mode 100644 index 0000000..9fd8023 --- /dev/null +++ b/lib/Bot/Games/Game/Role/CurrentPlayer.pm @@ -0,0 +1,35 @@ +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; -- cgit v1.2.3-54-g00ecf