This avoids an edgecase where presumably some floating point rounding error results in predicting a `to_tile_coords` that isn't actually stepped on, causing the loop to loop forever.
This commit is contained in:
Sebastian 2021-10-24 22:58:11 +03:00 committed by GitHub
parent 6ce65b29df
commit 9909e44f23
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 6 additions and 0 deletions

View File

@ -287,10 +287,16 @@ fn process_line_segment(line_segment: LineSegment2F,
match next_step_direction { match next_step_direction {
None => break, None => break,
Some(StepDirection::X) => { Some(StepDirection::X) => {
if tile_coords.x() == to_tile_coords.x() {
break;
}
t_max += vec2f(t_delta.x(), 0.0); t_max += vec2f(t_delta.x(), 0.0);
tile_coords += vec2i(step.x(), 0); tile_coords += vec2i(step.x(), 0);
} }
Some(StepDirection::Y) => { Some(StepDirection::Y) => {
if tile_coords.y() == to_tile_coords.y() {
break;
}
t_max += vec2f(0.0, t_delta.y()); t_max += vec2f(0.0, t_delta.y());
tile_coords += vec2i(0, step.y()); tile_coords += vec2i(0, step.y());
} }