///|
/// Turn-based movement example for a grid game.
fn main {
  let source =
    #|S....
    #|##.#.
    #|...#G
    #|.....
  let map = @pixelkit.parse_ascii_map(source).unwrap()
  let actor = map.single_point_with_id("start").unwrap()
  let goal = map.single_point_with_id("goal").unwrap()
  let move_budget = 5
  let selected_target = @pixelkit.point(4, 1)
  let reachable = @pixelkit.bfs_reachable(map, actor, move_budget).unwrap()
  if !reachable.contains(selected_target) {
    println("selected target is outside this turn's movement range")
    return
  }
  let path = @pixelkit.astar(map, actor, selected_target).unwrap().unwrap()
  println("turn: 1")
  println("actor: (\{actor.x()}, \{actor.y()})")
  println("goal: (\{goal.x()}, \{goal.y()})")
  println("move budget: \{move_budget}")
  println("reachable cells: \{reachable.length()}")
  println("selected target: (\{selected_target.x()}, \{selected_target.y()})")
  println("planned movement cost: \{map.path_cost(path).unwrap()}")
  println(map.render_ascii_overlay(reachable~, path~))
}