Games-SolarConflict

 view release on metacpan or  search on metacpan

lib/Games/SolarConflict/Controller/MainMenu.pm  view on Meta::CPAN

package Games::SolarConflict::Controller::MainMenu;
{
  $Games::SolarConflict::Controller::MainMenu::VERSION = '0.000001';
}

# ABSTRACT: Main menu controller

use strict;
use warnings;
use Mouse;
use SDL::Event;
use SDL::Events;
use SDLx::Text;

with 'Games::SolarConflict::Roles::Controller';

has title => (
    is      => 'ro',
    isa     => 'SDLx::Text',
    builder => '_build_title',
);

sub _build_title {
    my ($self) = @_;

    return SDLx::Text->new(
        color   => 0xAAAAAAFF,
        size    => 96,
        font    => $self->game->font,
        text    => 'Solar Conflict',
        h_align => 'center',
        x       => $self->game->app->w / 2,
        y       => 50,
    );
}

sub handle_show {
    my ( $self, $delta, $app ) = @_;

    $app->draw_rect( [ 0, 0, $app->w, $app->h ], 0x000000FF );
    $self->game->background->blit( $app, [ 0, 0, $app->w, $app->h ] );

    $self->title->write_to($app);

    $app->draw_gfx_text( [ 400, 210 ],
        0xFFFFFFFF, 'Press 1 for single player' );
    $app->draw_gfx_text( [ 400, 220 ], 0xFFFFFFFF, 'Press 2 for two player' );

    my ( $x1, $y1 ) = ( 300, 300 );

    $app->draw_gfx_text( [ $x1, $y1 ], 0xFFFFFFFF, 'Player 1' );
    $self->game->spaceship1->sprite->draw_xy( $app, $x1, $y1 + 10 );
    $app->draw_gfx_text( [ $x1, $y1 + 40 ], 0xFFFFFFFF, 'Q - Fire Torpedo' );
    $app->draw_gfx_text( [ $x1, $y1 + 50 ], 0xFFFFFFFF, 'W - Accelerate' );
    $app->draw_gfx_text( [ $x1, $y1 + 60 ], 0xFFFFFFFF, 'A - Rotate CCW' );
    $app->draw_gfx_text( [ $x1, $y1 + 70 ], 0xFFFFFFFF, 'D - Rotate CW' );
    $app->draw_gfx_text( [ $x1, $y1 + 80 ], 0xFFFFFFFF, 'S - Hyperspace' );

    my ( $x2, $y2 ) = ( 600, 300 );

    $app->draw_gfx_text( [ $x2, $y2 + 00 ], 0xFFFFFFFF, 'Player 2' );
    $self->game->spaceship2->sprite->draw_xy( $app, $x2, $y2 + 10 );
    $app->draw_gfx_text( [ $x2, $y2 + 40 ], 0xFFFFFFFF, 'U - Fire Torpedo' );
    $app->draw_gfx_text( [ $x2, $y2 + 50 ], 0xFFFFFFFF, 'I - Accelerate' );
    $app->draw_gfx_text( [ $x2, $y2 + 60 ], 0xFFFFFFFF, 'J - Rotate CCW' );
    $app->draw_gfx_text( [ $x2, $y2 + 70 ], 0xFFFFFFFF, 'L - Rotate CW' );
    $app->draw_gfx_text( [ $x2, $y2 + 80 ], 0xFFFFFFFF, 'K - Hyperspace' );
    $app->update();
}

sub handle_event {
    my ( $self, $event, $app ) = @_;

    if ( $event->type == SDL_QUIT ) {
        $app->stop();
    }
    elsif ( $event->type == SDL_KEYDOWN ) {
        my $key = SDL::Events::get_key_name( $event->key_sym );

        if ( $key eq '1' || $key eq '2' ) {
            $self->game->transit_to( 'main_game', players => $key );
        }
    }
}

__PACKAGE__->meta->make_immutable;

no Mouse;

1;



=pod

=head1 NAME

Games::SolarConflict::Controller::MainMenu - Main menu controller

=head1 VERSION

version 0.000001

=for Pod::Coverage handle_event handle_show

=head1 SEE ALSO

=over 4

=item * L<Games::SolarConflict>

=back

=head1 AUTHOR

Jeffrey T. Palmer <jtpalmer@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is Copyright (c) 2012 by Jeffrey T. Palmer.

This is free software, licensed under:

  The MIT (X11) License

=cut


__END__




( run in 2.824 seconds using v1.01-cache-2.11-cpan-437f7b0c052 )