NAME
Graphics::Raylib - Perlish wrapper for Raylib videogame library
VERSION
version 0.004
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.
METHODS/SUBS AND ARGUMENTS
window($width, $height, $title)
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 $MUTATION_CHANCE = 0.000;
###########
my $CELL_SIZE = 3;
use Graphics::Raylib '+family'; # one use to rule them all
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);
$g->clear(BLACK);
while (!$g->exiting) {
$bitmap->matrix = unpdl($gen);
$bitmap->color = $rainbow->();
$text->text = "Generation " . ($i++);
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);
# mutation
$next |= $neighbourhood == 2 if rand(1) < $MUTATION_CHANCE;
# procreate
$gen = $next;
}
Result
GIT REPOSITORY
http://github.com/athreef/Graphics-Raylib
SEE ALSO
Graphics::Raylib::XS Alien::raylib
AUTHOR
Ahmad Fatoum <athreef@cpan.org>, 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.