Games::RailRoad::Train - a train object


Games-RailRoad documentation Contained in the Games-RailRoad distribution.

Index


Code Index:

NAME

Top

Games::RailRoad::Train - a train object

VERSION

Top

version 1.101330

DESCRIPTION

Top

This class models a train object that moves on the rails.

ATTRIBUTES

Top

from

The node from where the train is coming (a Games::RailRoad::Vector object).

to

The node where the train is headed (a Games::RailRoad::Vector object).

frac

A number between 0 and 1 indicating where exactly the train is between its from and to nodes.

METHODS

Top

my $train = Games::RailRoad::Train->new( \%opts );

Create and return a new train object. One can pass a hash reference with the available attributes.

$train->draw( $canvas, $tilelen );

Request $train to draw itself on $canvas, assuming that each square has a length of $tilelen.

AUTHOR

Top

  Jerome Quelin

COPYRIGHT AND LICENSE

Top


Games-RailRoad documentation Contained in the Games-RailRoad distribution.

# 
# This file is part of Games-RailRoad
# 
# This software is copyright (c) 2008 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.010;
use strict;
use warnings;

package Games::RailRoad::Train;
BEGIN {
  $Games::RailRoad::Train::VERSION = '1.101330';
}
# ABSTRACT: a train object

use Moose;
use MooseX::Has::Sugar;
use MooseX::SemiAffordanceAccessor;

use Games::RailRoad::Types qw{ Num_0_1 };


# -- attributes


has from => ( rw, isa=>'Games::RailRoad::Vector' );
has to   => ( rw, isa=>'Games::RailRoad::Vector' );
has frac => ( rw, isa=>Num_0_1 );


# -- constructor & initializers


# provided by moose


# -- public methods


sub draw {
    my ($self, $canvas, $tilelen) = @_;
    my $from = $self->from;
    my $to   = $self->to;
    my $frac = $self->frac;

    my $diag = 2;
    my $colf = $from->posx; my $rowf = $from->posy;
    my $colt =   $to->posx; my $rowt =   $to->posy;
    $canvas->delete("$self");
    my $x = ( $colf + ($colt-$colf) * $frac ) * $tilelen;
    my $y = ( $rowf + ($rowt-$rowf) * $frac ) * $tilelen;
    $canvas->createOval(
        $x - $diag, $y - $diag,
        $x + $diag, $y + $diag,
        -fill => 'blue',
        -tags => [ "$self" ],
    );
}


# -- private methods


1;



__END__