# `Cauldron2D.Net.Sheet`
[🔗](https://github.com/jaman/cauldron/blob/v0.1.3/cauldron_2d_net/lib/cauldron_2d/net/sheet.ex#L1)

A `Cauldron2D.Atlas` as one PNG sprite sheet and an index a browser draws from,
packed by `Cauldron2D.Sheet`.

    sheet = Cauldron2D.Net.Sheet.build(atlas)
    Cauldron2D.Net.Sheet.index(sheet, "/atlas.png")

`cached/1` keeps the sheet of an installed atlas and rebuilds it when a different
atlas is installed under the name.

# `t`

```elixir
@type t() :: %{
  tile: pos_integer(),
  arts: %{required(term()) =&gt; pos_integer()},
  frames: [[non_neg_integer()]],
  anim: %{
    required(pos_integer()) =&gt; %{indices: [pos_integer()], fps: pos_integer()}
  },
  png: binary(),
  columns: pos_integer(),
  rows: pos_integer(),
  void: String.t()
}
```

# `build`

```elixir
@spec build(Cauldron2D.Atlas.t() | Cauldron2D.Atlas.name()) :: t()
```

Lay every art of `atlas` out on one sheet.

# `cached`

```elixir
@spec cached(Cauldron2D.Atlas.name()) :: t()
```

The sheet for the installed atlas `name`, built on first use and again when the atlas changes.

# `dimensions`

```elixir
@spec dimensions(t()) :: {pos_integer(), pos_integer()}
```

The sheet's pixel size.

# `index`

```elixir
@spec index(t(), String.t()) :: map()
```

What a client needs to draw from the sheet at `url`, as `Cauldron2D.Sheet.index/2` gives it.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
