Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently, arrow pathfinding works using the following algorithm:
This algorithm often creates arrows that are way squigglier and hard to follow than they really need to be. Additionally, it often does four times more work than it needs to, because it runs once for every combination of start and end points.
This PR replaces the greedy search algorithm with a slightly more expensive A* algorithm, while also using an algorithm that allows automatically picking the best path from one of a number of start points to one of a number of end points, eliminating the need to run the algorithm more than once.
By using an A* algorithm, we also gain more control over the pathfinding, by the use of weights. This PR takes advantage of this fact to improve arrow generation in the following ways:
This also opens the door for future work in order to discourage arrows from overlapping for long distances, but that's left to another PR.
Before
After