summaryrefslogtreecommitdiff
path: root/game
diff options
context:
space:
mode:
authorDan Goodliffe <dan.goodliffe@octal.co.uk>2025-01-02 17:29:09 +0000
committerDan Goodliffe <dan.goodliffe@octal.co.uk>2025-01-02 17:29:11 +0000
commit02c37c477099f69d1468a51ab66d05f3e7bf35fd (patch)
tree012c510a7f3baacb89157de985badd3a5fbdbacd /game
parentReturn angle of intersection of arc with line (diff)
downloadilt-02c37c477099f69d1468a51ab66d05f3e7bf35fd.tar.bz2
ilt-02c37c477099f69d1468a51ab66d05f3e7bf35fd.tar.xz
ilt-02c37c477099f69d1468a51ab66d05f3e7bf35fd.zip
Fix curve walk edge case where the curve legitimately returns to the previous faceterrain-for-networks
Diffstat (limited to 'game')
-rw-r--r--game/geoData.cpp6
1 files changed, 2 insertions, 4 deletions
diff --git a/game/geoData.cpp b/game/geoData.cpp
index 45e6590..f0e38d0 100644
--- a/game/geoData.cpp
+++ b/game/geoData.cpp
@@ -315,16 +315,14 @@ GeoData::walkUntil(const PointFace & from, GlobalPosition2D to, GlobalPosition2D
while (step.current.is_valid() && !op(step)) {
step.previous = step.current;
for (const auto next : fh_range(step.current)) {
- if (opposite_halfedge_handle(next) == step.exitHalfedge) {
- continue;
- }
step.current = opposite_face_handle(next);
if (step.current.is_valid()) {
const auto e1 = point(to_vertex_handle(next));
const auto e2 = point(to_vertex_handle(opposite_halfedge_handle(next)));
if (const auto intersect = arc.crossesLineAt(e1, e2)) {
step.exitHalfedge = next;
- step.exitPosition = intersect.value().first;
+ arc.ep0 = step.exitPosition = intersect.value().first;
+ arc.first = std::nextafter(intersect.value().second, INFINITY);
break;
}
}