Module tilesets

Overview

A Tileset acts as a single registry for accessing tiles by name across two or more NamedAtlases. All included NamedAtlases must have the same partition dimensions. As they are loaded, tiles will overwrite any existing tiles with the same name.

Types

TilesetAtlasInfo = object
  filename*: string            ## path on disk of source image
  tiles*: seq[string]          ## a list of tile names
  
Used for deserializing a single Tileset Atlas from resource-packs
Tileset = ref object
  info*: TilesetInfo
  atlases*: seq[NamedAtlas]
TilesetManager = ref object
  atlases*: NamedAtlasManager
  registry*: Table[string, Tileset]

Procs

proc newTilesetManager(window: WindowPtr; display: RendererPtr): TilesetManager {.
    raises: [], tags: [].}
proc loadPack(tm: TilesetManager; filename: string) {.raises: [ValueError, IOError,
    Exception, JsonParsingError, IndexError, KeyError, NoSuchResourceError,
    InvalidResourceError], tags: [ReadIOEffect, RootEffect, ReadDirEffect].}

Load a resource-pack of Tilesets. Assets inside of a Tilesets resource-pack should be unmarshalable by the TilesetInfo type.

Example TilesetInfo JSON

"example_tileset": {
  "description": "A texture used as an example",
  "authors": ["foo", "bar"]
  "width": 32, "height": 32,
  "atlases": [
    {
      "filename": "tilesets/terrain.png",
      "tiles": ["dirt", "stone", "water", "ice"]
    },
    {
      "filename": "tilesets/plants.png",
      "tiles": ["bush", "grass", "tree", "cat-tail"]
    }
}
proc get[](tm: TilesetManager; name): Tileset
proc render(display: RendererPtr; tileset: Tileset; name: string; dx, dy: int) {.
    raises: [DivByZeroError], tags: [].}