///|
/// Import a Tiled JSON battlefield, then preview a weighted tactical move.
fn main {
  let source =
    #|{
    #|  "orientation": "orthogonal",
    #|  "width": 6,
    #|  "height": 5,
    #|  "layers": [
    #|    {
    #|      "name": "Collision",
    #|      "type": "tilelayer",
    #|      "data": [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]
    #|    },
    #|    {
    #|      "name": "Terrain",
    #|      "type": "tilelayer",
    #|      "data": [0, 0, 2, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0]
    #|    }
    #|  ]
    #|}
  let options = @pixelkit.tiled_options(terrain_layer=Some("Terrain"), terrain_costs=[
    @pixelkit.terrain_cost("2", 3),
    @pixelkit.terrain_cost("3", 5),
  ])
  let map = @pixelkit.parse_tiled_json(source, options~).unwrap()
  let actor = @pixelkit.point(0, 0)
  let target = @pixelkit.point(5, 4)
  let preview = @pixelkit.movement_preview(map, actor, target, 14).unwrap()
  let reachable = preview.reachable_points()
  let path = preview.path().unwrap()

  println("Tiled JSON tactical preview")
  println("")
  println("Imported map (# wall, + reachable, * selected route):")
  println(map.render_ascii_overlay(reachable~, path~))
  println("")
  println("Target reachable: \{preview.target_reachable()}")
  println("Selected route cost: \{preview.path_cost().unwrap()}")
  println("Selected route steps: \{path.length() - 1}")
}