Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

athreef/Graphics-Raylib

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
70 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NAME

Graphics::Raylib - Perlish wrapper for Raylib videogame library

VERSION

version 0.025

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 or games!

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::Texture;
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 $img = Graphics::Raylib::Texture->new(
    matrix => unpdl($gen),
    fullscreen => 1,
    # color => GOLD # commented-out, we are doing it fancy
);

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

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

    $g->clear(BLACK);

    Graphics::Raylib::draw {
        $img->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

via GIPHY

More?

Check out the examples/ directory in the distribution or at raylib. 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 <athreef@cpan.org>, 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.

About

Perlish wrapper for Raylib videogame library

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.