Cauldron2D.Easel.Drafter

The atlas editor in the terminal, on drafter: the arts of a directory, and one of them on a zoomed canvas with the palette, the tools and the frames beside it. The pointer paints; every tool and colour has a key.

Installation

def deps do
[
{:cauldron_2d_easel_drafter, "~> 0.1", only: :dev}
]
end
mix cauldron.easel priv/art --tile 16 --atlas my_game
Drafter.run(Cauldron2D.Easel.Drafter, props: %{dir: "priv/art", tile: 16, atlas: :my_game})

A pixel is a block of cells in its colour, so it works in any terminal, over ssh included. The pointer paints; every tool, colour and frame in the side panel is a button; ? lists every key on screen. c opens a colour picker — a chart of hues and greys with the palette under it, chosen with the pointer or the arrows — and adds the colour under the next free key; i is an eyedropper. With --atlas, w saves and installs the directory as that atlas, and a game running in the same VM that subscribed to it (Cauldron2D.Atlas.subscribe/1) redraws with the new art on its next frame.

Beside the canvas the picture is shown at actual size, drawn by the engine's own surface widget the way a game draws it: through the terminal's graphics protocol (kitty, sixel, iTerm) where the terminal has one, animated at the picture's rate; as its glyph where it has not. m tiles it, for a picture meant to repeat. This is what french_curve gives the editor: the picture as the player will see it, not as blocks of cells.

On the arts screen D derives an art from the one chosen — name = from ART; colour K #rrggbb; flip h; over HAT 0 -2, the line Linocut.Derive reads — kept in atlas.txt and rebuilt from the drawing every time the atlas loads; y clones one as a picture of its own. Draw the knight once; the red knight is a line.

Cauldron2D.Easel.Drafter.Canvas is the widget, usable in any drafter application: {:easel_canvas, [easel: easel, zoom: 4, on_paint: :paint]}. Cauldron2D.Easel.Drafter.ActualSize is the picture as an installed atlas for a Cauldron2D.Drafter.Surface to draw.

This is a pixel-art tool: a picture is a palette of up to ninety colours and a grid of keys, which is what .pic holds and what every renderer draws. A .png with more colours than that is refused on load rather than quantised.

License

MIT