NAME

   Graphics::Raylib - Perlish wrapper for Raylib videogame library

VERSION

   version 0.017

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
   <http://www.raylib.com/examples.html> or games
   <http://www.raylib.com/games.html>!

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. Check out the examples/ directory for
   examples on how to do so.

TESTING

   If you want to skip graphical tests when installing, define
   NO_GRAPHICAL_TEST in the environment. These tests are also skipped
   automatically if no graphic device is available.

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.

     If no graphic device is available it returns an undef value.

   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.

   draw3D($coderef)

     Begins 3D 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

More?

   Check out the examples/
   <https://github.com/athreef/Graphics-Raylib/tree/master/examples>
   directory in the distribution or at raylib
   <https://github.com/raysan5/raylib/tree/master/examples>. Also check
   out the games in the repository!

GIT REPOSITORY

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

SEE ALSO

   http://www.raylib.com

   Graphics::Raylib::Shape

   Graphics::Raylib::XS Alien::raylib

AUTHOR

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

COPYRIGHT AND LICENSE

   Copyright (C) 2017-2018 Ahmad Fatoum

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

RAYLIB LICENSE

   This is an unofficial wrapper of http://www.raylib.com.

   raylib is Copyright (c) 2013-2016 Ramon Santamaria and available under
   the terms of the zlib/libpng license. Refer to XS/LICENSE.md for full
   terms.