WWW::DaysOfWonder::Memoir44::Scenario - scenario object


WWW-DaysOfWonder-Memoir44 documentation Contained in the WWW-DaysOfWonder-Memoir44 distribution.

Index


Code Index:

NAME

Top

WWW::DaysOfWonder::Memoir44::Scenario - scenario object

VERSION

Top

version 2.110310

DESCRIPTION

Top

This module represents a scenario with all its attributes. It implements MooseX::Storage role, and therefore methods pack() and unpack() are available.

ATTRIBUTES

Top

my $int = $scenario->id;

Id of the scenario.

my $str = $scenario->name;

Name of the scenario.

my $str = $scenario->operation;

Operation the scenario is part of.

my $date = $scenario->updated;

Date of last scenario update (format yyyy-mm-dd).

my $int = $scenario->rating;

Average scenario rating (1, 2 or 3).

my $str = $scenario->front;

Front where the scenario takes place. Can be West, East, Mediterranean, etc.

my $str = $scenario->author;

Who wrote the scenario.

my $str = $scenario->board;

Country, beach, winter or desert.

my $str = $scenario->format;

Standard, overlord or breakthru.

my $str = $scenario->source;

Game (bundled with board game), approved (official extensions), public (all the other).

my $bool = $scenario->need_tp;

Whether terrain pack extension is needed.

my $bool = $scenario->need_ef;

Whether eastern front extension is needed.

my $bool = $scenario->need_mt;

Whether mediterranean theater extension is needed.

my $bool = $scenario->need_pt;

Whether pacific theater extension is needed.

my $bool = $scenario->need_ap;

Whether air pack extension is needed.

my $bool = $scenario->need_bm;

Whether battle maps extension is needed.

my $bool = $scenario->need_cb;

Whether campaign book extension is needed.

METHODS

Top

as_string

    my $str = $scenario->as_string;

Return a line (with a final \n) dumping the scenario and all its attributes. It is also the method called for stringification, eg when doing stuff like:

    print $scenario;

tp

ef

pt

mt

ap

    my $str = $scenario->tp;
    my $str = $scenario->ef;
    my $str = $scenario->pt;
    my $str = $scenario->mt;
    my $str = $scenario->ap;

Those five methods return either an empty string or the abbreviation of the expansion depending on the value of the need_XX boolean attribute of the $scenario. They are useful for display purposes.

rating_as_star

    my $str = $scenario->rating_as_star;

Return a string of 0 to 3 stars * depending on the rating attribute of the $scenario.

AUTHOR

Top

  Jerome Quelin

COPYRIGHT AND LICENSE

Top


WWW-DaysOfWonder-Memoir44 documentation Contained in the WWW-DaysOfWonder-Memoir44 distribution.

#
# This file is part of WWW-DaysOfWonder-Memoir44
#
# This software is copyright (c) 2009 by Jerome Quelin.
#
# This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
#
use 5.012;
use strict;
use warnings;

package WWW::DaysOfWonder::Memoir44::Scenario;
BEGIN {
  $WWW::DaysOfWonder::Memoir44::Scenario::VERSION = '2.110310';
}
# ABSTRACT: scenario object

use Moose;
use MooseX::Has::Sugar;
use Text::Padding;

use overload q{""} => 'as_string';


# -- public attributes


has id        => ( rw, isa=>'Int', required );
has name      => ( rw, isa=>'Str', required );
has operation => ( rw, isa=>'Str' );
has updated   => ( rw, isa=>'Str', required );
has rating    => ( rw, isa=>'Int' );
has front     => ( rw, isa=>'Str' );
has author    => ( rw, isa=>'Str' );
has board     => ( rw, isa=>'Str' );
has format    => ( rw, isa=>'Str' );
has source    => ( rw, isa=>'Str' );
has need_tp   => ( rw, isa=>'Bool' );
has need_ef   => ( rw, isa=>'Bool' );
has need_mt   => ( rw, isa=>'Bool' );
has need_pt   => ( rw, isa=>'Bool' );
has need_ap   => ( rw, isa=>'Bool' );
has need_bm   => ( rw, isa=>'Bool' );
has need_cb   => ( rw, isa=>'Bool' );



# -- public methods


sub as_string {
    my $s = shift;

    my $out = join " ", qw{
        R6id. L38name L34operation
        C13front C8format C7board
        C12author C10source L10updated C3rating_as_star
        L2tp L2ef L2pt L2mt L2ap
    };
    $out =~ s/([RCL])(\d+)(\w+)/$s->_format($1,$2,$3)/eg;
    return $out;
}


sub rating_as_star { my $s=shift; '*'x$s->rating; }
sub tp { my $s=shift; $s->need_tp ? 'tp' : ''; }
sub ef { my $s=shift; $s->need_ef ? 'ef' : ''; }
sub pt { my $s=shift; $s->need_pt ? 'pt' : ''; }
sub mt { my $s=shift; $s->need_mt ? 'mt' : ''; }
sub ap { my $s=shift; $s->need_ap ? 'ap' : ''; }


# -- private methods

# $pad should not be re-created for each display
my $pad = Text::Padding->new;
sub _format {
    my ($self, $align, $maxlength, $method) = @_;
    my $str = $self->$method;

    # fill up according to the requirements
    given ( $align ) {
        when ( "L" ) { return $pad->left  ($str, $maxlength); }
        when ( "R" ) { return $pad->right ($str, $maxlength); }
        when ( "C" ) { return $pad->center($str, $maxlength); }
    }
}

1;



__END__