@@ -169,28 +169,29 @@ public Result<EdgeT> runPathfinding(
169
169
seen .put (step .range , step .nReachedTargets );
170
170
if (hasReachedEnd (targetsOnEdges .size (), step ))
171
171
return buildResult (step );
172
- // Check if the next target is reached in this step
173
- for (var target : targetsOnEdges .get (step .nReachedTargets ).apply (step .range .edge ))
174
- if (step .range .start <= target .offset ) {
175
- // Adds a new step precisely on the stop location. This ensures that we don't ignore the
176
- // distance between the start of the edge and the stop location
177
- var newRange = new EdgeRange <>(target .edge , step .range .start , target .offset );
178
- newRange = filterRange (newRange );
179
- assert newRange != null ;
180
- if (newRange .end != target .offset ) {
181
- // The target location is blocked by a blocked range, it can't be accessed from here
182
- continue ;
172
+ // Check if the next target is reached in this step, only if the step doesn't already reach a step
173
+ if (step .prev == null || step .nReachedTargets == step .prev .nReachedTargets )
174
+ for (var target : targetsOnEdges .get (step .nReachedTargets ).apply (step .range .edge ))
175
+ if (step .range .start <= target .offset ) {
176
+ // Adds a new step precisely on the stop location. This ensures that we don't ignore the
177
+ // distance between the start of the edge and the stop location
178
+ var newRange = new EdgeRange <>(target .edge , step .range .start , target .offset );
179
+ newRange = filterRange (newRange );
180
+ assert newRange != null ;
181
+ if (newRange .end != target .offset ) {
182
+ // The target location is blocked by a blocked range, it can't be accessed from here
183
+ continue ;
184
+ }
185
+ var stepTargets = new ArrayList <>(step .targets );
186
+ stepTargets .add (target );
187
+ registerStep (
188
+ newRange ,
189
+ step .prev ,
190
+ step .totalDistance ,
191
+ step .nReachedTargets + 1 ,
192
+ stepTargets
193
+ );
183
194
}
184
- var stepTargets = new ArrayList <>(step .targets );
185
- stepTargets .add (target );
186
- registerStep (
187
- newRange ,
188
- step .prev ,
189
- step .totalDistance ,
190
- step .nReachedTargets + 1 ,
191
- stepTargets
192
- );
193
- }
194
195
var edgeLength = edgeToLength .apply (step .range .edge );
195
196
if (step .range .end == edgeLength ) {
196
197
// We reach the end of the edge: we visit neighbors
0 commit comments