The shapes Cauldron2D.Projection.Volume knows without being told: a sphere, a
cylinder, a cone, a beam, and a set of whole grid tiles.
{:sphere, 1.5, 0.0} half a ball standing on the ground
{:sphere, 1.0, 1.5} a ball floating a tile and a half up
{:cylinder, 3.0, 2.0} a disc of three tiles, two tiles tall
{:cone, 6.0, :math.pi() / 2, 0.0, 2.0} a quarter turn wide, six tiles long
{:beam, 8.0, 1.0, 0.0, 2.0} a tile wide and eight long, along `+x`
{:cells, MapSet.new([{0, 0}, {1, 0}]), 2.0} two whole tilesEverything is measured from the volume's own place on the ground, with z running up.
A sphere's second number is how far its centre floats; at 0.0 it is a dome. A cone
and a beam run along a heading in radians, 0 along +x, and a cone's spread is the
angle it opens to, less than half a turn. :cells covers whole tiles of the grid the
volume stands on, named by their offset from it, which is how a table that plays by
squares marks an area out; put the volume on a tile corner for it.
Nothing below the ground counts, so these shapes do not clip themselves to it.
Summary
Functions
@spec kinds() :: [atom()]
The shapes this module takes, for a caller checking one before it is drawn.