https://cs.stanford.edu/people/abisee/tutorial/customize.html
https://www.redblobgames.com/pathfinding/a-star/introduction.html
https://www.redblobgames.com/pathfinding/a-star/implementation.html