NAME

   Graphics::Raylib - Perlish wrapper for Raylib videogame library

VERSION

   version 0.010

SYNOPSIS

       use Graphics::Raylib;
       use Graphics::Raylib::Text;
       use Graphics::Raylib::Color ':all';

       my $g = Graphics::Raylib->window(120,20);
       $g->fps(5);

       my $text = Graphics::Raylib::Text->new(
           text => 'Hello World!',
           color => DARKGRAY,
           size => 20,
       );

       while (!$g->exiting) {
           Graphics::Raylib::draw {
               $g->clear;

               $text->draw;
           };
       }

raylib

   raylib is highly inspired by Borland BGI graphics lib and by XNA
   framework. Allegro and SDL have also been analyzed for reference.

   NOTE for ADVENTURERS: raylib is a programming library to learn
   videogames programming; no fancy interface, no visual helpers, no
   auto-debugging... just coding in the most pure spartan-programmers way.
   Are you ready to learn? Jump to code examples!.

IMPLEMENTATION

   This is a Perlish wrapper around Graphics::Raylib::XS, but not yet
   feature complete.

   You can import Graphics::Raylib::XS for any functions not yet exposed
   perlishly. Scroll down for an example.

AUTOMATIC IMPORT

   use Graphics::Raylib '+family'; can be used as a shorthand for

       use Graphics::Raylib::Color ':all';
       use Graphics::Raylib::Shape;
       use Graphics::Raylib::Text;
       use Graphics::Raylib::Mouse;
       use Graphics::Raylib::Keyboard ':all';

METHODS/SUBS AND ARGUMENTS

   window($width, $height, [$title = $0])

     Constructs the Graphics::Raylib window. $title is optional and
     defaults to $0. Resources allocated for the window are freed when the
     handle returned by window goes out of scope.

   fps($fps)

     If $fps is supplied, sets the frame rate to that value. Returns the
     frame rate in both cases.

   clear($color)

     Clears the background to $color. $color defaults to
     Graphics::Raylib::Color::RAYWHITE.

   exiting()

     Returns true if user attempted exit.

   draw($coderef)

     Begins drawing, calls $coderef-()> and ends drawing. See examples.

EXAMPLES

   Conway's Game of Life

         my $HZ = 120;
         my $SIZE = 160;
         ###########

         my $CELL_SIZE = 3;

         use Graphics::Raylib '+family'; # one use to rule them all
         # Alternatively
         use Graphics::Raylib::Color ':all';
         use Graphics::Raylib::Shape;
         use Graphics::Raylib::Text;

         use PDL;
         use PDL::Matrix;

         sub rotations { ($_->rotate(-1), $_, $_->rotate(1)) }

         my @data;
         foreach (0..$SIZE) {
             my @row;
             push @row, !!int(rand(2)) foreach 0..$SIZE;
             push @data, \@row;
         }

         my $gen = mpdl \@data;

         my $g = Graphics::Raylib->window($CELL_SIZE*$SIZE, $CELL_SIZE*$SIZE);

         $g->fps($HZ);

         my $text = Graphics::Raylib::Text->new(color => RED, size => 20);

         my $bitmap = Graphics::Raylib::Shape->bitmap(
             matrix => unpdl($gen),
             # color => GOLD # commented-out, we are doing it fancy
         );

         my $rainbow = Graphics::Raylib::Color::rainbow(colors => 240);

         while (!$g->exiting) {
             $bitmap->matrix = unpdl($gen);
             $bitmap->color = $rainbow->();
             $text->text = "Generation " . ($i++);

             $g->clear(BLACK);

             Graphics::Raylib::draw {
                 $bitmap->draw;
                 $text->draw;
             };


             # replace every cell with a count of neighbours
             my $neighbourhood = zeroes $gen->dims;
             $neighbourhood += $_ for map { rotations } map {$_->transpose}
                                      map { rotations }      $gen->transpose;

             #  next gen are live cells with three neighbours or any with two
             my $next = $gen & ($neighbourhood == 4) | ($neighbourhood == 3);

             # procreate
             $gen = $next;
         }

Result

GIT REPOSITORY

   http://github.com/athreef/Graphics-Raylib

SEE ALSO

   Graphics::Raylib::Shape

   Graphics::Raylib::XS Alien::raylib

AUTHOR

   Ahmad Fatoum <[email protected]>, http://a3f.at

COPYRIGHT AND LICENSE

   Copyright (C) 2017 Ahmad Fatoum

   This library is free software; you can redistribute it and/or modify it
   under the same terms as Perl itself.