[suspendmanager] Detect and protect dead end constructions #658
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.
Fixes DFHack/dfhack#3049 and DFHack/dfhack#3157
Replace the suspendmanager blocking detection. This new approach explore groups of connected construction jobs, and suspend corridors that would prevent accessing a deadend or the cluster entirely.
This approach handles many more situations, the most important being the issues linked above. It also behaves better for filling area, which was mentioned on discord.
It still have some short-coming, such as interior corridors in a big cluster not being suspended, and the general algorithm feeling more complicated than it should be but all my attempt to simplify the general logic lead to many blocking points...
Two situations where the previous approach would mostly fail, but are now well handled:
Two-z walls where dwarves must build the walls one by one:
Area filling: