stratadox/ascii-renderer

There is no license information available for the latest version (v0.1) of this package.

Rendering engine for ascii art

v0.1 2021-12-15 23:42 UTC

This package is auto-updated.

Last update: 2024-10-16 05:48:16 UTC


README

A tiny rendering engine for ascii art.

What is this

Ascii Renderer is made to facilitate ascii art projects by loading partial artworks and combining them into a (potentially animated) result.

What can it do

The module can load a custom file format into animations with masked frames.

By including references to potential other animations, a sort-of skeletal system can be used.

How to use it?

To load files:

use Stratadox\AsciiRenderer\FileLoader;
use Stratadox\AsciiRenderer\ImageFactory;
use Stratadox\AsciiRenderer\MaskFactory;

$loader = new FileLoader(new MaskFactory(), new ImageFactory());
$animation = $loader->load('file/name.ext');

To combine animations:

use Stratadox\AsciiRenderer\AnimationCombiner;
use Stratadox\AsciiRenderer\Combiner;
use Stratadox\AsciiRenderer\FileLoader;
use Stratadox\AsciiRenderer\ImageFactory;
use Stratadox\AsciiRenderer\MaskFactory;

$loader = new FileLoader(new MaskFactory(), new ImageFactory());
$combiner = new AnimationCombiner(new Combiner());

$animation = $combiner->combine(
    [
        'item2' => $this->loader->load('/Asset/item/kite-shield-back.txt'),
        'body' => $this->loader->load('/Asset/body/leather-jacket-walk.txt'),
        'head' => $this->loader->load('/Asset/head/default.txt'),
        'headgear' => $this->loader->load('/Asset/headgear/cap.txt'),
        'item1' => $this->loader->load('/Asset/item/axe.txt'),
    ],
    'body'
);

assert(8 === $animation->length())
assert((string) $animation->frame(0)) === <<<'EOT'
  ____       
 /   _}      
 \__/*}  ./\ 
 /~^~\--<)+))
 |(  V___|\/ 
 \\_____(| ) 
 /~~~\   |/  
 (   \   o   
  \\  ) /    
  ) \ |/     
 / /| |      
[__b[__b     
EOT
);

What do the files look like?

For example, the cap of the character above:

mask:
width: 6
height: 3
origin-x: 2
origin-y: 2

mask-frames:
1
 ....
######
####

frames:
1
 ____
/   _}
\__/

Their axe:

mask:
origin-x: 1
origin-y: 3
width: 5
height: 6

mask-frames:
1
 .##
#####
 ###
 #
 #
 #

frames:
1
 ./\
<)+))
 |\/
 |
 |
 o

For more examples, see the test assets.