The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Graphics::Raylib - Perlish wrapper for Raylib videogame library

VERSION

version 0.005

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

via GIPHY

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.